web-dev-qa-db-ja.com

Functions.phpでis_page()を使用してもまったく動作しない

Functions.phpのis_pageを使用して単一のページでカスタムスクリプトを実行しようとしてもまったく機能しません。私はload_gh_boardsと呼ばれる関数を持っていて、それはスクリプトをenququeするでしょう、特定のページでのみ(79):

function load_gh_boards() {
if( is_page(79) ){
    wp_register_script( 'gh-jobs-board', get_bloginfo( 'template_directory' ) . '/js/gh-jobs-board.js', array(), '1.0', true );
}}
add_action('wp_enqueue_script', 'load_gh_boards');

これは私のすべてのスタイルとスクリプトをロードしているテーマエンキュー関数の中にあります。

function theme_enqueue() {
if ( ! is_admin() ) {

    wp_register_style( 'main-style', get_bloginfo( 'template_directory' ) . '/css/style.css?' . time() );
    wp_enqueue_style( 'main-style' );
    wp_enqueue_script( 'jquery' );
    wp_register_script( 'main-vendor', get_bloginfo( 'template_directory' ) . '/js/vendor.js', array(), '1.0', true );
    ///etc...

    wp_enqueue_script( 'main-vendor' );
    wp_enqueue_script( 'main-script' );

    ///load_gh_boards
}

検索結果はありません。少しでも助けまたは洞察力があれば幸いです。

1
pjldesign

is_page(79)は、現在のメインクエリがページ、具体的には79ページであるかどうかを尋ねています

しかし、主な問い合わせはまだ行われていません

この関数は、メインループの内側、あるいは少なくともテンプレートの内側で呼び出す必要がありますが、initフックはこれには早すぎます。

代わりに、必ず本体クラスを使用して、すべてのページにスクリプトをロードしてください。次に、bodyタグにCSSクラスpage-id-79があるかどうかを確認します。

その他の注意

  • あなたはinitフックにエンキューしていません、あなたはwp_enqueue_scriptsフックにエンキューすることを意図しています
  • 早く帰る方が簡単でしょう。 if ( is_admin() ) return;
  • JQueryをエンキューせず、代わりに依存関係として追加して、WPがスクリプトを正しい順序で出力する方法を知るようにします。
  • main-styleとmain-vendorは非常に一般的な名前です。衝突が発生する可能性があります。 pji-main-vendor
  • theme_enqueueも非常に一般的な関数名です、あなたもその接頭辞を付けるべきです
  • wp_enqueue_scriptを使用して、登録とエンキューを同時に行うことができます。その関数にすべてを渡すのであれば、wp_register_scriptを呼び出す必要はありません。
  • あなたのコードをインデントしなさい、最近のコード編集者は無料で、ゼロの努力のためにこれを自動的にするでしょう。 SublimeまたはAtomはこれをあなたに代わって実行するフリーソフトウェアの例です、本当に言い訳はありません
2
Tom J Nowell

これは今私にとって絶対に働いています:

add_action('get_header', function() {
    if(is_page('566')) {

        function sp_enqueue_script() {
            wp_enqueue_script(
                'sp-custom-script',
                get_stylesheet_directory_uri() . '/assets/js/sp_script.js',
                array( 'jquery' ), '1.0', true
            );
        }

        add_action( 'wp_enqueue_scripts', 'sp_enqueue_script' );
    }
});

is_page はメインクエリがまだロードされていないため、functions.phpで機能しません。そのため、ヘッダーがロードされるのを待ちます。

wp_enqueue_scriptフックの最後のブール値は、スクリプトがフッターでキューに登録されるため、より高速に実行されます。

1
Steph
function theme_enqueue() {
if ( ! is_admin() ) {
wp_register_script( 'main-script', get_bloginfo( 'template_directory' ) . '/js/script.js', array(), '1.0', true );
wp_register_script( 'gh-jobs-board', get_bloginfo( 'template_directory' ) . '/js/gh-jobs-board.js', array(), '1.0', true );
///etc...
wp_enqueue_script( 'main-vendor' );
wp_enqueue_script( 'main-script' );
///etc...

if( is_page(79) ) {
    wp_enqueue_script( 'gh-jobs-board' );
}
}
}
add_action( 'wp_enqueue_scripts', 'theme_enqueue' );
1
pjldesign

まず第一に、あなたのコードにはミスタイプがあります。 wp_enqueue_scriptsではなくwp_enqueue_scriptです。それが問題かもしれません。

また、wp_enqueue_scriptsを別のwp_enqueue_scripts内で使用しないでください。以下のように、theme_enqueue()関数に条件を追加するだけです。

function theme_enqueue() {
if ( ! is_admin() ) {

    wp_register_style( 'main-style', get_bloginfo( 'template_directory' ) . '/css/style.css?' . time() );
    wp_enqueue_style( 'main-style' );
    wp_enqueue_script( 'jquery' );
    wp_register_script( 'main-vendor', get_bloginfo( 'template_directory' ) . '/js/vendor.js', array(), '1.0', true );
    ///etc...

    wp_enqueue_script( 'main-vendor' );
    wp_enqueue_script( 'main-script' );

    if( is_page(79) ){
        wp_register_script( 'gh-jobs-board', get_bloginfo( 'template_directory' ) . '/js/gh-jobs-board.js', array(), '1.0', true );
    }
}
add_action('wp_enqueue_scripts', 'theme_enqueue');

theme_enqueue()関数はwp_enqueue_scripts自体にフックされていると思います。

0
Jack Johansson

あなたはスクリプトを登録しますが、それをエンキューしません。 wp_enqueue_script( 'gh-jobs-board')を追加してください。あなたの条件付き関数に。

0
kuchenundkakao