帮助定制Love It插件(在Foreach中使用)

时间:2017-06-20 作者:joelybristol

我正在尝试调整一个由DanielPataki设计的love-it插件,它基本上是在查看单曲时使用Ajax更新post-meta。php-在单个帖子视图上应用功能时,一切都很好,但我希望在查看在foreach查询中列出多篇帖子的自定义页面模板时,也能实现同样的功能。

因此,在foreach中列出了5篇带有标题、爱数和增加爱数按钮的帖子,我只想针对选定的帖子,并在单击后更新单个帖子元

然而,在我列出的任何帖子上更新meta时,它只会将其应用于查询中的第一篇帖子


主要插件文件Ajax测试。php

<?php
add_action( \'wp_enqueue_scripts\', \'ajax_test_enqueue_scripts\' );
function ajax_test_enqueue_scripts() {
if( is_single() ) {
    wp_enqueue_style( \'love\', plugins_url( \'/love.css\', __FILE__ ) );
}

wp_enqueue_script( \'love\', plugins_url( \'/love.js\', __FILE__ ),    array(\'jquery\'), \'1.0\', true );

wp_localize_script( \'love\', \'postlove\', array(
    \'ajax_url\' => admin_url( \'admin-ajax.php\' )
));

}
add_action( \'wp_ajax_nopriv_post_love_add_love\', \'post_love_add_love\' );
add_action( \'wp_ajax_post_love_add_love\', \'post_love_add_love\' );

function post_love_add_love() {
$love = get_post_meta( $_REQUEST[\'post_id\'], \'post_love\', true );
$love++;
update_post_meta( $_REQUEST[\'post_id\'], \'post_love\', $love );
if ( defined( \'DOING_AJAX\' ) && DOING_AJAX ) { 
    echo $love;
    die();
}
else {
    wp_redirect( get_permalink( $_REQUEST[\'post_id\'] ) );
    exit();
}
}
Jquery插件文件-love。js公司

jQuery( document ).on( \'click\', \'.love-button\', function() {
var post_id = jQuery(this).data(\'id\');
jQuery.ajax({
    url : postlove.ajax_url,
    type : \'post\',
    data : {
        action : \'post_love_add_love\',
        post_id : post_id
    },
    success : function( response ) {
        jQuery(\'#love-count\').html( response );
    }
});

return false;
})

这是我的页面模板,其中列出了一段时间内有5篇帖子。

 <?php get_header(); ?> 
 <div id="blog">
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
  <div class="post"> 
       <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ? >   </a></h1>
       <div class="entry">  
            <?php the_content(); ?>


<ul>

<?php
global $post;
$events = get_posts(\'numberposts=5\');
foreach($events as $event) :
setup_postdata($post);
?>
<li><?php echo get_the_title($event->ID); ?></li>

<?php $love = get_post_meta( $event->ID, \'post_love\', true );
  $love = ( empty( $love ) ) ? 0 : $love;

  $love_text = \'<p class="love-received"><a class="love-button"   href="\' . admin_url( \'admin-ajax.php?action=post_love_add_love&post_id=\' . $event->ID ) . \'" data-id="\' . $event->ID . \'">give   love</a><span id="love-count">\' . $love . \'</span></p>\'; ?>

       <?php echo $content . $love_text; ?> 


<?php endforeach; ?>

</ul> 


      </div>
  </div>

<?php endwhile; ?>
<?php endif; ?>
</div>

1 个回复
SO网友:Milo

有几个问题-

setup_postdata 不适用于除$post, 所以那条线什么都没做。有关说明,请参见the Codex page for setup_postdata.

get_the_ID 不接受任何参数,但没关系,您已经输入了ID$event->ID, 只需更改的所有实例get_the_ID($event->ID)$event->ID.

结束