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

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

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

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

PHP

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

Q&A

1回答

1552閲覧

WordPress functions.php 関数

usersan

総合スコア6

WordPress

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

PHP

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

0グッド

0クリップ

投稿2017/11/15 02:09

編集2017/11/15 04:44

###前提・実現したいこと
アクションフック
transiton_post_status関数を使い
投稿時メールを飛ばしたい。

###発生している問題・エラーメッセージ
メールを飛ばす処理だけを
サイトを開くときに読み込むindex.phpになどに書くと
サイトを開くだけでメールが飛ぶのは確認できています。

しかしアクションフックを利用した
条件付きで飛ばす処理をするときに
functions.phpに書くのですが
全て駄目でした。

###該当のソースコード
function send_email($post_ID) {
//送り先メルアド
$friend = 'test_n@test.co.jp';

//ヘッダ情報(送り主(自分)の情報)
$headers = 'From: 管理人 <my_mail@test@c3soft.com>' . "\r\n";

//post_IDを元に投稿記事情報を取得
$permalink = get_permalink($post_ID);

//post_IDを元に記事情報を連想配列で取得
$post = get_post($post_ID, ARRAY_A);
//ブログ記事タイトルを変数に
$post_title = $post['post_title'];

//メール送信('送り先メルアド','メールタイトル','本文','ヘッダ情報');
wp_mail($friend, 'ブログを更新しました', $post_title.':'.$permalink, $headers);
return $post_ID;
}
add_action('publish_post', 'send_email');
?>

###試したこと
調べたら出てくるソースは
全てfunctions.phpに書き、試しましたが
何か設定や問題があるのか、全く動きません。

###補足情報(追記)
10.11.12.176 - - [15/Nov/2017:13:35:22 +0900]
"POST /syanai/wp-admin/admin-ajax.php HTTP/1.1"
200 261 "http://****/**/"
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/61.0.3163.100 Safari/537.36"

Nov 15 13:40:16 localhost sendmail[5659]: vAF4eF4u005657: to=*******@yahoo.co.jp,
ctladdr=apache@localhost.localdomain (48/48), delay=00:00:01, xdelay=00:00:00,
mailer=esmtp, pri=150615, relay=mx5.mail.yahoo.co.jp. [183.79.16.246],
dsn=2.0.0, stat=Sent (ok dirdel

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/11/15 03:21

「全て駄目でした。」とは具体的にどうなったのですか。フックした関数が呼ばれないのか、それともフックした関数は呼ばれるがwp_mail関数でメールが送信されないのか。
CHERRY

2017/11/15 04:00

Webサーバーのログとメールサーバーのログを 個人情報部分を伏せて、質問に追記してください。
usersan

2017/11/15 04:02

フックした関数が呼ばれたかどうかの判断が出来ない状態ですよ。メールを飛ばす関数は書いてある通り、飛ぶのは確認済みですので、おそらくフックの方だと思います。 フックさせるための条件などあれば教えて下さい。 そして書いたコードで悪いところがあれば教えて下さい
usersan

2017/11/15 04:03

これまでfunctions.phpにフックを書いて動いた試しがありません。何か設定や決まりごとなどあるのでしょうか?
usersan

2017/11/15 04:44

ログ取ってきました
usersan

2017/11/15 06:27

質問掲示板で質問をし、問があればちゃんと答えてる 答えが分からないからって 丸投げとか そっちが丸投げだろ
退会済みユーザー

退会済みユーザー

2017/11/15 06:29

フックした関数内にdie("停止")を記述してください。フックした関数が実行されていれば処理が止まります。
guest

回答1

0

コード的には、ざっと見た限り問題なさそうで、ログに何か出ていないかと思って追記依頼したのですが、記載いただいた範囲では、「@localhost.localdomain」になっている点だけが気になります。

記載していただいたログが、投稿を保存したタイミングのログだとすると アクションフックは、動いていて、メールは送信されているようですね。

差出人が、apache@localhost.localdomain になっているようですので、迷惑メールとして、受け取り拒否されているのではないでしょうか。

PHP や メールサーバ の設定を見直して見た方が良いかもしれません。


念のため、コードをうちのテスト環境に WordPress を新規インストールして、ほぼデフォルトの設定で、質問に記載のコードをメールアドレスだけ変更して、そのまま実行して見ました。

  • 実行した内容
  1. Wordpress 4.8.3 を新規インストールし、最低限の設定。
  2. 画面が表示されることと投稿できることを確認。
  3. デバックモードの設定。 WP_DEBUG と WP_DEBUG_LOG を true にする。 ( WordPressでのデバッグ を参照。)
  4. ソースコードのメールアドレスを変更して、twentyseventeen テーマの functions.php の最後に貼り付ける。
  5. WordPress で、新規記事を投稿。
  6. メールを確認。
  • 結果

$headers に設定した From アドレスから「ブログを更新しました」というタイトルのメールが届きました。

投稿2017/11/16 04:39

CHERRY

総合スコア25171

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問