将 ajax 加载更多按钮添加到我的首页

Posted

技术标签:

【中文标题】将 ajax 加载更多按钮添加到我的首页【英文标题】:Adding ajax load more button to my front page 【发布时间】:2018-01-05 15:24:53 【问题描述】:

我正在为我的网站使用预制的 wordpress 主题。但是,我想制作一个自定义的front-page.php,所以我做了,但现在的问题是我不知道如何向它添加ajax 加载更多按钮。我的主题已经使用了 ajax 加载更多按钮,所以我认为添加起来很简单。但我想我可能在错误的地方添加了代码,或者我的查询搞砸了?

谁能帮我添加这个加载更多按钮?

我的自定义front-page.php

<?php 

    get_header(); 
    get_template_part ('inc/carousel'); 

    $the_query = new WP_Query( [ 
        'posts_per_page' => 13, 
        'paged' => get_query_var('paged', 1) 
    ] ); 

    if ( $the_query->have_posts() )  ?> 
        <div id="ajax"> 
        <?php 
            $i = 0; 
            $j = 0; 
            while ( $the_query->have_posts() )  
                $the_query->the_post(); 

                if ( $i % 5 === 0 )  // Large post: on the first iteration and every 7th post after... ?> 
                    <div class="row"> 
                        <article <?php post_class( 'col-sm-12 col-md-12' ); ?>> 
                            <div class="large-front-container"> 
                                <?php the_post_thumbnail('full', array('class' => 'large-front-thumbnail')); ?> 
                            </div> 
                            <div class="front-page-date"><?php echo str_replace('mins', 'minutes', human_time_diff( get_the_time('U'), current_time('timestamp') ) . ' ago'); ?></div>
                            <h2><a class="front-page-post-title" href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> 
                            <p class="front-page-post-excerpt"><?php echo get_the_excerpt(); ?></p> 
                            <div class="front-page-post-info"> 
                                <a class="moretext" href="<?php the_permalink(); ?>">Read more</a> 
                                <?php get_template_part( 'front-shop-the-post' ); ?> 
                                <?php get_template_part( 'share-buttons' ); ?> 
                                <div class="front-comments"><?php comments_popup_link ('0', '1', '%', 'comment-count', 'none'); ?></div> 
                            </div> 
                        </article> 
                    </div> 
                <?php  else  // Small posts ?> 
                    <?php if($j % 2 === 0) echo '<div class="row">'; ?> 
                        <article <?php post_class( 'col-sm-6 col-md-6' ); ?>> 
                            <?php the_post_thumbnail('full', array('class' => 'medium-front-thumbnail')); ?> 
                            <div class="front-page-date"><?php echo human_time_diff( get_the_time('U'), current_time('timestamp') ) . ' ago'; ?></div>
                            <h2><a class="front-page-post-title" href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2> 
                            <p class="front-page-post-excerpt"><?php echo get_the_excerpt(); ?></p> 
                            <div class="front-page-post-info"> 
                                <a class="moretext" href="<?php the_permalink(); ?>">Read more</a>
                                <?php get_template_part( 'front-shop-the-post' ); ?>
                                <?php get_template_part( 'share-buttons' ); ?>
                                <div class="front-comments"><?php comments_popup_link ('0', '1', '%', 'comment-count', 'none'); ?></div> 
                            </div>
                        </article> 
                <?php $j++; if($j % 2 === 0) echo '</div>'; ?> 
        <?php 
         
        $i++; 
        ?> 
        </div> 
    <?php
     
    get_footer();

我在主题中找到的 post-nav.php 代码

<div class="row pagination-below"><div class="col-md-12">
    <?php 
    $pagination_type = novablog_getVariable('pagination_type') ? novablog_getVariable('pagination_type') : 'pagnum';
    if($pagination_type=='pagnum') :

        the_posts_pagination( array(
            'mid_size' => 3,
            'type' => 'list',
            'prev_text'          => theme_locals("prev"),
            'next_text'          => theme_locals("next")
        ) );
    endif;

    global $wp_query;
    if ( $wp_query->max_num_pages > 1 && $pagination_type=='paglink' ) : ?>
        <div class="paglink">
            <span class="pull-left"><?php previous_posts_link(theme_locals("newer")) ?></span>       
            <span class="pull-right"><?php next_posts_link(theme_locals("older")) ?></span>
        </div>
    <?php endif; ?>

    <?php
        if ( $wp_query->max_num_pages > 1 && $pagination_type=='loadmore' or $wp_query->max_num_pages > 1 && $pagination_type=='infinite' )  
            $all_num_pages = $wp_query -> max_num_pages;
            $next_page_url = novablog_next_page($all_num_pages);
    ?>
            <div class="ajax-pagination-container">
              <a href="<?php echo esc_url($next_page_url); ?>" id="ajax-load-more-posts-button"></a>
            </div>
    <?php  ?>
</div></div>

这是加载更多按钮在我的本地主机上的显示方式

