在替换index.php时未加载特定于AJAX的模板

时间:2015-06-01 作者:JetXS

在我之前的帖子之后(Full-Ajax Theme: parseJSON error while building a JSON object from a Wordpress custom template) 关于JSON(现已解决)的一些问题,我正在尝试在进行AJAX调用时加载一些替代模板。

如果您不想阅读上一篇文章,请使用简短版本:

在特定的.ajax-link, 通过标头发送请求,其中包含

$.ajax({
            url    : url,
            type   : \'POST\',
            headers: {
                \'X-Requested-With\':\'MDXMLHttpRequest\'
            }
        }).done(function() {
        //do stuff...
});
然后在我的插件中调用相关函数:

add_filter( \'template_include\', \'md_template_include\' );
function md_template_include( $template ) {
    if( isset( $_SERVER[\'HTTP_X_REQUESTED_WITH\'] ) && $_SERVER[\'HTTP_X_REQUESTED_WITH\']== \'MDXMLHttpRequest\' ):
        $pre = dirname( $template );
        $suf = basename( $template );
        $_template = $pre . \'/ajax-\' . $suf;
        if( !file_exists( $_template ) )
            $_template = $template;
        $template = $_template;
    endif;
    return $template;
}
这将添加ajax 作为模板名称的前缀,并加载它而不是常规名称。这个AJAX模板在内容上收缩,并使用JSON编写以进行数据操作。

由于我在插件文件夹中,从插件文件夹加载模板的解决方案如下(这是我找到的唯一解决方案,我不确定这是否是一种好的做法……)

function get_single_cpt_template($single_template) {
    global $post;

    if ($post->post_type == \'project\') {
        $single_template = dirname( __FILE__ ) . \'/templates/single-project.php\';
    }
    return $single_template;
}
或者对于特定于ajax的单篇文章模板:

function get_ajax_single_cpt_template($ajax_single_template) {
    global $post;

    if ($post->post_type == \'project\') {
        $ajax_single_template = dirname( __FILE__ ) . \'/templates/ajax-single-project.php\';
    }
    return $ajax_single_template;
}
所有这些都很好!!没有问题,非常顺利,JS证明(如果JS被禁用)和SEO友好。。。它允许所有的网站在没有AJAX的情况下仍然工作,并且基于历史API,没有历史API,AJAX被禁用,导航是一种很好的方式。

问题是我找不到有关索引的解决方案。php文件。无论如何,它都不想使用AJAX加载它。。。当我点击我的网站徽标/标题时,它应该加载ajax-index.php但它似乎不起作用。。

我做了与其他模板完全相同的过程。。。除以下情况外:

function get_ajax_index_template($ajax_index_template) {
        global $post;

        if (is_home_page()) {
            $ajax_index_template = dirname( __FILE__ ) . \'/templates/ajax-index.php\';
        }
        return $ajax_index_template;
    }
有什么想法吗?我想是我忘记了Wordpress中的模板层次结构吧?感谢您的时间和帮助。

UPDATE

它正在加载完整索引。php模板:如果我在Firebug中查看网络请求,会有一个“帖子”,但返回的是索引。php而非ajax索引。php。。。因此,JS崩溃是因为代码不是它应该是的。。。

1 个回复
SO网友:s_ha_dum

没有is_home_page() 核心功能。你要么is_home()is_front_page() 你必须小心这两个。They can be squirrelly.

我不知道您需要这两个函数中的哪一个,但整理一下应该可以解决问题,或者使用(is_home() || is_front_page()) 可能

结束

相关推荐

带路由和JSON API的AngularJS

我尝试将AngularJS与插件JSON API一起使用。我没有错误,但路由不起作用,页面不打印部分/?我把永久链接改为%postName%.我使用MAMP,我的链接是:http://localhost:8888/angular-wp. JSON内容起作用:http://localhost:8888/angular-wp/api/get_posts/routeScope有两个值为空。main.html<p>main</p> <a href=\'/demo\'>T