Quelle est la bonne façon d'utiliser les fonctions WordPress en dehors des fichiers WordPress?

59

J'ai lu environ 2 méthodes d'initialisation de la fonction WordPress en dehors des fichiers WordPress afin que nous puissions utiliser ces fonctions sur n'importe quelle page ou site web en dehors du blog WordPress.

Laquelle de ces 2 méthodes est la bonne? Quels sont les cas d'utilisation de chaque méthode si les deux sont correctes? Quelle est la déférence entre l'utilisation de l'une ou l'autre méthode?

Méthode 1:

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

Méthode 2:

<?php 
    define('WP_USE_THEMES', false);
    require('./wp-load.php');
?>
alhoseany
la source
Quelles fonctions WP essayez-vous d'utiliser "en dehors de WP" et pourquoi? L'une ou l'autre de ces méthodes chargera toujours l'environnement WP (bien que sans le support de thème), vous invoquerez donc toujours des fonctions à l'intérieur de WP.
EAMann
J'essaie de comprendre la différence entre les 2 méthodes. Ce que je vais faire, c'est intégrer le thème wordpress à mon script d'assistance. donc aura besoin de l'en-tête, du pied de page et de la boucle de wordpress, ainsi que du support pour les widgets et autres plugins
alhoseany
Je doute vraiment que ce soit la façon dont vous voulez faire les choses… Il existe de meilleures solutions que d’essayer d’amorcer WordPress lui-même.
EAMann
Je suis ouvert aux suggestions, je cherche la meilleure façon de faire les choses? Quel est le meilleur moyen d'intégrer un thème wordpress avec une application web externe?
Alhoseany

Réponses:

58

Il y a peu de différence entre les fichiers. Lorsque vous affichez une page WordPress, le premier fichier appelé est index.php. Et c’est essentiellement votre "Méthode 1:"

define('WP_USE_THEMES', true);

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

Le fichier d'en-tête du blog (qui met en file d'attente le reste de WordPress) se charge wp-load.phpdirectement et déclenche WordPress lui-même. Voici la plupart 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' );

}

La différence entre vos deux méthodes est donc… ce qui est chargé.

La méthode 1 correspond exactement à ce que WordPress fait pour se charger (à l’exception de la désactivation des thèmes). Donc, si vous avez besoin de tout WordPress et que vous voulez déclencher tous les points d'ancrage / actions par défaut, choisissez cette route.

La méthode 2 n’est qu’un pas en avant. Il charge tout WordPress, mais n'appelle pas wp()et n'invoque pas le chargeur de modèles (utilisé par les thèmes). La méthode 2 sera un peu plus légère, mais devrait vous donner la même fonctionnalité.

EAMann
la source
3
Existe-t-il un diagramme ou quelque chose qui mappe tous ces fichiers? J'en ai vu un il y a longtemps, mais je ne le trouve pas.
ninja08
17

Méthode 2 de votre question:

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

wp-load.phpest l'accès à toutes les fonctions de WordPress, c'est tout. La première ligne indique à WordPress de ne pas charger les fichiers de thème; peut-être que les fichiers sont nécessaires pour vos besoins, puis supprimez la ligne.

bueltge
la source
1
que signifie même cette première ligne?
Sagive SEO
8
La première ligne indique à WordPress de ne pas charger toutes ses fonctionnalités de prise en charge de thèmes. Fondamentalement, chargez moins de fichiers.
EAMann
La première ligne est-elle nécessaire uniquement pour la première méthode?
mcont
4

wp-blog-header.php va attacher un statut d'en-tête, il retournera un code de statut http de 404

wp-load.php ne sera pas

Utile à noter lors de l'utilisation d'ajax car il vérifie le code de statut http

RayLau135
la source
2

Parfois, le chargement du fichier functions.php du thème peut vous causer des problèmes. Il cassait le HTML de mon autre page. Voilà donc ce que j'ai fait et résolu mon problème:

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

@ ninja08

Nous pouvons utiliser l'extension php xDebug pour analyser un script.

activez simplement ;xdebug.profiler_enable = 1dans votre php.inifichier en supprimant ;de la première ligne, puis après ce serveur apache redémarré et exécutez votre site wordpress ... maintenant un fichier créé dans le répertoire tmp de votre serveur xampp .. ouvrez ce fichier avec l' application WincachGrind .

maintenant vous pouvez voir une carte de votre script

WincacheGrind Simple Wordpress Analyse

Mostafa
la source
Vous auriez dû ajouter ceci dans le commentaire ci-dessous ninja08. c'est maintenant une réponse incorrecte.
Alhoseany
2
@ alhoseany oui..Je le vois maintenant ... mais je n'ai pas assez de réputation ... et ensuite je décide de le faire.
Mostafa