在Wordpress中使用ajax提供(页面)内容的最佳方式是什么?

时间:2012-02-17 10:12:46

标签: php jquery ajax wordpress

我正在构建自定义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内容感兴趣,我需要内容,我也想要页面的标题(我现在没有)。

1 个答案:

答案 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显示它们。