基于AJAX过滤器的AJAX分页

时间:2017-06-03 作者:AmintaCode

在这篇很棒的教程之后,我已经通过滚动实现了Ajax分页:https://www.billerickson.net/infinite-scroll-in-wordpress/.

现在,我已经添加了第二个Ajax调用来按类别过滤帖子,并且我还希望对过滤后的帖子进行分页。

所以我想在函数的filter_posts()中做这样的东西。php:

function filter_posts() {
   global $wp_query;
   $args[\'category_name\'] = $_POST[\'passed_slug_via_ajax\'];

   query_posts($args);

    [loop]
    wp_send_json_success( $data );

   };
我是这样想的query_posts, 当前查询global $wp_query; 已更改为包括$args[\'category_name\'] 过滤器,因此当我触发“more posts”函数时,它会对过滤后的结果分页:

// more posts" function
function more_posts() {
  global $wp_query;
  $args[\'paged\'] = $_POST[\'passed_page_via_ajax\'];

  query_posts($args);

   [loop]
   wp_send_json_success( $data );

};
不可能:老虎more_posts() 函数未应用筛选器。。。

所以我尝试手动更改global $wp_query; 以这种方式进入filter_posts() 功能:

function filter_posts() {
   global $wp_query;
   $args[\'category_name\'] = $_POST[\'passed_slug_via_ajax\'];

   query_posts($args);

    [loop]
    $wp_query->set( "category_name", $_POST[\'passed_slug_via_ajax\'] );
    wp_send_json_success( $data );

   };
但它不起作用。。。

也许我没有完全明白global $wp_query; 有效吗?

1 个回复
SO网友:AmintaCode

正如@Milo精辟地指出的,Wordpress中没有像全局查询对象这样的东西。

所以我通过JS解决了这个问题,如下所示:

 var isFiltered = false;
 var filters;

 $(load_more_button).click(function(e) {
     load_more_handler(e);
 });

 $(filters_form).submit(function(e) {
     filter_handler(e);
 });

 function filter_handler(e) {
    isFiltered = true;

    filters = $(this).serialize();
    var data = {
        action: \'ajax_filter\',
        query:  php_vars.query, // // query is got from wp_localize_script()
        filters: filters
    };
    $.post(php_vars.adminAjaxUrl, data, function(res) {
    [etc]

 };

 function load_more_handler(e) {

        var data = {
              action: \'ajax_load_more\',
              query:    php_vars.query, // query is got from wp_localize_script()
              page: page,
              isFiltered: isFiltered,
              filters: filters
        };
        $.post(php_vars.adminAjaxUrl, data, function(res) {
        [etc]
 };
和在函数中。php类似:

function ajax_load_more_posts() {

   $args = isset( $_POST[\'query\'] ) ? array_map( \'esc_attr\', $_POST[\'query\'] ) : array();

     if( isset($_POST[\'isFiltered\']) && ( $_POST[\'isFiltered\'] ) ) {

         $filters = $_POST[\'filters\'];
         $args = wp_parse_args(get_ajax_filters($filters), $args); // get_ajax_filters() is a custom utility function of mine to combine filters passed by Ajax and $args
        };

     [loop]
     wp_die();
 } ; 

add_action( \'wp_ajax_ajax_load_more\', \'ajax_load_more_posts\' );
add_action( \'wp_ajax_nopriv_ajax_load_more\', \'ajax_load_more_posts\' );

结束

相关推荐

如何从admin-ajax登录用户的会话数据?

我已经钩住了一个登录用户的ajax调用,现在我需要在接收调用(接收操作调用的代码)中捕获他的数据。如何可靠地获取用户ID?该代码位于我的插件定义文件中,该代码位于函数中(error\\u log(“we\'re in….kind”);)正在调用:add_action( \'wp_ajax_create_team\', \'create_team\' ); function create_team() { error_log(\"we\'re in....kind of\