web-dev-qa-db-ja.com

is_page()関数が機能しない

私はこれらのカスタムCSSとJS(カスタムプラグイン内に記述)を特定のページにのみ追加しようとしています。

これは私のコードです

_<?php   

function randomAlphaNumeric($length) {
    $pool = array_merge(range(0,9), range('a', 'z'),range('A', 'Z'));
    $key='';
    for($i=0; $i < $length; $i++) {
        $key .= $pool[mt_Rand(0, count($pool) - 1)];
    }
    return $key;
}



add_action('init', 'register_script');
function register_script(){
    if(is_page('page_title')) {
        wp_register_script( 'custom_js', plugins_url('/js/custom-js.js', __FILE__).'?random='.randomAlphaNumeric(5), array('jquery'));
        wp_register_style( 'new_style', plugins_url('/css/new-style.css', __FILE__).'?random='.randomAlphaNumeric(5), false, 'all');
    }
}


// use the registered jquery and style above
add_action('wp_enqueue_scripts', 'enqueue_style');
function enqueue_style(){
    if(is_page('page_title')) {
        wp_enqueue_script('custom_js');
        wp_enqueue_style( 'new_style' );
    } 
}
_

しかしis_page()はまったく機能しないようです。[〜#〜] id [〜#〜][〜# 〜]スラッグ[〜#〜]、しかし成功しません

[〜#〜] update [〜#〜]ページタイトルを確認するための条件を置き換えましたが、まだ機能しません

_add_action('init', 'register_script');
function register_script(){
    global $post;
    if($post->post_title == 'page_title') {
        wp_register_script( 'custom_js', plugins_url('/js/custom-js.js', __FILE__).'?random='.randomAlphaNumeric(5), array('jquery'));
        wp_register_style( 'new_style', plugins_url('/css/new-style.css', __FILE__).'?random='.randomAlphaNumeric(5), false, 'all');
    }
}


// use the registered jquery and style above
add_action('wp_enqueue_scripts', 'enqueue_style');
function enqueue_style(){
    global $post;
    if($post->post_title == 'page_title') {
        wp_enqueue_script('custom_js');
        wp_enqueue_style( 'new_style' );
    } 
}
_
1
iKamy

initフックが早すぎる— WordPressは、照会されたオブジェクト(投稿、カテゴリなど)をまだ識別していません)なので、is_page()はそこに働きます:

_add_action('init', 'register_script');
_

したがって、is_page()is_single()などの条件付きタグ/関数が機能する(つまり、適切な結果が返される)には、wpまたはそれ以降のフックを使用する必要があります。

_add_action('wp', 'whatever_function');
_

ただし、スクリプトとスタイルを登録/エンキューするには、常に_wp_enqueue_scripts_フックを使用する必要があります。あなたはこれを使用します(そして上記ではありません):

_add_action('wp_enqueue_scripts', 'register_script');
_

PS:@ huraji への謝辞

4
Sally CJ
  1. パラメータを_page_title_から_page-slug_またはidに変更してみてください。 https://developer.wordpress.org/reference/functions/is_page/#parameters
  2. キューに入れる前に、同じenqueue_style()関数にスクリプトを登録してみましょう。

Update:ここでの私のスコープは、is_page()の異なるパラメーターを試し、同じ関数を使用することを奨励することでしたenqueue_style() _wp_enqueue_scripts_にフックされています。これは、スクリプトを登録/エンキューする唯一の推奨方法です。

1
huraji