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

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

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

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

PHP

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

Q&A

1回答

279閲覧

WORDPRESSの新規投稿通知をメールで登録ユーザーに飛ばしたい件

dondon1965

総合スコア17

WordPress

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

PHP

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

0グッド

0クリップ

投稿2024/09/23 01:17

編集2024/09/23 01:22

お世話になっております。よくわからないのでお教えいただければ幸いです。

WORDPRESSのカスタム投稿タイプ「luserpage」に新規投稿した場合、該当メールアドレスへ通知いく内容を情報を参考にして現在以下のコードをテーマのfunction.phpに記載をしています。
無事にメールへの送信は出来ているのですが、新規投稿を→一旦下書き→公開にしないとメールが飛ばないようです。
これを、いきなり「公開」にした場合、メールを飛ばすようにしたいのですが、分かる方お教えいただきたく存じます。
お手数をおかけしますがどうぞよろしくお願いいたします。

該当ソースコード

add_action('transition_post_status', function ($new_status, $old_status, $post) {
//「新規投稿」、「承認待ち」、「下書き」、「自動保存」、「予約済」のステータスから「公開済」に変化した時に処理が行われる。
if (($old_status == 'new' || $old_status == 'pending' || $old_status == 'draft' || $old_status == 'auto-draft' || $old_status == 'future') && $new_status == 'publish' && $old_status != 'publish' && $post->post_type == 'luserpage') {
$user_select = get_field('user_select', $post->ID); //カスタムフィールド「user_select」を取得(返り値はUser ID)
$user_emaillist = array(); //空の配列を定義
foreach ($user_select as $user_id) {
$user_data = get_userdata($user_id); //ユーザーIDからユーザー情報を取得
$user_email = $user_data->user_email; //ユーザー情報の中からメールアドレスを取得
array_push($user_emaillist, $user_email); //取得したメールアドレスを$user_emaillistに追加していく
}
$mail_to = implode(',', $user_emaillist); //メールアドレスだけの配列をカンマ区切りの文字列にして$mail_toに代入
// 送信先のメールアドレス
$to = $mail_to;

以下メール設定情報

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

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

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

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

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

CHERRY

2024/09/23 03:45

条件分岐に使っている $new_status や $old_status や $post->post_type の値は、どのような値になっていますか?
dondon1965

2024/09/23 03:54

コメントありがとうございます。申し訳ありません。当方プログラムに強くなく現況のコードの状態で値については特に設定をしていないです。
guest

回答1

0

WordPress 6.6.2で確認しました。

標準の投稿($post->post_type=='post')で試してみましたが、

$old_status$new_status
公開auto-draftpublish
$old_status$new_status
下書き保存auto-draftdraft
公開draftpublish

となり、$post->post_type=='luserpage'が適切であるなら、提示しているif文は正しいです。

以下の方法でデバッグしてみてください。

wp-config.phpのdefine( 'WP_DEBUG', false );を書き換える。

define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', true );

if文の前に追加する。

error_log(print_r($new_status, true)); error_log(print_r($old_status, true)); error_log(print_r($post->post_type, true));

実行すると、wp-content/debug.logに出力されます。その際、$old_statusが「new」となる出力は無視してください。
上記で不明な点があれば、コメントしてください。

投稿2024/09/23 09:01

hiroki-o

総合スコア1377

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

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

dondon1965

2024/09/25 05:54

hiroki-oさま アドバイスいただきありがとうございます。 良く分からないまま、アドバイス通りにやってみたと所、 debug.logには以下のように出力されていました。 繰り返し実行されているようなのでその一部は以下のようになります。 ==ここから== [25-Sep-2024 05:26:31 UTC] PHP Warning: Invalid argument supplied for foreach() in /export/sd202/www/jp/r/e/gmoserver/3/6/sd0205736/hoge/wp-content/themes/twentysixteen-child-umoto/functions.php on line 91 [25-Sep-2024 05:26:32 UTC] PHP Deprecated: 関数 has_cap がバージョン 2.0.0 から<strong>非推奨</strong>になった引数付きで呼び出されました。 ユーザーレベルの使用は推奨されていません。代わりに権限を使ってください。 in /export/sd202/www/jp/r/e/gmoserver/3/6/sd0205736/hoge/wp-includes/functions.php on line 6085 [25-Sep-2024 05:26:32 UTC] publish [25-Sep-2024 05:26:32 UTC] publish [25-Sep-2024 05:26:32 UTC] luserpage [25-Sep-2024 05:24:55 UTC] PHP Deprecated: 関数 has_cap がバージョン 2.0.0 から<strong>非推奨</strong>になった引数付きで呼び出されました。ユーザーレベルの使用は推奨されていません。代わりに権限を使ってください。 ==ここまで== これを見ると91行目のfunction.phpに「無効な引数がforeachに渡されています」ということだと思うのですが91行目の部分は foreach ($user_select as $user_id) { $user_data = get_userdata($user_id); //ユーザーIDからユーザー情報を取得 $user_email = $user_data->user_email; //ユーザー情報の中からメールアドレスを取得 array_push($user_emaillist, $user_email); //取得したメールアドレスを$user_emaillistに追加していく } になります。 ユーザーレベルの使用は推奨されていません。代わりに権限を使ってください。 の部分が良く分からないのですがもしよろしければアドバイスいただけますと助かります。 どうぞよろしくお願いいたします。
hiroki-o

2024/09/25 10:52

提示されている情報からは、関数has_capが何だかわからないので、答えられません。 ログの切り取り方の問題かもしれませんが、publish/publish/luserpageより前でエラーが出ているのですか? foreachはif文より後ですよね? まずは、いきなり公開した時と下書き保存→公開した時で3変数の中身を見て、if文が通るか確認してください。 if文が通るなら、$user_idや$user_emailの中身を見て(方法は3変数と同じ)、いきなり公開した時と下書き保存→公開した時の違いを確認してください。 違いを発見できたら、has_capのエラーを出している関数を絞り込めるかもしれません。(あるいは関係無いかもしれません) そうやって、デバッグしてみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問