質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2277閲覧

【WordPress】公開済みの記事を更新した際にレビュー待ちのステータスに変更

Samurai_Tiger

総合スコア41

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/05/08 02:32

前提・実現したいこと

WordPressでサイトを構築しており、ライターが記事を更新した際に、
記事のステータスを「公開」から「レビュー待ち」に変更したいと考えています。

発生している問題

以下のようなコードをfunctions.phpに記載したのですが、
前段if文の記事が公開済みかどうかを判定する部分が機能しておらず、
force_update_post()が動作しない状況となっております。

初歩的な質問となり恐縮ですが、どうぞよろしくお願いいたします。

該当のソースコード

php

1 $post_id = get_the_ID(); 2 if ( get_post_status( $post_id ) == 'publish' ) { 3 function force_update_post() { 4 remove_action('save_post_custom_post', 'force_update_post'); 5 $args = array('post_status' => 'pending'); 6 wp_update_post($args); 7 add_action('save_post_custom_post', 'force_update_post'); 8 } 9 add_action('save_post_custom_post', 'force_update_post'); 10 }

参考ページ

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

この書き方は、何かを参考にされたのでしょうか?

このコードを実行した場合、$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:04

編集2019/05/08 05:22
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Samurai_Tiger

2019/05/08 05:25

大変ご丁寧なご回答ありがとうございます。 追記にて記載いただいたコードを少し編集することで、期待通りに動作いたしました。
guest

0

function force_update_post()の定義の中で
自分自身の呼び出しをremove_actionとかadd_actionするのってダメっぽい気がするし、
特定条件でしか関数が存在しないのもヘン。

add_action()する関数は、
常に見える(?)グローバルな関数であるべきなので、
function force_update_post() の中の処理で
改めてフラグなど条件を確認するようにするべきかと。

投稿2019/05/08 04:32

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2019/05/08 05:08

> 自分自身の呼び出しをremove_actionとかadd_actionするのってダメっぽい気がするし、 WordPress で、save_post フック実行時の無限ループ回避策の一つです。 いちおう、公式ドキュメントにも記載があります。 [save_post 無限ループ回避]( https://wpdocs.osdn.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7/save_post#.E7.84.A1.E9.99.90.E3.83.AB.E3.83.BC.E3.83.97.E5.9B.9E.E9.81.BF )
退会済みユーザー

退会済みユーザー

2019/05/08 05:20

ご指摘ありがとうございます。
CHERRY

2019/05/08 05:23

こんなことしないと回避できない仕様をなんとかしてほしいというのはあるんですけどね... 代替案が思いつかない。
Samurai_Tiger

2019/05/08 05:26

ご回答ありがとうございます。 基本的な知識が不足しており、大変勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問