我希望我的首页帖子布局的示例。一行 1 个帖子,一行 2 个帖子,每行 2 个帖子,一行 1 个帖子,依此类推。然后每 15 个帖子后会出现加载更多按钮。

当我检查加载更多按钮时,这就是 chrome 开发人员的样子

【问题讨论】:

如果你检查元素会发生什么?有什么错误吗? 我没有收到任何错误。 user6738171 考虑这个rudrastyh.com/wordpress/load-more-posts-ajax.html 你能发布你的 jquery 吗? @vel 这是主题文件的链接 - dropbox.com/s/yghxnsvnbv3nnrh/novablog.zip?dl=0 【参考方案1】:

将此添加到front-page.php

<?php

get_header();
get_template_part ('inc/carousel');

?>


<script>
    var now=2; // when click start in page 2

    jQuery(document).on('click', '#load_more_btn', function () 

        jQuery.ajax(
            type: "POST",
            url: "<?php echo get_site_url(); ?>/wp-admin/admin-ajax.php",
            data: 
                action: 'my_load_more_function', // the name of the function in functions.php
                paged: now, // set the page to get the ajax request
                posts_per_page: 15  //number of post to get (use 1 for testing)
            ,
            success: function (data) 

            if(data!=0)
                jQuery("#ajax").append(data);  // put the content into ajax container
                now=now+1; // add 1 to next page
            else
                jQuery("#load_more_btn").hide();
                jQuery("#content-load-more-btn").html("<h4>No more results</h4>");
            
            ,
            error: function (errorThrown) 
                alert(errorThrown); // only for debuggin
            
        );
    );
</script>

<section id="ajax"><!-- i have to change div to section, maybe a extra div declare -->
<?php

$the_query = new WP_Query( [
    'posts_per_page' => 15, // i use 1 for testing
    'orderby'=>'title', // add order for prevent duplicity
    'order'=>'ASC',
    'paged' => get_query_var('paged', 1) //page number 1 on load
] );

if ($the_query->have_posts()) 

        $i = 0;
        $j = 0;
        while ($the_query->have_posts()) 
            $the_query->the_post();

            if ( $i % 5 === 0 )  // Large post: on the first iteration and every 7th post after... ?>
                <div class="row">
                    <article <?php post_class( 'col-sm-12 col-md-12' ); ?>>
                        <div class="large-front-container">
                            <?php the_post_thumbnail('full', array('class' => 'large-front-thumbnail')); ?>
                        </div>
                        <div class="front-page-date"><?php echo str_replace('mins', 'minutes', human_time_diff( get_the_time('U'), current_time('timestamp') ) . ' ago'); ?></div>
                        <h2><a class="front-page-post-title" href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                        <p class="front-page-post-excerpt"><?php echo get_the_excerpt(); ?></p>
                        <div class="front-page-post-info">
                            <a class="moretext" href="<?php the_permalink(); ?>">Read more</a>
                            <?php get_template_part( 'front-shop-the-post' ); ?>
                            <?php get_template_part( 'share-buttons' ); ?>
                            <div class="front-comments"><?php comments_popup_link ('0', '1', '%', 'comment-count', 'none'); ?></div>
                        </div>
                    </article>
                </div>
            <?php  else  // Small posts ?>
                <?php if($j % 2 === 0) echo '<div class="row">'; ?>
                <article <?php post_class( 'col-sm-6 col-md-6' ); ?>>
                    <?php the_post_thumbnail('full', array('class' => 'medium-front-thumbnail')); ?>
                    <div class="front-page-date"><?php echo human_time_diff( get_the_time('U'), current_time('timestamp') ) . ' ago'; ?></div>
                    <h2><a class="front-page-post-title" href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                    <p class="front-page-post-excerpt"><?php echo get_the_excerpt(); ?></p>
                    <div class="front-page-post-info">
                        <a class="moretext" href="<?php the_permalink(); ?>">Read more</a>
                        <?php get_template_part( 'front-shop-the-post' ); ?>
                        <?php get_template_part( 'share-buttons' ); ?>
                        <div class="front-comments"><?php comments_popup_link ('0', '1', '%', 'comment-count', 'none'); ?></div>
                    </div>
                </article>
                <?php $j++; if($j % 2 === 0) echo '</div>';?>
                <?php
            
            $i++;
        ?>
    <?php
?>
</section>
<div id="content-load-more-btn">
<button id="load_more_btn">Load More</button> <!-- button out of ajax container for load content and button displayed at the bottom -->
</div>
<?php
get_footer();

然后在functions.php中添加如下代码:

add_action('wp_ajax_my_load_more_function', 'my_load_more_function');
add_action('wp_ajax_nopriv_my_load_more_function', 'my_load_more_function');

