在我之前的帖子之后(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崩溃是因为代码不是它应该是的。。。