在类别和WordPress循环上使用AJAX

时间:2011-12-08 作者:LND

我想要我的索引。php是一个简单的页面,顶部有一个类别名称的水平列表。但是,我希望在每次单击一个类别后,立即显示每个类别中的一组帖子,而不是让页面在该循环中重新加载帖子列表。这在Wordpress中可能吗?

1 个回复
SO网友:Chris_O

是的,这在WordPress中是可能的,但我不会使用索引。php只是一个定制的首页。php模板然后创建一个名为home的页面,并将其设置为options general中的首页。

对于您的类别菜单:

<?php

$categories = get_categories(); ?>

<ul id="category-menu">
    <?php foreach ( $categories as $cat ) { ?>
    <li id="cat-<?php echo $cat->term_id; ?>"><a class="<?php echo $cat->slug; ?> ajax" onclick="cat_ajax_get(\'<?php echo $cat->term_id; ?>\');" href="#"><?php echo $cat->name; ?></a></li>

    <?php } ?>
</ul>
其中,单击类别时调用jQuery ajax函数,并以函数的名称将cat ID传递给jQuery。

html div占位符,您的帖子将通过ajax加载:

<div id="loading-animation" style="display: none;"><img src="<?php echo admin_url ( \'images/loading-publish.gif\' ); ?>"/></div>
<div id="category-post-content"></div>
通过菜单项中的onclick处理程序调用jQuery函数:

<script>
function cat_ajax_get(catID) {
    jQuery("a.ajax").removeClass("current");
    jQuery("a.ajax").addClass("current"); //adds class current to the category menu item being displayed so you can style it with css
    jQuery("#loading-animation").show();
    var ajaxurl = \'<?php echo admin_url( \'admin-ajax.php\' ); //must echo it ?>\';
    jQuery.ajax({
        type: \'POST\',
        url: ajaxurl,
        data: {"action": "load-filter", cat: catID },
        success: function(response) {
            jQuery("#category-post-content").html(response);
            jQuery("#loading-animation").hide();
            return false;
        }
    });
}
</script>
WordPress PHP函数返回所选类别中的帖子。

add_action( \'wp_ajax_nopriv_load-filter\', \'prefix_load_cat_posts\' );
add_action( \'wp_ajax_load-filter\', \'prefix_load_cat_posts\' );
function prefix_load_cat_posts () {
    $cat_id = $_POST[ \'cat\' ];
         $args = array (
        \'cat\' => $cat_id,
        \'posts_per_page\' => 10,
        \'order\' => \'DESC\'

    );

    $posts = get_posts( $args );

    ob_start ();

    foreach ( $posts as $post ) {
    setup_postdata( $post ); ?>

    <div id="post-<?php echo $post->ID; ?> <?php post_class(); ?>">
        <h1 class="posttitle"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>

        <div id="post-content">
        <?php the_excerpt(); ?>
        </div>

   </div>

   <?php } wp_reset_postdata();

   $response = ob_get_contents();
   ob_end_clean();

   echo $response;
   die(1);
   }
我们正在使用输出缓冲,这有助于防止WordPress Ajax有时会出现的功能故障。

结束

相关推荐

WordPress AJAX问题需要WordPress专家吗?

我想使用wordpress ajax调用一个函数,我也为此编写了一段代码。但是,当我调用ajax时,它总是retrun-1。我不知道有谁能帮我解决什么问题。这是我的密码作用php function my_AJAX_processing_function(){ //echo $getLetter = $_GET[\'post_id\']; print_r($_GET); exit; global $wpdb; global $pos