我有一个隐藏的贴子元叫做_payment
对于我的帖子。当我查看wordpress的表格时,我注意到同一篇文章有几十个同名的帖子元!以下是数据库的图片:
我不认为我编写了任何错误的代码导致了这种情况,我只是添加并更新了字段,但它应该用相同的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);
最合适的回答,由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);