web-dev-qa-db-ja.com

WordPressをロードするカスタムPHPファイルに管理バー(ツールバー)が表示されない

私は私自身のPHP pageを作成し、それを私のWordPress Webサイトの一部として使用しました。私はいくつかのWordPress機能を使用していて、WordPress自体と完全に統合させたいです。

WordPressをロードしましたが、管理バーがページ上部にロードされていません。 実際にはHTML構造でさえ表示されません(私は検索しようとしました Ctrl+f wpadminbarの場合、結果はありません。)


私がしたこと -

1. WPファイルを同梱

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

wp_head()を追加しました。

</head>の直前

2. get_header()を追加しました。

<body>の直後

3. wp_footer()を追加しました。

</body>の直前


また試してみました:

show_admin_bar(true);

get_footer();

3
jmeinlschmidt

wp-load.phpを含む別のPHPスクリプトを使用してWordPressがメインのWordPressファイルの外部からロードされた場合、/template-loader.phpファイルはロードされないため、template_redirectアクションはトリガーされません。

template_redirectがツールバーのフロントエンドでの初期化方法であるため、これは重要です。 default-filters.phpを見てみると、ツールバーが初期化されている場所がわかります。

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

ツールバーの初期化を引き起こすためにプラグインやテーマを介して関数を追加することができます。

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

_wp_admin_bar_init()はWordPressの内部関数と見なされているので、自己責任で使用してください。

WordPressがwp-blog-header.phpをインクルードして外部のPHPファイルからロードされていて、WP_USE_THEMES定数がfalseに設定されている場合、template_redirectフックは再び起動されないので、上記のwpse240134_wp_admin_bar_init()関数は使用できます。 WP_USE_THEMESfalseに設定されているときに管理バーを表示させるには:

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

外部のWPファイルを使用してPHPをロードする方法の詳細: ワードプレスファイルの外側でワードプレス機能を使用する正しい方法は何ですか?

5
Dave Romsey

私は本当にDave Romseysの回答が好きですが、あなたがもっぱら管理者バーを欲しがっているなら(元の質問のように)少しスリムになることができると思います。

Wp-blog-header.phpの中には、次のものがあります。

            do_action( 'template_redirect' );

あなたがあなたのカスタムphpアプリケーションヘッダにそれを追加するならば、あなたは管理バーを得るでしょう。 Daveの方法を使用したときに404テンプレートを取得していたので、これはあなたにとってよりうまくいくかもしれません。

0
raison