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