web-dev-qa-db-ja.com

ユーザーが投稿を更新したときに投稿ステータスを変更する

特定の種類のユーザーが投稿を更新しようとしたときに、投稿のステータスを「公開」から「ドラフト」に変更する効率的な方法はありますか。私はこれらの線に沿って何かを試した

function change_post_status($post_id)
{
  if(current_user_can('rolename'))
  {
    $current_post = get_post( $post_id, 'ARRAY_A' );
    $current_post['post_status'] = 'draft';
    wp_update_post($current_post);
  }
}

add_action('pre_post_update','change_post_status'); 

コードは私には良さそうに見えますが、何らかの理由で正しく機能しないため、無限ループが発生すると考えられます(SQLサーバーを強制的に再起動します)。

1
tyler

それで、私はwp_insert_post_dataフィルタを使用することになって、テストの後に、それはきちんと働いているようである以下を思いつきました。

add_filter('wp_insert_post_data', 'change_post_status', '99');

function change_post_status($data)
{
    if( (current_user_can('role')) && ($data['post_type'] == 'custom_post_type') )
    {
        if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
        //then set the fields you want to update
        $data['post_status'] = 'draft';     
    }
    return $data;
}
0
tyler

"pre_post_update"の代わりに "wp_insert_post_data"を使用しましたか?

0
Daniel

あなたのロジックは役割に基づいているので、それに publish_posts の能力を与えないでください。ネイティブ 投稿者 の役割のしくみ。

0
Rarst