是否删除或编辑具有特定meta_key的后置meta?

时间:2018-04-18 作者:jockebq

我正在尝试创建一个函数,该函数要么用meta\\u键“bakground video”删除所有postmeta,要么编辑meta\\u值以从值中清空它。meta\\u键“background video”可能会有多个Posteta,我希望该函数能够在所有这些Posteta上运行。

我将在多站点上使用此功能,当用户将角色更改为“基本”时,这将触发并删除或编辑所有带有键的postmetas。我该如何做到这一点?搜索时可以找到的所有函数都要求我知道post\\u id,但我不知道。

这是我经过一番搜索后得出的结论,但我无法让它起作用!

    $args = array( \'fields\'          => \'ids\',
                   \'posts_per_page\'  => -1,
                   \'post_type\'       => \'attachment\',
                   \'meta_key\'        => \'background-video\'
                   );
    $all_ids = new WP_Query( $args );

    foreach( $all_ids as $ai ) {

       update_post_meta( $ai->post->ID, \'background-video\', \'\' );
    }
    wp_reset_postdata();
这被插入到一个函数中,当用户将角色更改为名为“basic”的角色时,该函数将触发。

编辑:与用户角色更改功能一起使用:

add_action( \'set_user_role\', function( $user_id, $role, $old_roles )
{
    if ( \'basic\' == $role ) {


            $args = array( \'fields\'          => \'ids\',
                           \'posts_per_page\'  => -1,
                           \'post_type\'       => \'attachment\',
                           \'meta_key\'        => \'background-video\'
                           );
            $all_ids = new WP_Query( $args );
            if ( $all_ids->have_posts() ) {
                while ( $all_ids->have_posts() ) {
                    $all_ids->the_post();
                    update_post_meta( $p->ID, \'background-video\', \'\' );
                }
            }
            wp_reset_postdata();


    }

}, 10, 3 );

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

未经测试,但这可能是您正在寻找的:

$args = array( \'fields\'          => \'ids\',
               \'posts_per_page\'  => -1,
               \'post_type\'       => \'attachment\',
               \'meta_key\'        => \'background-video\'
               );
$all_ids = new WP_Query( $args );
if ( $all_ids->have_posts() ) {
    while ( $all_ids->have_posts() ) {
        $all_ids->the_post();
        update_post_meta( get_the_ID(), \'background-video\', \'\' );
    }
}
wp_reset_postdata();
参考文献WP_Query » Usage » Standard Loop

SO网友:jockebq

最终解决了这个问题,我想问题是我使用了错误的post\\u类型。现在它工作得非常好!

非常感谢您的帮助!

add_action( \'set_user_role\', function( $user_id, $role, $old_roles )
{
    if ( \'basic\' == $role ) {
            $args = array( \'fields\'          => \'ids\',
                           \'posts_per_page\'  => -1,
                           \'post_type\'       => \'slide\',
                           \'meta_key\'        => \'background-video\'
                           );
            $all_ids = new WP_Query( $args );
            if ( $all_ids->have_posts() ) {
                while ( $all_ids->have_posts() ) {
                    $all_ids->the_post();
                    update_post_meta( get_the_ID(), \'background-video\', \'\' );
                }
            }
            wp_reset_postdata();
    }

}, 10, 3 );

结束