Obtener la ruta de la carpeta de instalación de WordPress

6 minutos de lectura

avatar de usuario
usuario983248

¿Hay alguna manera de obtener la ruta a donde está instalado WordPress?

Estaba usando lo siguiente:

$root = realpath($_SERVER["DOCUMENT_ROOT"]);

Está bien para www.example.com -> /usr/local/pem/vhosts/165312/webspace/httpdocs

No está bien para www.example.com/blog ya que necesito codificar el nombre de la carpeta (blog).

Más tarde encontré una manera usando esto:

$iroot = getcwd();
$folder = explode("https://stackoverflow.com/", $iroot);
$dir = $folder[8]; // I know is 8
$root = realpath($_SERVER["DOCUMENT_ROOT"]);
require "$root/$dir/wp-blog-header.php";

Pero aún así es un montón de cosas complicadas. ¿Existe una forma sencilla de llegar a donde está instalado WordPress (la ruta) sin necesidad de codificación?

Nota 1 Las funciones de WordPress no funcionarán ya que esto está de alguna manera fuera de WordPress. Como se señaló en el último ejemplo, el objetivo de determinar la ruta de instalación de WordPress es require "wp-blog-header.php"; en múltiples instalaciones de WordPress donde cada instalación usa una carpeta diferente (ejemplo.com/blog-uno y ejemplo.com/blog-dos), no WordPress MU o sitio múltiple.

Nota 2 si en lugar de require "$root/$dir/wp-blog-header.php"; yo suelo require "wp-blog-header.php"; funcionará siempre que el archivo esté en la misma carpeta, pero en mi caso, el archivo estará a veces en una carpeta diferente.

  • ¿Qué pasa con la consulta de la base de datos? WordPress guarda esta variable también en su wp_config?

    – Jure C.

    10 de junio de 2012 a las 11:41

  • @JureC. ¿Lo publicarás como respuesta con un ejemplo? Es una buena idea.

    – usuario983248

    10 de junio de 2012 a las 12:06

avatar de usuario
Estevao Lucas

Utilice la constante ABSPATH:

<?php echo ABSPATH ?>

Esto debería imprimir su ruta de WordPress.

avatar de usuario
akamaozu

Esto es lo que estoy haciendo:

Configuración:

$docRoot = $_SERVER['DOCUMENT_ROOT'];
$scriptName = $_SERVER['SCRIPT_NAME'];
$queryArray = explode("https://stackoverflow.com/", $scriptName);
$queryLength = count($queryArray);

Uso:

require_once($docRoot . ($queryLength > 2 ? "https://stackoverflow.com/".$queryArray[$queryLength - 2] : "" ) . '/wp-blog-header.php');

Esto me está funcionando muy bien en este momento para instanciar un entorno de WordPress, independientemente de dónde esté el script. Definitivamente necesita desinfectar antes de usar cualquier $_SERVIDOR variables (y necesito verificar esto tres veces fuera de mi entorno localhost), pero no creo que requiera modificaciones severas para ser una solución universal práctica.

avatar de usuario
Guillermo Turrell

asi es como se hace desde dentro de WordPress (que no es lo que estaba preguntando el interrogador, pero lo que sospecho que mucha gente estará buscando…)

Hay una función dedicada, get_home_path()que te dará algo como:

/srv/www/my-site/htdocs/

Otras funciones para directorios de archivos y contenidos (y rutas web).

avatar de usuario
usuario983248

Ejemplo de raíz:

  • /usr/local/pem/vhosts/165312/webspace/httpdocs/blog-uno
  • /usr/local/pem/vhosts/165312/webspace/httpdocs/blog-dos
  • /usr/local/pem/vhosts/165312/webspace/httpdocs/algún-blog

El siguiente ejemplo funcionará en ningún de los blogs (“blog-one”, “blog-two” y “some-blog”) y el script o archivo se puede instalar en ningún subcarpeta del blog.

$current_path = getcwd(); // Get the current path to where the file is located
$folder = explode("https://stackoverflow.com/", $current_path); // Divide the path in parts (aka folders)
$blog = $folder[8]; // The blog's folder is the number 8 on the path

// $root = path without the blog installation folder.
$root = realpath($_SERVER["DOCUMENT_ROOT"]);

// Now I can require any WordPress file
require "$root/$dir/wp-blog-header.php";

// For the current installation
// For example, wp-blog-header.php to get the blog name or
// wp-config.php to access the database.

