it-swarm.com.de

Die Admin-Leiste (Symbolleiste) wird in der benutzerdefinierten PHP -Datei, die WordPress lädt, nicht angezeigt

Ich habe meine eigene PHP Seite erstellt und als Teil meiner WordPress-Website verwendet. Ich verwende einige WordPress-Funktionen und möchte sie vollständig in WordPress selbst integrieren.

Obwohl ich WordPress geladen habe, wird die Admin-Leiste nicht oben auf der Seite geladen. Es wird nicht einmal in der HTML-Struktur angezeigt (Ich habe versucht zu suchen Ctrl+f für wpadminbar , keine Ergebnisse.)


Was ich getan habe -

1. Enthaltene WP Datei

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

2. wp_head () hinzugefügt;

Kurz vor </head>

2. get_header () hinzugefügt;

Direkt nach <body>

3. wp_footer () hinzugefügt;

Kurz vor </body>


Auch versucht:

show_admin_bar (true);

get_footer ();

3
jmeinlschmidt

Wenn WordPress von außerhalb der Haupt-WordPress-Dateien mit einem separaten PHP Skript geladen wird, das wp-load.php enthält, wird die /template-loader.php-Datei nicht geladen und daher die template_redirect-Aktion nicht ausgelöst.

Dies ist wichtig, da mit template_redirect die Symbolleiste im Frontend initialisiert wird. Wenn Sie sich default-filters.php ansehen, können Sie sehen, wo die Symbolleiste initialisiert ist:

...
// 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 );
...

Eine Funktion kann per Plugin oder Theme hinzugefügt werden, um die Initialisierung der Toolbar auszulösen:

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

Beachten Sie, dass _wp_admin_bar_init() eine interne Funktion für WordPress ist. Verwenden Sie sie daher auf eigenes Risiko.

Es ist auch erwähnenswert, dass, wenn WordPress aus einer externen PHP -Datei geladen wird, indem wp-blog-header.php eingeschlossen wird und die WP_USE_THEMES-Konstante auf false gesetzt wird, der template_redirect -Hook erneut nicht ausgelöst wird, sodass die oben beschriebene wpse240134_wp_admin_bar_init()-Funktion verwendet werden kann Damit die Admin-Leiste angezeigt wird, wenn WP_USE_THEMES auf false gesetzt ist:

<?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>

Weitere Informationen zum Laden von WP mithilfe einer externen PHP -Datei: Wie werden WordPress-Funktionen außerhalb von WordPress-Dateien korrekt verwendet?

5
Dave Romsey

Ich mag Dave Romseys Antwort wirklich, aber ich denke, es kann etwas schlanker sein, wenn Sie nur die Admin-Leiste (gemäß der ursprünglichen Frage) möchten.

In wp-blog-header.php finden Sie Folgendes:

            do_action( 'template_redirect' );

Wenn Sie das zu Ihrem benutzerdefinierten PHP-Anwendungs-Header hinzufügen, erhalten Sie die Admin-Leiste. Ich habe eine 404-Vorlage erhalten, als ich Daves Methode verwendet habe, daher funktioniert dies möglicherweise besser für Sie.

0
raison