【问题标题】:Wordpress AJAX Hide Load More ButtonWordpress AJAX 隐藏加载更多按钮
【发布时间】:2019-05-21 01:39:19
【问题描述】:

我创建了一个自定义 WP-Query,可以通过 AJAX 在按钮单击时加载更多帖子。一切正常。现在,如果帖子少于或正好四个,我想隐藏按钮。如果所有帖子都加载了 AJAX,该按钮也应该消失。

如果有人可以帮助我,我将非常感激!提前谢谢你。

我的 PHP:

<div class="masonry category-single-magazin__inner entry-content">
    <?php $args = array('category_name' => 'magazin', 'posts_per_page' => '4', 'paged' => 1, 'orderby'=> 'date', 'order' => 'DESC'); $custom_query = new WP_Query( $args ); while($custom_query->have_posts()) : $custom_query->the_post(); ?>
    <article class="object <?php if ( get_field( 'beitragsfarbe' ) == 1 ) { echo 'object--blue'; } else { echo 'object--yellow'; } ?>" id="post-<?php the_ID(); ?>">
        <a href="<?php the_permalink(); ?>">
            <div class="lazy object__inner" data-src="<?php echo get_the_post_thumbnail_url(); ?>">
                <div class="overline">
                    <h6>
                        <?php $posttags = get_the_tags(); if ($posttags) { foreach($posttags as $tag) { echo $tag->name . ' '; }}?>
                    </h6>
                </div>
                <div class="object__inner__text content-no-margin">
                    <h4>
                        <?php the_title(); ?>
                    </h4>
                    <p class="textlink" href="<?php the_permalink(); ?>">Mehr erfahren</p>
                </div>
            </div>
        </a>
    </article>
    <?php endwhile ?>
</div>

<button class="load-more reload-masonry button-full button-full--yellow">
    <div class="button-full__inner">Mehr anzeigen</div>
</button>

<script type="text/javascript">
    jQuery(document).ready(function() {
        var ajaxurl = "<?php echo admin_url( 'admin-ajax.php' ); ?>";
        var page = 2;
        var pageNumber = <?php echo count_cat_post('magazin')/4; ?>;

        $('.load-more').on('click', function() {
            var data = {
                'action': 'load_posts_by_ajax',
                'page': page,
                'security': '<?php echo wp_create_nonce("load_more_posts"); ?>',
            };
            $.post(ajaxurl, data, function(response) {
                $('.masonry').append(response);
                page++;
            });
        });

        if (page == (parseInt(pageNumber) - 1)) {
            $('.load-more').hide();
        }
    });
</script>

我的函数.php:

function load_posts_by_ajax_callback() {
    check_ajax_referer('load_more_posts', 'security');
    $paged = $_POST['page'];
    $args = array(
        'category_name' => 'magazin',
        'posts_per_page' => '4',
        'paged' => $paged,
        'orderby'=> 'date',
        'order' => 'DESC'
    );
    $custom_query = new WP_Query( $args ); while ( $custom_query->have_posts() ) : $custom_query->the_post() ?>
<article class="object <?php if ( get_field( 'beitragsfarbe' ) == 1 ) { echo 'object--blue'; } else { echo 'object--yellow'; } ?>" id="post-<?php the_ID(); ?>">
            <a href="<?php the_permalink(); ?>">
                <div class="lazy-ajax object__inner" style="background-image:url('<?php echo get_the_post_thumbnail_url(); ?>')">
                    <div class="overline"><h6><?php $posttags = get_the_tags(); if ($posttags) { foreach($posttags as $tag) { echo $tag->name . ' '; }}?></h6></div>
                    <div class="object__inner__text content-no-margin">
                        <h4><?php the_title(); ?></h4>
                        <p class="textlink" href="<?php the_permalink(); ?>">Mehr erfahren</p>
                    </div>
                </div>
            </a>
        </article>
        <?php endwhile ?>
        <?php wp_die();}

【问题讨论】:

    标签: javascript php html ajax wordpress


    【解决方案1】:

    自己解决了。虽然感谢您指导我解决问题! 我为此创建了一个函数,使用 jQuery 计算可见帖子:

    function hideButton(){
        var poststotal = <?php echo count_cat_post('magazin'); ?>;
        var postsvisible = $('.masonry > article').length;
        if (poststotal == postsvisible) {
            $('.load-more').addClass('hidden');
        }
    };
    

    【讨论】:

      【解决方案2】:

      我不会编写完整的代码,但这是可能的解决方案。首先你需要知道帖子有多少页,你可以使用下面的Wordpress函数来获取帖子的总数

      <?php
           $count_posts = wp_count_posts(); 
           /*this function only works with post type is post .
               if you using for categories first you need to find how many 
              post are there in that categories.*/
       ?>
      

      如果您将总 count_post 除以每页的帖子数,您将得到总页数。

      现在您可以像这样在您的 javascript 中简单地检查它。

          var pageNumber = <?php echo (wp_count_posts()/4); ?>
      //make sure pageNumber is number not string can use javascript parseInt function
          jQuery(document).ready(function() {
          if(page==(parseInt(pageNumber)-1)){
      //send ajax request to get last page post but hide the button 
           }
      });
      

      我希望这会对你有所帮助。让我知道是否有任何不清楚的地方。

      【讨论】:

      • 感谢您迄今为止的帮助。解决了计算类别帖子的问题。但是隐藏按钮仍然不起作用......我已经在查询下编辑了我的脚本。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 2015-10-13
      • 2022-01-25
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多