Esto hace que el script sea independiente. El script funcionará en cualquier carpeta de cualquier instalación de WordPress siempre que la carpeta sea el número 8. Si la instalación está en una subcarpeta, el número 8 deberá aumentarse. También tenga en cuenta que la ruta actual puede tener más o menos carpetas, lo que significa que el script debe adaptarse en consecuencia.

Nota: Esto funcionará “codificando” la posición de la carpeta en la ruta y, siempre que todas las instalaciones tengan la misma posición, el script funcionará. Al revés es codificar de forma rígida.

avatar de usuario
Drahkar

Si todo lo que está intentando es el directorio actual donde se encuentra el archivo al que se llama, entonces usaría:

realpath(dirname(__FILE__))

Mucho de esto depende de dónde se encuentra el archivo. Si está en el mismo directorio que la instalación de WordPress, sería algo como:

<?php
    $root = realpath(dirname(__FILE__));
    require "$root/wp-blog-header.php";
?>

  • lo siento pero eso no funcionó. necesito reemplazar ‘EXPEDIENTE‘ con algo más ? porque como publicaste en tu respuesta no funciona.

    – usuario983248

    10 de junio de 2012 a las 2:32

  • Lo lamento. Olvidé agregar el nombre de directorio para eliminar el nombre de archivo de la ruta. Acabo de actualizarlo. Y debe escribirlo tal como está.

    – Drahkar

    10 de junio de 2012 a las 2:34

  • lo siento, pero solo funciona si el script se encuentra en la misma carpeta. Busco una solución un poco más flexible, una que pueda funcionar en cualquier carpeta como se indica en la Nota 2 sobre la pregunta.

    – usuario983248

    10 de junio de 2012 a las 2:35

  • Desafortunadamente, lo que está describiendo requerirá que rastree dónde se encuentran los archivos de alguna manera y haga referencia a la ruta de esa manera. En su lugar, recomiendo tener un script para esto en cada uno de los directorios de WordPress que luego llaman a la ubicación generalizada para el resto del código. Básicamente, un script de carga. Cualquier otra cosa será difícil de implementar y dolorosa de administrar a largo plazo.

    – Drahkar

    18 de junio de 2012 a las 13:33

avatar de usuario
Pedro Mortensen

Si puede acceder a la base de datos, debe hacer

update_option('wp_dir',dirname(__FILE__));

en el archivo wp-blog-header.php.

Luego, conéctese a la base de datos desde cualquier aplicación y recupere la ruta con la siguiente consulta:

select option_value from wp_options where option_name="wp_dir";

Por supuesto, necesitaría saber el nombre de la base de datos y el prefijo de la tabla de WordPress.

PD: Esta puede o no ser tu solución, pero es una de las formas.

  • lo siento pero eso no funcionó. necesito reemplazar ‘EXPEDIENTE‘ con algo más ? porque como publicaste en tu respuesta no funciona.

    – usuario983248

    10 de junio de 2012 a las 2:32

  • Lo lamento. Olvidé agregar el nombre de directorio para eliminar el nombre de archivo de la ruta. Acabo de actualizarlo. Y debe escribirlo tal como está.

    – Drahkar

    10 de junio de 2012 a las 2:34

  • lo siento, pero solo funciona si el script se encuentra en la misma carpeta. Busco una solución un poco más flexible, una que pueda funcionar en cualquier carpeta como se indica en la Nota 2 sobre la pregunta.

    – usuario983248

    10 de junio de 2012 a las 2:35

  • Desafortunadamente, lo que está describiendo requerirá que rastree dónde se encuentran los archivos de alguna manera y haga referencia a la ruta de esa manera. En su lugar, recomiendo tener un script para esto en cada uno de los directorios de WordPress que luego llaman a la ubicación generalizada para el resto del código. Básicamente, un script de carga. Cualquier otra cosa será difícil de implementar y dolorosa de administrar a largo plazo.

    – Drahkar

    18 de junio de 2012 a las 13:33

¿Por qué no simplemente hacer lo siguiente en wp-config.php?

$WP_PATH = implode("https://stackoverflow.com/", (explode("https://stackoverflow.com/", $_SERVER["PHP_SELF"], -1)));

p.ej

$WP_PATH = implode("https://stackoverflow.com/", (explode("https://stackoverflow.com/", "/one/two/three/index.php", -1)));

devolverá “/uno/dos/tres” y

$WP_PATH = implode("https://stackoverflow.com/", (explode("https://stackoverflow.com/", "/index.php", -1)));

volverá “”

¿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