我正在构建自定义Wordpress主题,我希望在更改页面时保留DOM。它已经工作了,但我通过Wordpress服务内容的方式感觉非常难看。
我已经选择用javascript替换所有哈希链接的链接以获得优雅的后备:
此代码对菜单中的所有链接以及与类ajax的所有链接执行此操作:
var baseLength = $footer.data('url').split('/').length;
$menu.find('a').add('.ajax').each(function(){
$(this).attr('href', function(){
var url = $(this).attr('href').split('/');
url[baseLength - 1] = '#' + url[baseLength - 1];
return url.join('/');
});
});
通过使用baseLength我确保在wordpress路径后添加#(可以在server.com或server.com/deep/path/to/wp)。
现在我将ajax调用绑定到hashchange事件(用于保留后退按钮等)。
$(window).on('hashchange', function(){
//fade current page out
$boek.children().fadeOut(speed);
//get new page
$.get(location.href.replace(/#/,'') + '?ajax=true', function(data) {
$boek.html(data).children().hide().fadeIn(speed);
});
});
我现在请求URL中的页面(删除#后再次获得完整路径)。
我还将get var'ajax'附加到url,这样我只能通过Wordpress提供主要内容:
在我的header.php里面:
<?php if(!$_GET['ajax']) { ?>
<!doctype html>
...
<?php } ?>
(在Footer中也是如此)。这样我只获得了页眉/页脚/等之外的内容。将它构建成函数imo会更加清晰。 Wordpress是否可以做这样的事情?我似乎无法找到它。
我只对页面的AJAX内容感兴趣,我需要内容,我也想要页面的标题(我现在没有)。
答案 0 :(得分:0)
对于单个页面/帖子,只需通过ajax get请求URL,然后从返回的html中解析出您需要的内容。您仍然会返回页眉/页脚等,但您不会在页面视图中使用任何页眉/页脚。
如果你想要一个像存档一样的东西,或者只是获取页面的一部分,你需要在say php中创建一个单独的方法并通过ajax调用它,特别是通过wp_ajax; http://codex.wordpress.org/Plugin_API/Action_Reference/wp_ajax_(action)
在这种情况下我做的是抓取我的头文件中的任何显示变量,如帖子计数,类别,标签等,然后使用wp_localize_script将这些变量传递给ajax; http://codex.wordpress.org/Function_Reference/wp_localize_script
例如:
wp_localize_script( 'site', 'omanuAjax', array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'tag' => get_query_var('tag'),
'cat' => $useCat,
'single' => $wp_query->is_single,
'search' => $wp_query->is_search,
'searchquery' => $searchQuery
));
然后简单地将这些变量解析为post post中的POST vars,并返回一个json编码的post数据数组,然后您可以使用javascript显示它们。