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

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

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

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

WordPress

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

PHP

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

Q&A

解決済

3回答

14547閲覧

【WordPress】get_field('フィールド名',$post_id)の投稿IDの取得・表示について

e.k.

総合スコア11

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

WordPress

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

PHP

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

0グッド

0クリップ

投稿2017/04/27 04:10

編集2017/04/27 05:29

###前提・実現したいこと
WordPressでAdvancedCustomFieldを使用し、投稿ページにカスタムフィールドを作成しました。
投稿ページに投稿された内容をwp_mailを使い、投稿の公開時に送信されるメール本文に反映したいと考えています。

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

投稿IDが取得されず、カスタムフィールドの値がメールに反映されません。

###該当のソースコード

add_action( 'transition_post_status', function( $new_status, $old_status, $post ) { if ( 'publish' == $new_status && 'publish' != $old_status && 'post' == $post->post_type ) { $header = array( 'From: from@example.com' ); $post_id = get_post(); $post_id->ID; $post_id = $post_id->ID; $customfield = get_field('project', $post_id); $message .= "--------------------------------------\r\n"; $message .= $customfield ."\r\n"; $message .= "--------------------------------------\r\n\r\n"; wp_mail( 'to@example.com', $post->post_title, $message, $header ); } }, 10, 3 );

###試したこと
$customfield = get_field('project', $post_id);
この箇所の$post_idに実際の投稿IDを記載した場合、そのIDの該当カスタムフィールドの値は
メール本文に表示されました。
例: get_field('project', 123)

また、$post_idを$message部分にいれたところ、公開したIDの数値が表示されました。
例:$message .= $post_id ."\r\n";

よって投稿IDは取得されており、get_fieldも使用できているようです。
get_field()の$post_idに変数が使用不可ということなのでしょうか。

php初心者のため、基本的な箇所で間違いがありましたら申し訳ございません。
ご指導・ご鞭撻何卒宜しくお願い致します。

###補足情報(言語/FW/ツール等のバージョンなど)
WordPressのバージョン 4.7.3

【追記】
皆さまご教示ありがとうございます。

以前にも試していましたが、その際は表示されない原因が特定できなかったので
改めてこちらの書き方も試してみました。
get_post_meta($post_id, $key, $single);

例:$message = get_post_meta($post_id, 'project', true);

結果としては同じく投稿IDが取得できていないようです。

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

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

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

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

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

guest

回答3

0

投稿の情報を取得するget_post()はループ内で使用することで投稿情報が取得できます。

今回はアクションフックのコールバック関数の引数$postから取得できるのではないでしょうか

以下のソースで投稿IDが取得できるかお試しください。

php

1// 以下のソースを差し替えてIDを取得 2// $post_id = $post_id->ID; 3$post_id = $post->ID;

投稿2017/04/27 04:24

koou

総合スコア57

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

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

e.k.

2017/04/27 05:24

koou様、ご教示ありがとうございます。 試してみましたが、カスタムフィールドの値は表示されませんでした。 もう少し試行錯誤してみます。
guest

0

自己解決ではなく質問に回答頂いたお2人のアドバイスを参考にさせて頂きましたが、上手くいった方法を改めてこちらに記載します。

最初に投稿したコードの、

if ( 'publish' == $new_status && 'publish' != $old_status && 'post' == $post->post_type ) {

の下に

do_action('save_post', $post->ID);

を記載することで、最新のカスタムフィールドの値を取得し、メール本文に反映させることができました!
kei344様、koou様ご回答誠にありがとうございました。

投稿2017/05/01 06:24

e.k.

総合スコア11

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

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

0

ベストアンサー

引数に $post が来ているのでそれを使えば良いのではないでしょうか。

PHP

1// $post_id = get_post(); 2// $post_id->ID; 3// $post_id = $post_id->ID; 4 $post_id = $post->ID;

追記:

$_POST から拾うとか。

【記事を保存したときにAdvanced Custom Fieldsで設定したフィールドの値を取得する。 – Toro_Unit】
https://torounit.com/blog/2013/05/22/1544/

投稿2017/04/27 04:26

編集2017/04/27 05:34
kei344

総合スコア69398

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

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

e.k.

2017/04/27 05:24

kei344様、ご教示ありがとうございます。 試してみましたが、カスタムフィールドの値は表示されませんでした。 もう少し試行錯誤してみます。
e.k.

2017/04/27 08:12

kei344様、追記でもご指南を頂き誠にありがとうございます。 リンク先を参照し、記事の保存時にはカスタムフィールドの値がDBに保存されないということをはじめて知りました。 そうだとすると、記述の誤り等で表示されないわけではなく、また投稿IDが取得できていないわけではなく、カスタムフィールドの値の取得を公開と同じタイミングで行ってしまっているため、取得できていないということでしょうか。 まずは記述に習い試してみましたが、上手くいかず、もう少し試してみたいと思います。 大変参考になるご意見ありがとうございます。もしも記述例など他にもお教え頂けるようでしたら、何卒宜しくお願い致します。
kei344

2017/04/27 08:42

記事保存は、基本情報の保存が行われ、カスタムフィールドの保存が行われる、という順番で行われます。フックの位置によってはそれが「更新」か「新規」かの判別ができなかったりするので、案外難しいところです。 ACFの更新フック(新規作成フック)を探し、それにフックする形でメール送信されてはいかがでしょう。
e.k.

2017/05/01 06:18

kei344様、重ねてのアドバイス誠にありがとうございます。 その後様々な方法を試し、do_actionを使用することで最新のカスタムフィールドの値を取得する事ができました。 記事公開時にカスタムフィールドの値が保存されないという着眼点を示して頂き大変参考になりましたので、ベストアンサーにさせて頂きました。 お忙しいところありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問