AJAX通过短码加载更多CPT

时间:2016-05-12 作者:Александр

我对我的CustomPostType的ajax加载更多有问题。我想我弄错了,但不知道在哪里。如果可以编辑我的代码,我会很高兴的。

UPDATE

我创建了divcool 要粘贴它,请加载更多帖子。单击“加载更多”后,div cool中有0。这是什么意思?

In functions.php

    add_shortcode( \'list-posts-basic\', \'rmcc_post_listing_shortcode1\' );

function rmcc_post_listing_shortcode1( $atts ) {
    ob_start();
    $query = new WP_Query( array(
        \'post_type\' => \'imggal\',
        \'order\' => \'ASC\',
        \'orderby\' => \'title\',
        \'posts_per_page\' => 1,
    ) );


    if ( $query->have_posts() ) { ?>
        <ul id="ajaxx" class="clothes-listing">
            <?php while ( $query->have_posts() ) : $query->the_post(); ?>
            <li id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            </li>
            <?php endwhile;
            wp_reset_postdata(); ?>
            <div id="cool"></div>
            <a id="more_posts" href="#">Load More</a>
        </ul>
    <?php $myvariable = ob_get_clean();
    return $myvariable;
    }
}

add_action(\'wp_ajax_nopriv_rmcc_post_listing_shortcode1\', \'rmcc_post_listing_shortcode1\'); 
add_action(\'wp_ajax_rmcc_post_listing_shortcode1\', \'rmcc_post_listing_shortcode1\');

AJAX

   (function($) {  
$(document).ready(function($) {   
    $("#more_posts").on("click",function(e){ // When btn is pressed.
    e.preventDefault();


        $.ajax({  
        url: ajax_object.ajax_url,  
        data: {  
              \'action\' : \'rmcc_post_listing_shortcode1\'  
          },   
        success: function (data) {  
              if (data.length > 0) {  
                $(\'#cool\').html(data);  
              }
          },
      });

   });

   });    
})(jQuery);
请帮帮我!

3 个回复
SO网友:TheDeadMedic

这将(*应该)解决您的第一个问题:

function rmcc_post_listing_shortcode1( $atts ) {
    // No need for output buffering - AJAX handlers should ECHO their response
    // ob_start();

    // ..

    // So long, farewell
    // $myvariable = ob_get_clean();
    // return $myvariable;

    // Now terminate
    exit;
}
第二个问题是,您没有在AJAX处理程序中实现任何类型的分页/增量-“加载更多”将始终加载相同的帖子。

SO网友:Cai

第一个问题是AJAX函数functions.php 应该echo 其结果,而不是return. 您还需要致电wp_die() 在最后。

我不完全确定你想做什么,但看起来你的一半循环可能不应该在那里。当前您正在输出整个#ajaxx 每次单击时在其内部列出#load-more. 这至少会给您带来重复ID的问题。

我怀疑你想要的是:

whatever-page-template.php

// Rest of page template and beginning of loop

<ul id="ajaxx" class="clothes-listing">

    <?php while ( $query->have_posts() ) : $query->the_post(); ?>
        <li id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        </li>
    <?php endwhile;
    wp_reset_postdata(); ?>

    <div id="cool"></div>
    <a id="more_posts" href="#">Load More</a>
</ul>

// etc...

functions.php

function rmcc_post_listing_shortcode1( $atts )
{
    ob_start();

    $query = new WP_Query( array(
        \'post_type\' => \'imggal\',
        \'order\' => \'ASC\',
        \'orderby\' => \'title\',
        \'posts_per_page\' => 1,
    ));

    if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); ?>
        <li id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        </li>
    <?php endwhile; endif;
    wp_reset_postdata();

    $myvariable = ob_get_clean();
    echo $myvariable;

    wp_die();
}
您也总是加载相同的帖子,因此需要实现某种分页,但我会先修复基本的AJAX调用!

您可以在Wordpress中阅读有关AJAX的更多信息(包括调试!)在这里:

SO网友:Darren Cooney

您应该考虑尝试一下Ajax加载更多WordPress插件。https://wordpress.org/plugins/ajax-load-more/