0

投稿タイプのテンプレートを作成しました。これはうまく機能します。ただし、オリジナルの特定の部分と同様の複製が必要です。

を使用して ajax 呼び出しを行っていますjQuery $.get。2 番目の投稿タイプ テンプレートをターゲットにして、現在のページにのみ html をプルしたいと考えています。

現時点では、ajax 呼び出しにより、スクリプトを含むページ全体が読み込まれます。Modernizr は、コンテンツ全体と同様に読み込まれます。

次のように、クエリ変数を使用してみました。

// http://scratch99.com/wordpress/development/how-to-change-post-template-via-url-parameter/

function sjc_add_query_vars($vars) {
    return array('template') + $vars;
}
add_filter('query_vars', 'sjc_add_query_vars');

function sjc_template($template) {
  global $wp;
  if ($wp->query_vars['template'] === 'test') {
    return dirname( __FILE__ ) . '/single-test.php';
  }
  else {
    return $template;
  }
}
add_filter('single_template', 'sjc_template');

コードはうまく機能しますが、このエラーが発生します

Notice: Undefined index: template in /wp-content/themes/custom--theme/functions.php on line 262

262 is: f ($wp->query_vars):

プロジェクトシングルが正常にロードされると、コードがelseステートメントにヒットしたときにこれが問題になると思います。

どんな助けでも素晴らしいでしょう。

4

1 に答える 1

1

あなたが$wp->query_vars存在しないか、存在する場合は(実際には配列よりも)templateキーが存在しないため、このエラーが発生しました。私がしたことは、PHP関数ですべて$wp->query_vars['template']が存在するかどうかを確認することです:isset()

From PHP documentation:
isset — Determine if a variable is set and is not NULL

私のコメントを読んでください。これは私からの最良の説明です。

function sjc_template($template) {
    //Now we have a $template variable with a value.

    //Get the $wp as a global variable
    global $wp;

    //This condition is check, is there an existing key in $wp->query_vars 
    //called template. If $wp->query_vars or $wp->query_vars['template'] not 
    //extists (the second can not exists if the first is not exists), 
    //then it will not check, what is the value is, instead of that just jump
    //to the second case to return $template;
    if (isset($wp->query_vars['template']) && $wp->query_vars['template'] === 'test') {
        //So at here, we have this: $wp->query_vars['template'] and the value of it is test
        return dirname(__FILE__) . '/single-test.php';
    } else {
        //In all other cases we return with the given parameter of function
        return $template;
    }
}
于 2014-11-13T13:46:57.163 に答える