cómo permitir require_once() al archivo php en wordpress

4 minutos de lectura

avatar de usuario
Samad

Tengo un sitio web hecho con wordpress e hice algunos archivos php que quiero ejecutar y por alguna razón necesito require_once(/wp-includes/class-phpass.php) pero obtuve Error al abrir el error requerido, hay un htaccess en la carpeta raíz y no existe en la carpeta wp-includes, el htaccess contiene esto:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Entonces, ¿cómo resolver este problema? , Gracias

Editar

mi wordpress no está instalado en la carpeta raíz es como root/live

  • require es un procedimiento local del sistema de archivos y, por lo tanto, no pasa el .htaccess normas.

    – Niels Keurentjes

    16/10/2014 a las 21:32

  • Entonces, ¿por qué tengo ese error?

    – Samad

    16/10/2014 a las 21:34

  • Probablemente un problema con las rutas de sus archivos.

    – Leo Bedrosian

    16/10/2014 a las 21:34

  • mi directorio raíz es así /index.php . . . /myfile.php /wp-includes/class-phpass.php y la función es require_once( ‘/wp-includes/class-phpass.php’ ); hay algo malo?!

    – Samad

    16/10/2014 a las 21:41

avatar de usuario
Niels Keurentjes

Suponiendo que este es su código literal:

require_once('/wp-includes/class-phpass.php');

No es de extrañar que no se pueda encontrar el archivo, ya que require opera en el nivel del sistema de archivos, por lo que probablemente necesite algo como /var/www/mysite/wp-includes/class-phpass.php en cambio.

Deberías poder hacer que funcione así:

require_once $_SERVER['DOCUMENT_ROOT'] . '/wp-includes/class-phpass.php';

Esto inserta la ruta raíz actual del sitio web antes de la subruta. $_SERVER['DOCUMENT_ROOT'] es por defecto la única apariencia que tiene PHP de una ‘ruta raíz’ a menos que lo enseñe mejor.

  • Sí, bueno, evito WordPress como la peste, así que no sé todas sus constantes personalizadas. Indiqué explícitamente ‘debería poder hacerlo funcionar’ porque probablemente estaba en la raíz. Todavía deberías, también si BASE_PATH es disponible, prefiera rutas relativas basadas en __DIR__ en cambio. Pero eliminaré esta respuesta ya que la tuya es más completa para WP.

    – Niels Keurentjes

    16/10/2014 a las 21:41

  • Acabo de editar mi comentario, parece que BASE_PATH ya no está disponible y codex.wordpress.org/Function_Reference/get_home_path es el nuevo método preferido 🙁

    – Jonathan

    16/10/2014 a las 21:42

  • Esa es una de las razones por las que preferiría mucho las rutas relativas basadas en __DIR__ – WordPress y sus API inconsistentes de mierda.

    – Niels Keurentjes

    16/10/2014 a las 21:43

  • sí, tendré que modificar algunos temas cuando llegue al trabajo mañana, ya que me acabo de dar cuenta de que probablemente estén todos borrados: o

    – Jonathan

    16/10/2014 a las 21:43

  • PHP no conoce el concepto de ‘caminos de inicio’. Un archivo PHP es solo eso: un archivo. No tiene el concepto de una ruta de inicio a menos que se le enseñe, es exactamente por eso que WP tiene esta función para ello.

    – Niels Keurentjes

    16/10/2014 a las 21:58

Compatibilidad con WordPress 5.x:

Esto se puede utilizar, por ejemplo, para functions.php de tu tema:

if (!defined("MY_THEME_DIR")) define("MY_THEME_DIR", trailingslashit( get_template_directory() ));

  require_once MY_THEME_DIR.'includes/bs4navwalker.php';

  • Tenga en cuenta que si usa temas secundarios, esto devolverá la ruta de la carpeta del tema principal. get_stylesheet_directory() parece ser más a prueba de errores.

    – de ninguna manera

    5 de junio de 2020 a las 17:27


avatar de usuario
jonathan

Como se menciona en el comentario, require es un procedimiento local del sistema de archivos: no procesa las reglas de htaccess.

Tú estas intentando

require_once(/wp-includes/class-phpass.php);

esto está buscando en la raíz de su máquina /wp-includes/

Esto funcionaría si su wordpress está instalado en document_root (burt no es la forma recomendada):

require_once($_SERVER['DOCUMENT_ROOT'] . '/wp-includes/class-phpass.php');

Pero deberías usar esto:

$install_path = get_home_path();
require_once($install_path. '/wp-includes/class-phpass.php');

como se hace referencia en esta página del códice: http://codex.wordpress.org/Function_Reference/get_home_path

Si está creando secuencias de comandos que necesitan usar el núcleo de wordpress, pero no se ejecutan dentro del alcance de wordpress, entonces deberá hacer lo siguiente:

define('WP_USE_THEMES', false);
global $wp, $wp_query, $wp_the_query, $wp_rewrite, $wp_did_header;
require( $_SERVER['DOCUMENT_ROOT'] . '/path/to/wp-load.php');

$install_path = get_home_path();
require_once($install_path. '/wp-includes/class-phpass.php');

  • Error fatal: llamada a la función no definida get_home_path()

    – Samad

    16/10/2014 a las 21:53

  • Edité mi respuesta; es posible que desee incluir más información en su pregunta sobre la inclusión del núcleo de wordpress en un script externo …

    – Jonathan

    16/10/2014 a las 22:01

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad