web-dev-qa-db-ja.com

ワードプレスのフックを使用して投稿ステータスを公開から書き換えに変更する方法

そのIDを使用して、既に公開している投稿のステータスを下書きに変更したいです。

   add_action( 'save_post', 'change_post_status', 1 );
function change_post_status( $post_id ){
    $my_post = array(
        'ID' => 1,
        'post_status' => 'draft',
    );
    // unhook this function so it doesn't loop infinitely
    remove_action('save_post', 'change_post_status');
    if( $post_id == 1 ){
        wp_update_post( $my_post );
    }
    // re-hook this function
    add_action('save_post', 'change_post_status');
}

Id = 1の特定の投稿のステータスを下書きに変更したいのですが、動いていますが

最大関数ネストレベル '100'に達し、中止しました。

なぜそれがこのエラーを受けているのですか?

Postが更新または保存されたときに実行されていると思いますが、wp_initwp_adminadmin_initなどのフックのように、saveまたはupdateアクションとは無関係にこの関数を実行したいのであれば、可能です。

1
Ghanashyam Naik

あなたのfunctions.phpに:

add_action('publish_post', 'check_user_publish', 10, 2);

function check_user_publish ($post_id, $post) {

    if($post_id == 1){
    $query = array(
        'ID' => $post_id,
        'post_status' => 'draft',
    );
    wp_update_post( $query, true );

    }

}
1
jas

フックを削除するには、フックを追加したときと同じ優先度が必要です。優先度1でadd_actionを追加します。アクションを削除したい場合は、優先度1で削除する必要があります。 the codex を参照してください。

add_action( 'save_post', 'change_post_status', 1 );
function change_post_status( $post_id ){
  $my_post = array(
    'ID' => 1,
    'post_status' => 'draft',
  );
  // unhook this function, making sure to use the same priority, so it doesn't loop infinitely
  remove_action('save_post', 'change_post_status', 1 );
  if( $post_id == 1 ){
    wp_update_post( $my_post );
  }
  // re-hook this function with the initial priority
  add_action('save_post', 'change_post_status', 1 );
}
0
Nathan Johnson