it-swarm-eu.dev

Admin Bar (Toolbar) nezobrazuje na vlastním souboru PHP, který načítá WordPress

Udělal jsem vlastní PHP stránk a použil jsem ho jako součást mé webové stránky WordPress. Používám některé funkce WordPressu a chci, aby byl plně integrován se samotným WordPressem.

I když jsem načetl WordPress, Admin Bar se nenačte v horní části stránky. Ve struktuře HTML ve skutečnosti ani neukazuje (Snažil jsem se hledat Ctrl+f pro wpadminbar , žádné výsledky.)


Co jsem udělal -

1. Zahrnutý soubor WP

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

2. Přidáno wp_head ();

Přímo před </head>

2. Přidán get_header ();

Hned po <body>

3. Přidáno wp_footer ();

Přímo před </body>


Vyzkoušeli také:

show_admin_bar (true);

get_footer ();

3
jmeinlschmidt

Pokud je WordPress načten mimo hlavní soubory WordPressu pomocí samostatného skriptu PHP, který obsahuje wp-load.php, pak soubor /template-loader.php nebude načten a akce template_redirect nebude spuštěna.

To je důležité, protože template_redirect je způsob, jakým je panel nástrojů inicializován na přední straně. Podíváme-li se na default-filters.php, uvidíme, kde je panel nástrojů inicializován:

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

Funkce může být přidána prostřednictvím pluginu nebo motivu pro spuštění inicializace Panelu nástrojů:

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

Všimněte si, že _wp_admin_bar_init() je považován za interní funkci pro WordPress, takže ji používejte na vlastní nebezpečí.

Je také třeba poznamenat, že pokud je WordPress načítán z externího souboru PHP zahrnutím wp-blog-header.php a konstanta WP_USE_THEMES je nastavena na false, háček template_redirect nebude znovu vyhozen, takže funkce wpse240134_wp_admin_bar_init() výše může být použita se zobrazí admin panel, když se WP_USE_THEMES nastaví na 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>

Více informací o nakládání WP pomocí externího souboru PHP: Jaký je správný způsob použití funkcí wordpress mimo soubory wordpress?

5
Dave Romsey

Opravdu se mi líbí Dave Romseys odpověď, ale myslím, že to může být trochu štíhlejší, pokud chcete pouze admin bar (podle původní otázky).

Uvnitř wp-blog-header.php najdete následující:

            do_action( 'template_redirect' );

Pokud přidáte, že do své vlastní záhlaví php aplikací dostanete admin bar. Dostal jsem 404 šablonu, když používám Daveovu metodu, takže to může fungovat lépe.

0
raison