web-dev-qa-db-fra.com

La barre d'administration (barre d'outils) ne s'affiche pas dans le fichier personnalisé PHP qui charge WordPress

J'ai créé ma propre page PHP et je l'ai utilisée dans le cadre de mon site Web WordPress. J'utilise certaines fonctions de WordPress et je souhaite l'intégrer pleinement à WordPress.

Bien que j'ai chargé WordPress, la barre d'administration ne se charge pas en haut de la page. En fait, il ne montre même pas dans la structure HTML (J'ai essayé de chercher Ctrl+f pour wpadminbar , aucun résultat.)


Ce que j'ai fait -

1. Fichier WP inclus

require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');

2. Ajouté wp_head ();

Juste avant </head>

2. Ajouté get_header ();

Juste après <body>

3. Ajouté wp_footer ();

Juste avant </body>


Aussi essayé:

show_admin_bar (true);

get_footer ();

3
jmeinlschmidt

Si WordPress est chargé en dehors des fichiers WordPress principaux à l'aide d'un script PHP séparé comprenant wp-load.php, le fichier /template-loader.php ne sera pas chargé et l'action template_redirect ne sera donc pas déclenchée.

Ceci est important car template_redirect est le mode d’initialisation de la barre d’outils sur le front-end. En regardant default-filters.php, nous pouvons voir où la barre d’outils est initialisée:

...
// Admin Bar
// Don't remove. Wrong way to disable.
add_action( 'template_redirect', '_wp_admin_bar_init', 0 ); // <-- initialize Toolbar
add_action( 'admin_init', '_wp_admin_bar_init' ); // <-- initialize Toolbar
add_action( 'before_signup_header', '_wp_admin_bar_init' ); // <-- initialize Toolbar
add_action( 'activate_header', '_wp_admin_bar_init' ); // <-- initialize Toolbar
add_action( 'wp_footer', 'wp_admin_bar_render', 1000 );
add_action( 'in_admin_header', 'wp_admin_bar_render', 0 );
...

Une fonction peut être ajoutée via un plugin ou un thème pour déclencher l'initialisation de la barre d'outils:

function wpse240134_wp_admin_bar_init() {
    _wp_admin_bar_init();
}
add_action( 'init', 'wpse240134_wp_admin_bar_init' );

Notez que _wp_admin_bar_init() est considéré comme une fonction interne pour WordPress, utilisez-le à vos risques et périls.

Il est également intéressant de noter que si WordPress est chargé à partir d'un fichier externe PHP en incluant wp-blog-header.php et que la constante WP_USE_THEMES est définie sur false, le hook template_redirect ne sera à nouveau pas activé, donc la fonction wpse240134_wp_admin_bar_init() ci-dessus peut être utilisée. pour que la barre d'administration apparaisse lorsque WP_USE_THEMES est défini sur false:

<?php
/**
 * Demonstration  of loading WordPress from an external PHP file.
 * 
 */
define('WP_USE_THEMES', false);

// https://wordpress.stackexchange.com/questions/47049/what-is-the-correct-way-to-use-wordpress-functions-outside-wordpress-files
//require ('./wp-load.php');

require ('./wp-blog-header.php');

?><!DOCTYPE html>
<html class="no-js" <?php language_attributes(); ?>>
<head>
    <meta charset="<?php bloginfo( 'charset' ); ?>">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="profile" href="http://gmpg.org/xfn/11">
    <link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>">

    <?php wp_head(); ?>
</head>

<body id="body" <?php body_class(); ?>>
    <div id="page" class="site">
        <header id="header" class="site-header"></header>

        <div id="content" class="site-content">
            <h1>Test of loading WordPress from external PHP file</h1>
        </div>

        <footer id="footer" class="site-footer"></footer>
    </div>
<?php wp_footer(); ?>
</body>
</html>

Plus de détails sur le chargement de WP à l'aide d'un fichier PHP externe: Quelle est la bonne façon d'utiliser les fonctions wordpress en dehors des fichiers wordpress?

5
Dave Romsey

J'aime beaucoup la réponse de Dave Romseys, mais je pense que cela peut être un peu plus léger si vous voulez uniquement la barre d’administration (comme pour la question initiale).

Dans wp-blog-header.php, vous trouverez les éléments suivants:

            do_action( 'template_redirect' );

Si vous ajoutez cela à votre en-tête d'applications php personnalisé, vous obtiendrez la barre d'administration. Je recevais un modèle 404 en utilisant la méthode de Dave, donc cela pourrait mieux fonctionner pour vous.

0
raison