UPDATE_POST_META in循环更改所有值

时间:2018-06-04 作者:Jake Punton

我在前端有一个按钮,用于更新后端post meta的值,它嵌套在一个循环中。

但是,在提交时,它会更新所有帖子的值。我做错了什么?

function post_likes(){ 
global $post;
$post_id = $post->ID;
$like_value = get_post_meta($post_id, \'_like_value\', true);
?>
<div id="post-input-options">
    <div id="like_post">
        <form name="update_post" method="POST" action="">
            <button type="submit" name="add_like"><i class="fa fa-heart"></i></button>
        </form>
        <?php if( isset( $_POST [ \'add_like\' ] ) ){
            $update = $like_value + \'1\';
            update_post_meta($post_id, \'_like_value\', $update, $like_value);
        } ?>
    </div>
</div>
<div id="post-input-info">
    <?php if( $like_value[ \'_like_value\' ][ \'0\' ] != "" ){
        echo $like_value . \' likes\';
    } else {
        echo \'0 likes\';
    } ?>
</div>

1 个回复
SO网友:Jacob Peattie

查看此代码:

if( isset( $_POST [ \'add_like\' ] ) ){
    $update = $like_value + \'1\';
    update_post_meta($post_id, \'_like_value\', $update, $like_value);
}
因为您在循环中使用它,所以它在一个页面上以不同的值多次获得输出$post_id 每次。所以基本上你有这个:

if( isset( $_POST [ \'add_like\' ] ) ){
    update_post_meta(1, \'_like_value\', $update, $like_value);
}

if( isset( $_POST [ \'add_like\' ] ) ){
    update_post_meta(2, \'_like_value\', $update, $like_value);
}

if( isset( $_POST [ \'add_like\' ] ) ){
    update_post_meta(3, \'_like_value\', $update, $like_value);
}
因此,请考虑当$_POST [ \'add_like\' ]. 所有这些ifs将是true 因此,所有这些更新都将运行。

现在,您应该将处理更新和模板的逻辑分离开来。像这样把它们混在一起会带来麻烦。但是你的代码没有按你喜欢的方式工作的主要原因是你的表单没有提交你喜欢的帖子。

您需要添加具有正确帖子ID的隐藏输入,并在更新之前检查需要更新的帖子。

因此,请将输入添加到表单中:

<form name="update_post" method="POST" action="">
    <button type="submit" name="add_like"><i class="fa fa-heart"></i></button>
    <input name="post_id" type="hidden" value="<?php echo esc_attr( $post_id ); ?>">
</form>
然后在更新之前,检查提交的内容是否针对当前帖子:

<?php if( isset( $_POST[\'add_like\'] ) && isset( $_POST[\'post_id\'] ) && $_POST[\'post_id\'] === $post_id ) {
    $update = $like_value + \'1\';
    update_post_meta($post_id, \'_like_value\', $update, $like_value);
} ?>

结束

相关推荐

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

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