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

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

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

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

PHP

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

Q&A

解決済

1回答

549閲覧

Wordperssで、レビュー状態から公開したときに、ログインユーザーのIDをカスタムサブフィールドに登録(更新)したい。

k-k-k-k

総合スコア2

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/08/16 02:00

編集2019/08/16 04:39

前提・実現したいこと

ここに質問の内容を詳しく書いてください。

wordpressのAdvanced Custom Fieldsプラグイン(以降ACF)を使い承認機能を実装しようとしています。 投稿のステータスがレビュー(pending)から公開(publish)に遷移した場合、現在のユーザーのIDをカスタムフィールド「承認者」に登録(更新)する仕組みです。 前提: カスタムフィールド「承認者」はサブフィールドです。 承認グループ(field_987654321fedc)  ┗承認者(field_123456798abncd)

発生している問題・エラーメッセージ

ACF専用関数のupdate_field( $field_key, $value, $post_id )を使用していますが、レビュー状態から公開をしても、カスタムフィールド「承認者」の内容が更新されません。

該当のソースコード

PHP

1function approval_registration($post){ 2 $user = wp_get_current_user();//現在ログインしているユーザー情報 3 $field_key = "field_123456789abcd"; 4 $value=$user->ID; 5 $post_id=$post->ID; 6 update_field( $field_key, $value, $post_id ); 7} 8add_action( 'pending_to_publish', 'approval_registration', 10, 1 );

試したこと

サブフィールドの指定ができないのかもしれないと思い、通常のフィールドをテスト用に作成
し試みましたが更新されませんでした。

add_action( 'save_post', 'approval_registration', 10, 1 );
で実行すると更新されました。

補足情報(FW/ツールのバージョンなど)

Wordpress 5.2.2
Advanced Custom Fields 5.8.2

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

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

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

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

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

YukiYamashina

2019/08/16 04:13

pending_to_publish は管理画面右上の投稿の「ステータス」が「レビュー待ち」の状態で保存されている投稿に対して「公開」ボタンを押すことで発火しますが、そのように操作しても更新されないということでしょうか?
k-k-k-k

2019/08/16 04:22

はい、その通りです。 ステータスが「レビュー待ち」状態で保存されている投稿で、「公開」ボタンを押しても、目的のフィールドは更新されませんでした。
YukiYamashina

2019/08/16 04:40

approval_registration 内で例えば file_put_contents( __DIR__ . '/log.txt', json_encode( $post ) ); を入れると、テーマディレクトリ内(functions.phpの入っているディレクトリ)に log.txt は書き出されますでしょうか?
k-k-k-k

2019/08/16 04:50

いいえ、log.phpは書き出されませんでした。 親テーマ、子テーマ共に確認しましたが、書き出されてはいませんでした。
YukiYamashina

2019/08/16 05:16

pending_to_publish が効かなくて save_post ならうまくいくというのであれば、所定の操作によって意図したようにステータスの変化がしていないように考えられるため、 add_action( 'transition_post_status', function( $new_status, $old_status, $post ) { file_put_contents( __DIR__ . '/log.txt', json_encode( [ 'new_status' => $new_status, 'old_status' => $old_status, ] ) ); }, 10, 3 ); のようなコードでステータスの変化を確認されてみてはいかがでしょうか?
k-k-k-k

2019/08/16 05:57

ありがとうございます。 ご提示のコードを入れましたところ、 レビュー待ち→公開 の場合だけ、$postの内容がlog.txtに記録されました。 他の状態遷移は正常にlog.txtに記録されていました。
k-k-k-k

2019/08/16 06:04

すみません、add_action( 'pending_to_publish', 'approval_registration', 10, 1 );を削除せずに追記してしまっておりました。 add_action( 'pending_to_publish', 'approval_registration', 10, 1 );を削除してから操作を行ったところ、レビュー→公開も正常にステータスの遷移が行われていることを確認できました。
k-k-k-k

2019/08/16 06:12

順序が逆になってしまいましたが、log.txtファイルをfunctionsと同じディレクトリに置いたところ、approval_registration内のfile_put_contents( __DIR__ . '/log.txt', json_encode( $post ) );も正常に動作したようです。さきほどの$postの内容が記録されたのはこれが原因だと思います。
YukiYamashina

2019/08/16 11:18

> 順序が逆になってしまいましたが、log.txtファイルをfunctionsと同じディレクトリに置いたところ、approval_registration内のfile_put_contents( __DIR__ . '/log.txt', json_encode( $post ) );も正常に動作したようです。さきほどの$postの内容が記録されたのはこれが原因だと思います。 であれば pending_to_publish が発火しているということですので、元のコードの $value や $post_id を書き出して正しくセットされているかを確認されてみてはいかがでしょうか?
k-k-k-k

2019/08/16 14:34

$value,$post_idともに正しくセットされていました。save_postで正しく更新されていることから、{old_status}_to_{new_status}内の使い方に問題があるのかもしれません。 draft_to_pending,draft_to_publish等すべてのパターンで試してみましたが、やはり更新はされませんでした。
k-k-k-k

2019/08/19 14:06

結局のところ、すべてが正常に動作しているようで、フィールドの更新のみが動いていない状態でしたので、wordpress本体とacfの再インストールを行ったところ、正常に動作することを確認できました。 YukiYamashinaさんのレクチャーのおかげで問題を深堀し、真相をつかむことが出来ました。ありがとうございました。
guest

回答1

0

自己解決

結局のところ、すべてが正常に動作しているようで、フィールドの更新のみが動いていない状態でしたので、wordpress本体とacfの再インストールを行ったところ、正常に動作することを確認できました。

行った手順
①acf停止→削除→インストール→有効化 解決せず
②wordpress再インストール(コアファイルの入れ替え) 解決せず
③wordpress再インストール後、acf再インストール(①の手順) 解決

投稿2019/08/19 14:10

k-k-k-k

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問