Wp_postmeta表中的一个帖子有多个相同名称的帖子

时间:2018-08-09 作者:Amirition

我有一个隐藏的贴子元叫做_payment 对于我的帖子。当我查看wordpress的表格时,我注意到同一篇文章有几十个同名的帖子元!以下是数据库的图片:Multiple postmeta for one post

我不认为我编写了任何错误的代码导致了这种情况,我只是添加并更新了字段,但它应该用相同的meta_id, 并不是说用不同的meta_id 对于同一职位。

但我还是不知道,也许这是一个正常的wordpress事件?或者我错了。。。

以下是我用于修改此字段的代码:

function payment_meta($post_ID)
{
    $user_id = get_post_field( \'post_author\', $post_ID );
    $user_role = \'editor\'; 
    $post_type = \'portfolio\'; 
    if( get_post_type( $post_ID ) == $post_type ) {
        if ( get_post_meta($post_ID, \'_payment\', true) != \'1\' && !user_can( $user_id, $user_role )) {
            add_post_meta($post_ID, \'_payment\', \'0\');
        }
        else if ( get_post_meta($post_ID, \'_payment\', true) == \'\' && user_can( $user_id, $user_role )) {
            add_post_meta($post_ID, \'_payment\', \'1\');
        }
    }
}

add_action(\'wp_insert_post\', \'payment_meta\', 11, 1);
这段代码在a post过期时运行cron作业:

function unpublish_post($post_id)
{
    wp_update_post(array(
        \'ID\' => $post_id,
        \'post_status\' => \'pending\'
    ));

    update_post_meta($post_id, \'_payment\', \'0\');
}

add_action(\'expiration_date\', \'unpublish_post\', 11, 1);

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

wp_insert_post 无论何时更新帖子,而不仅仅是在第一次保存帖子时运行。所以你的payment_meta() 函数在每次保存帖子时都会运行,并且由于您使用add_post_meta() 在该函数中,每次保存帖子时都会创建一个新的元条目。

而不是使用add_post_meta() 坚持只使用update_post_meta() 如果尚未设置值,则仍将创建元,但如果该值已存在,则将更新现有值,而不是添加新值:

function payment_meta($post_ID)
{
    $user_id = get_post_field( \'post_author\', $post_ID );
    $user_role = \'editor\'; 
    $post_type = \'portfolio\'; 
    if( get_post_type( $post_ID ) == $post_type ) {
        if ( get_post_meta($post_ID, \'_payment\', true) != \'1\' && !user_can( $user_id, $user_role )) {
            update_post_meta($post_ID, \'_payment\', \'0\');
        }
        else if ( get_post_meta($post_ID, \'_payment\', true) == \'\' && user_can( $user_id, $user_role )) {
            update_post_meta($post_ID, \'_payment\', \'1\');
        }
    }
}

add_action(\'wp_insert_post\', \'payment_meta\', 11, 1);

结束

相关推荐

WPDB准备类似%-占位符?

这些是{xxx...} 的占位符% 在一个类似的声明中正常吗?如果是这样的话,他们什么时候会转换回%\'sSHELL wp> global $wpdb; wp> $q = \"%s\"; => string(2) \"%s\" wp> $pq = $wpdb->prepare($q, \'%hi%\'); => string(136) \"\'{6e039dc0b074a5ff6828a070d0c24708d132341f32d