【问题标题】:What is the best way to serve (page) content with ajax in Wordpress在 Wordpress 中使用 ajax 提供(页面)内容的最佳方式是什么
【发布时间】:2012-02-17 10:12:46
【问题描述】:

我正在构建一个自定义 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 } ?>

(和页脚中的相同内容)。这样我只能得到除页眉/页脚/等之外的内容。将它构建到函数 imo 中会更干净。 Wordpress 是否可以做这样的事情?好像没找到。

我只对页面的 AJAX 内容感兴趣,我需要该内容,并且我还想要页面的标题(我现在没有)。

【问题讨论】:

  • 你试过使用 $.load() 吗?有关详细信息,请参阅文档,但您可以执行 $.load('newpage#content') 之类的操作,它会加载内容但仅返回 id="content" 中的 html。

标签: php jquery ajax wordpress


【解决方案1】:

对于单个页面/帖子,只需通过 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 循环中将这些 var 解析为 POST var,并返回一个 json 编码的 post 数据数组,然后您可以使用 javascript 随意显示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 2015-09-10
    • 1970-01-01
    相关资源
    最近更新 更多