function my_load_more_function() 

    $query = new WP_Query( [
        'posts_per_page' => $_POST["posts_per_page"],
        'orderby'=>'title',
        'order'=>'ASC',
        'paged' => get_query_var('paged', $_POST["paged"])
    ] );


    if ($query->have_posts()) 

        $i = 0;
        $j = 0;

        while ($query->have_posts()) 
                $query->the_post();

            if ( $i % 5 === 0 )  // Large post: on the first iteration and every 7th post after... ?>
                <div class="row">
                    <article <?php post_class( 'col-sm-12 col-md-12' ); ?>>
                        <div class="large-front-container">
                            <?php the_post_thumbnail('full', array('class' => 'large-front-thumbnail')); ?>
                        </div>
                        <div class="front-page-date"><?php echo str_replace('mins', 'minutes', human_time_diff( get_the_time('U'), current_time('timestamp') ) . ' ago'); ?></div>
                        <h2><a class="front-page-post-title" href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                        <p class="front-page-post-excerpt"><?php echo get_the_excerpt(); ?></p>
                        <div class="front-page-post-info">
                            <a class="moretext" href="<?php the_permalink(); ?>">Read more</a>
                            <?php get_template_part( 'front-shop-the-post' ); ?>
                            <?php get_template_part( 'share-buttons' ); ?>
                            <div class="front-comments"><?php comments_popup_link ('0', '1', '%', 'comment-count', 'none'); ?></div>
                        </div>
                    </article>
                </div>
            <?php  else  // Small posts ?>
                <?php if($j % 2 === 0) echo '<div class="row">'; ?>
                <article <?php post_class( 'col-sm-6 col-md-6' ); ?>>
                    <?php the_post_thumbnail('full', array('class' => 'medium-front-thumbnail')); ?>
                    <div class="front-page-date"><?php echo human_time_diff( get_the_time('U'), current_time('timestamp') ) . ' ago'; ?></div>
                    <h2><a class="front-page-post-title" href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
                    <p class="front-page-post-excerpt"><?php echo get_the_excerpt(); ?></p>
                    <div class="front-page-post-info">
                        <a class="moretext" href="<?php the_permalink(); ?>">Read more</a>
                        <?php get_template_part( 'front-shop-the-post' ); ?>
                        <?php get_template_part( 'share-buttons' ); ?>
                        <div class="front-comments"><?php comments_popup_link ('0', '1', '%', 'comment-count', 'none'); ?></div>
                    </div>
                </article>
                <?php $j++; if($j % 2 === 0) echo '</div>'; ?>
                <?php
            
            $i++;

        
        wp_reset_query();
    else
        return 0;
    

    exit;

我认为您在 front-page.php 中的循环设置有问题需要解决,在 posts-per-page 参数中,显示 posts-per-page + 1 个结果。

如果这能解决您的问题,请告诉我。

【讨论】:

红色标记不是加载更多按钮。我在上面附上了一张图片,上面是我上传主题后加载更多按钮的样子。对于我的主页,我想使用引导程序,我希望它在一行中的 1 个帖子和每行 2 个帖子的 2 行之间交替,依此类推,然后在 15 个帖子后有一个加载更多按钮。 (我在我原来的问题中放了一个例子)。我试图通过对front-page.php 进行编码来构建它。而且我认为我编码正确(也许?),但我只是不知道如何将加载更多按钮从主题添加到来自 page.php 文件的自定义中。 第二个代码与所有代码看起来如何? 感谢您的帮助。此代码无法正常工作。它只加载两个帖子(每行 1 个)。然后每次按下加载更多按钮时,它只会加载一篇文章? 请阅读代码中的 cmets,因为我一直在尝试测试,所以只显示 1。 Posts_per_page 选项限制帖子的数量,分页显示该posts_per_page 所属的页面。您在 front-page.php 首次加载查询中有一个错误,但 ajax 调用工作正常。将所有 posts_per_page 更改为 13,现在您修复了显示的唯一一个响应。如果您仍需要帮助,请告诉我。 很抱歉我错过了。有没有办法修复这个错误?我在编码方面还是新手,所以我知道我可能搞砸了。我将 post_per_page 更改为 15(因为我想要每页 15 个帖子)。它工作得很好。在加载更多按钮之前显示了 15 个帖子。但是,每次按下加载更多按钮后,只会加载 1 个帖子。有没有办法每次按下按钮后加载 15 个帖子?再次感谢您的帮助,我真的很感激。【参考方案2】:

您可能应该只使用适当的插件来提供您遇到的功能。

这个https://en-ca.wordpress.org/plugins/easy-load-more/ 声称通过“最小”主题更改完全符合您的要求。

【讨论】:

以上是关于将 ajax 加载更多按钮添加到我的首页的主要内容,如果未能解决你的问题,请参考以下文章

如何在博客上添加“加载更多”按钮?

jQuery+php+Ajax文章列表点击加载更多功能

“加载更多评论”按钮 -> 如何指示数据库中没有更多条目?

获取按钮文本到一行

在 WordPress 中加载更多帖子 Ajax 按钮

如何在ListView末尾添加“更多”按钮以加载更多项目?