AJAX在自定义POST类型分类中加载更多内容

时间:2018-05-30 作者:Leandro Andrade

我创建了一个新的CPT,名为Event and inside Event,分类法(或我不知道正确名称的术语)名为month,内部有12个月。

到目前为止,我成功地显示了整个月份,并通过ajax对其进行过滤,但在该月份内,每次只显示3篇文章,当我单击“加载更多ajax”按钮时,它会忽略分类月份。php并显示所有事件。它在所有视图中都可以正常工作,但在每个月内都不行。

请以一月选项卡为例:http://esma1.staging.wpengine.com/trade-fairs/

我的分类月。php

<div id="post-ajax" class="eventb">  
                   <div id="inside">  
                          <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
                              <section class="blocks">
                                   <div class="content_element">
                                       <a href="<?php echo get_permalink();?>"><h2><?php the_title(); ?></h2></a>
                                       <div class="content_text">
                                            <p><?php the_content(); ?></p>
                                            <p>Month: <?php the_terms( $post->ID, \'month\', \' \', \' / \' ); ?></p>
                                        </div>
                                    </div>
                                    <div class="single_image_element">
                                         <div class="imgwrap"><div class="memberimg"><?php the_post_thumbnail(); ?></div></div>
                                   </div>
                              </section>
                            <?php endwhile; endif; ?>           
                   </div>
                   <div class="clear"></div>
       <div class="post_nav">
          <div class="loadmore">Load More</div>
       </div>
脚本

var ajaxurl = "<?php echo admin_url( \'admin-ajax.php\' ); ?>";
            var page = 2;
           jQuery(function($) {
               $(\'body\').on(\'click\', \'.loadmore\', function() {
               var data = {
    \'action\': \'load_posts_by_ajax\',
    \'page\': page,
    \'security\': \'<?php echo wp_create_nonce("load_more_posts"); ?>\'
};

$.post(ajaxurl, data, function(response) {
    $(\'#inside\').append(response);
    page++;
});
               });
            });
功能

function load_posts_by_ajax_callback() {
   check_ajax_referer(\'load_more_posts\', \'security\');
   $paged = $_POST[\'page\'];
   $args = array(
\'post_type\' => \'event\',
\'post_status\' => \'publish\',
\'posts_per_page\' => \'3\',
\'paged\' => $paged,
     );
$my_posts = new WP_Query( $args );
if ( $my_posts->have_posts() ) :
    ?>
<article>
<?php while ( $my_posts->have_posts() ) : $my_posts->the_post() ?>
          <section class="blocks">

                       <div class="content_element">

                           <a href="<?php echo get_permalink();?>"><h2><?php the_title(); ?></h2></a>
                             <div class="content_text">
                       <p><?php the_content(); ?></p>
                               <p>Month: <?php the_terms( $post->ID, \'month\', \' \', \' / \' ); ?></p>
                                </div>
                        </div>

                            <div class="single_image_element">
                            <div class="imgwrap"><div class="memberimg"><?php the_post_thumbnail(); ?></div></div>
                           </div>

                    </section>
<?php endwhile ?>
</article>

1 个回复
最合适的回答,由SO网友:jdm2112 整理而成

假设函数与动作挂钩load_posts_by_ajax 是你的load_posts_by_ajax_callback() 代码(似乎是一个合理的假设),可以轻松修改查询参数。

您提到“仅显示3篇文章”,这就是代码的设计目的。如果希望显示10篇文章,请更新列出的posts\\u per\\u page参数。

\'posts_per_page\' => \'3\', 
问题的大部分是通过分类查询来解决的。这就是如何将查询结果限制为特定分类法(月份)中的特定术语(一月)。然而,我在猜测这个答案中的术语slug和分类名称。

假设有month 为注册的分类法event post类型,类似这样的查询应该可以:

function load_posts_by_ajax_callback() {
  check_ajax_referer(\'load_more_posts\', \'security\');
  $paged = $_POST[\'page\'];
  $args = array(
    \'post_type\' => \'event\',
    \'post_status\' => \'publish\',
    \'posts_per_page\' => \'10\', // assuming you want 10 posts returned
    \'tax_query\' => array( // a tax query is always an array of arrays
      array(
        \'taxonomy\' => \'month\', // assuming again; your taxonomy slug
        \'field\' => \'slug\',
        \'terms\' => \'january\', // you will want to assign this programmatically from the JS; not evident in the code provided
      )
    ),
    \'paged\' => $paged,
  );

 $my_posts = new WP_Query( $args );
 // remainder of function code is unchanged...
在这个回答中做出了几个假设。如果您可以在问题中添加相关代码,我可能可以更新。

编辑:我对分页方面没有100%的信心。您提供的代码使用分页和IIRC,这应该通过offset WP\\u查询的参数。也许是另外一个问题?让我们首先解决Ajax税务查询。

结束