¿Cuál es la forma correcta de usar las funciones de WordPress fuera de los archivos de WordPress?

59

Leí sobre 2 métodos para inicializar la función de WordPress fuera de los archivos de WordPress para que podamos usar estas funciones en cualquier página o sitio web fuera del blog de WordPress.

¿Cuál de estos 2 métodos es el correcto? ¿Cuáles son los casos de uso para cada método si ambos son correctos? ¿Cuál es la deferencia entre usar un método u otro?

Método 1:

<?php 
    define('WP_USE_THEMES', false);
    require('./wp-blog-header.php');
?>

Método 2:

<?php 
    define('WP_USE_THEMES', false);
    require('./wp-load.php');
?>
alhoseany
fuente
¿Qué funciones de WP estás tratando de usar "fuera de WP" y por qué? Cualquiera de estos métodos seguirá cargando el entorno de WP (aunque sin soporte de temas), por lo que aún está invocando funciones dentro de WP.
EAMann
Estoy tratando de entender la diferencia entre los 2 métodos. Lo que haré es integrar el tema de WordPress con mi script de soporte. por lo que será necesario el encabezado, pie de página y el bucle de WordPress con un mayor apoyo para los widgets y otros plugins
alhoseany
Realmente dudo que esta sea la forma en que quieres hacer las cosas ... hay mejores soluciones que tratar de arrancar WordPress.
EAMann
Estoy abierto a sugerencias, estoy buscando la mejor manera de hacer las cosas. ¿Cuál es la mejor manera de integrar el tema de WordPress con una aplicación web externa?
alhoseany

Respuestas:

58

Hay poca diferencia entre los archivos. Cuando ve una página de WordPress, el primer archivo llamado es index.php. Y es, esencialmente, su "Método 1:"

define('WP_USE_THEMES', true);

/** Loads the WordPress Environment and Template */
require ('./wp-blog-header.php');

El archivo de encabezado del blog (que pone en cola el resto de WordPress) se carga wp-load.phpdirectamente y enciende WordPress. Aquí está la mayoría de wp-blog-header.php:

if ( !isset($wp_did_header) ) {

    $wp_did_header = true;

    require_once( dirname(__FILE__) . '/wp-load.php' );

    wp();

    require_once( ABSPATH . WPINC . '/template-loader.php' );

}

Entonces, la diferencia entre sus dos métodos es ... lo que está cargado.

El método 1 es exactamente lo que WordPress hace para cargarse (con la excepción de desactivar los temas). Entonces, si necesita todo WordPress y desea disparar todos los ganchos / acciones predeterminados, siga esa ruta.

El método 2 es solo un paso más en la línea. Carga todo WordPress, pero no llama wp()ni invoca el cargador de plantillas (utilizado por los temas). El método 2 será un poco más liviano, pero debería brindarle la misma funcionalidad.

EAMann
fuente
3
¿Hay un diagrama o algo que mapee todos estos archivos? Vi uno hace mucho tiempo pero no puedo encontrarlo.
ninja08
17

Método 2 de tu pregunta:

<?php 
define( 'WP_USE_THEMES', false ); // Don't load theme support functionality
require( './wp-load.php' );

wp-load.phpes el acceso a todas las funciones de WordPress, eso es todo. La primera línea le dice a WordPress que no cargue los archivos de tema; tal vez los archivos son necesarios para sus requisitos, luego elimine la línea.

bueltge
fuente
1
¿Qué significa esa primera línea?
Sagive SEO
8
La primera línea le dice a WordPress que no cargue toda su funcionalidad de soporte de temas. Básicamente, cargue menos archivos.
EAMann
¿Se necesita la primera línea solo para el primer método?
mcont
4

wp-blog-header.php adjuntará un estado de encabezado, devolverá un código de estado http de 404

wp-load.php no lo hará

Útil para tener en cuenta al usar ajax, ya que verifica el código de estado http

RayLau135
fuente
2

A veces, cargar las funciones.php del tema puede causar algunos problemas. Estaba rompiendo el html de mi otra página. Entonces eso fue lo que hice y resolvió mi problema:

define('STYLESHEETPATH', '');
define('TEMPLATEPATH', '');
require_once(RAIZ_WORDPRESS."/wp-load.php");
Wellington Lorindo
fuente
0

@ ninja08

Podemos usar la extensión php de xDebug para analizar un script.

solo habilítelo ;xdebug.profiler_enable = 1en su php.iniarchivo al eliminarlo ;desde el principio de la línea y después de esto reinicie el servidor apache y ejecute su sitio de wordpress ... ahora un archivo creado en el directorio tmp de su servidor xampp ... abra este archivo con la aplicación WincachGrind .

ahora puedes ver un mapa de tu script

WincacheGrind Simple Wordpress Analyze

Mostafa
fuente
Deberías haber agregado esto en el comentario a continuación ninja08. Esta es ahora una respuesta incorrecta.
alhoseany
2
@alhoseany sí ... ahora ... pero no tengo suficiente reputación ... y luego decido hacer esto.
Mostafa