0

我为我的帖子类型制作了一个模板,效果很好。但是,我希望对原件的某些部分进行类似的复制。

我有一个使用 ajax 调用jQuery $.get,我想定位第二个帖子类型模板以仅将 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_varsis 不存在,或者如果它存在(比它实际上是一个数组),则template密钥不存在。我所做的是检查整个$wp->query_vars['template']事情是否存在于 PHPisset()函数中:

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 回答