その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_init
やwp_admin
やadmin_init
などのフックのように、saveまたはupdateアクションとは無関係にこの関数を実行したいのであれば、可能です。
あなたの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で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 );
}