喜欢和不喜欢使用JavaScript的功能

时间:2020-03-27 作者:Prisma

我想添加Like & Dislike 我的自定义帖子类型中的功能,称为game.

我在我的帖子页脚中放置了喜欢和不喜欢的图标链接。

Desired Behaviour:

当用户单击like图标时,我想检查他是否已经投了赞成票,如果没有,则在post meta内创建或更新post-like-count meta键,用户meta也是如此。

Problem:

问题是,当用户单击like按钮时,我必须在JavaScript中处理它,但我不知道如何调用

set_post_meta($post->ID)

update_post_meta($post->ID)
来自JavaScript。

Loop:

<?php while ( $r->have_posts() ) : $r->the_post();?>
    <?php if (has_post_thumbnail()): ?>
        <?php the_post_thumbnail(\'small\'); ?>
    <?php endif;?>
    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    <div class="game-footer">
        <div class="like-dislike-btn-div">
            <i class="game-footer-like-btn fa fa-thumbs-o-up">0</i>
            <i class="game-footer-dislike-btn fa  fa-thumbs-o-down">0</i>
        </div>
    </div>
<?php  endwhile; ?>

2 个回复
最合适的回答,由SO网友:BlueSuiter 整理而成

我希望你做得很好。在这里,我分享了记录喜欢的代码。的代码single.php 具有用于对wp函数进行ajax调用的javascript代码。此wp函数具有存储相似表达式的代码,它将返回post上记录的相似表达式总数。

我只为登录用户策划了它。

将此代码放入functions.php

/* Ajax call */
add_action(\'wp_ajax_likeExpression\', \'likeExpression\');
function likeExpression() {
    if(is_user_logged_in()){
        $post_id = $_GET[\'post_id\'];
        $userId = get_current_user_id();
        $metaKey = \'_like_on_game_post_\';
        $userLikes = get_user_meta($userId, $metaKey, true);

        if(empty($userLikes)){
            update_user_meta($userId, $metaKey, wp_json_encode([$post_id]));
        }else{
            $userLikes = json_decode($userLikes);
            if(!in_array($post_id, $userLikes)){
                array_push($userLikes, $post_id);
                update_user_meta($userId, $metaKey, wp_json_encode($userLikes));
            }
        }

        $postLikeCount = get_post_meta($post_id, \'_like_count_on_post_\', true);
        update_post_meta($post_id, \'_like_count_on_post_\', ++$postLikeCount);
        exit($postLikeCount);
    }
}
将此放入single.php, (在页脚结束之前)

<?php if(is_user_logged_in()): ?>
    <script>
    jQuery(function($){
        $(\'.game-footer-like-btn\').on(\'click\', function(){
            $.ajax({
                url: \'<?php echo admin_url(\'admin-ajax.php?action=likeExpression&post_id=\'.get_the_ID()) ?>\',
                method: \'get\',
            }).done(function(res){
                console.log(res)
                //if its done
            });
        });
    });
    </script>
<?php endif; ?>
如有任何疑问,请随时联系。谢谢:)

SO网友:Christmas

我不明白你怎么能像只在javascript中那样计数。使用wp\\u ajax\\u ACTION Hook在函数中调用PHP函数。php或插件。

https://developer.wordpress.org/reference/files/wp-admin/admin-ajax.php/

add_action("wp_ajax_my_function", "my_function");

function my_function() {
 // Get parameters send by javascript xhr method

 // Do some stuff
}
为未登录的用户添加\\u操作(“wp\\u ajax\\u nopriv\\u my\\u函数”)。

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在