この書き方は、何かを参考にされたのでしょうか?
このコードを実行した場合、$post_id は、取得できていますか?
functions.php を読み込んだ時点では、WordPress は初期化が完了していない状況なので、get_the_ID()
で、投稿IDを取得することはできません。(おそらく false になると思います。)
投稿等を検索するのに利用する wp オプジェクトが使用できるのは、 wp フック以降になります。
通常は、save_post#無限ループ回避 の例のように save_post
フックで呼び出される関数のなかで、投稿IDを利用してステータスを確認して、条件判断するほうが簡単だと思いますが...
どうしても、投稿ID をチェックしてから HOOK を登録したいということであれば、無駄が多いですが、全体を function で囲って、 wp
フックで、実行されるようにしてください。
質問のコードの中は確認していませんが、こんな感じで、外側を function で囲って、add_action('wp', '外側の関数名');
を追加してください
functuon add_hook_188290() {
$post_id = get_the_ID();
if ( get_post_status( $post_id ) == 'publish' ) {
function force_update_post() {
remove_action('save_post_custom_post', 'force_update_post');
$args = array('post_status' => 'pending');
wp_update_post($args);
add_action('save_post_custom_post', 'force_update_post');
}
add_action('save_post_custom_post', 'force_update_post');
}
}
add_action('wp', 'add_hook_188290');
追記
そのまま、save_post
フックで登録するならこんな感じでしょうか。(今回の例では、if 内の remove_action と add_action は、なくても問題なく動作すると思いますが、そのまま残しておきます。)
function force_update_post_188290( $post_id ) {
if ( get_post_status( $post_id ) == 'publish' ) {
remove_action( 'save_post', 'force_update_post_188290' );
$args = array( 'ID' => $post_id, 'post_status' => 'pending' );
wp_update_post( $args );
add_action( 'save_post', 'force_update_post_188290' );
}
}
add_action( 'save_post', 'force_update_post_188290' );
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/08 05:25