¿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');
?>

¿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.


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.


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


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");

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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.