使用AJAX复制帖子加载更多WordPress

时间:2021-12-20 作者:s.kuznetsov

滚动时,我的网站上有ajax加载帖子。问题在于出现了重复的帖子。我不明白为什么会这样。只有一些帖子有重复。这是我的密码function.php:

function loadmore_get_posts(){
  $paged = !empty($_POST[\'paged\']) ? $_POST[\'paged\'] : 1;
  $paged++;

  $args = array(
    \'paged\' => $paged,
    \'posts_per_page\' => $_POST[\'posts_per_page\'],
    \'post_type\'      => \'post\',
    \'post_status\' => \'publish\',
    \'cat\' => $_POST[\'cats\']
    );

  query_posts($args);
 
  while( have_posts() ) : the_post();
    get_template_part( \'this is template\' );    
  endwhile;
  die;
}
add_action(\'wp_ajax_loadmore\', \'loadmore_get_posts\');
add_action(\'wp_ajax_nopriv_loadmore\', \'loadmore_get_posts\');
这是普通javascript中的ajax:

let ajaxurl = \'<?php echo admin_url(\'admin-ajax.php\') ?>\';
let section_posts = 1;
let postData = new FormData();

postData.append(\'action\', \'loadmore\');
postData.append(\'paged\', section_posts);
postData.append(\'posts_per_page\', 9);
postData.append(\'cats\',  <?php print json_encode(get_selected_cats())?>);

  const xhr = new XMLHttpRequest();
  xhr.open(\'POST\', ajaxurl);

  xhr.addEventListener(\'readystatechange\', function (data) {
  if (this.readyState === 4 && this.status === 200) {
     section_posts++;
     document.querySelector(\'.articlefeed_template\').innerHTML += data.target.responseText;
  } else {}
     xhr.send(postData);
  }
请告诉我我做错了什么?谢谢

1 个回复
SO网友:Bysander

首先,您的cat 参数expects an array 您正在向其传递一个json字符串。。。您需要对帖子数组进行json\\U解码以运行查询。

其次,您正在使用query_posts() 如果你看看codex page 内容如下:

注意:此函数将完全覆盖主查询,不供插件或主题使用。它修改主查询的过于简单的方法可能会有问题,应该尽可能避免。在大多数情况下,有更好、更高性能的选项来修改主查询,例如通过WP\\u查询中的“pre\\u get\\u posts”操作。

这不能在WordPress循环中使用。

因此,修复cat问题并使用get_posts()WP_Query 如果你还有问题,我会非常惊讶的。