私は2つのカスタム投稿タイプproject
とperson
を持っています。どちらもいくつかのカスタムフィールドがあります。私はproject
カスタム投稿タイプのテンプレートを作成しています。
このスクリーンショットに見られるように、私はproject
カスタムフィールドにタイプリレーションのいくつかのフィールドがあります。残念なことに、それらが何を意味するのか、そしてそれらをどのように使用するのかはあまりよくわかっていませんが、それが私の主な質問ではありません 。
次に、person
カスタムフィールドの中には、first_name
、last_name
などのテキストフィールドしかありません。
それでは、person
というタイプのカスタム投稿タイプがあるとしましょう。その人はプロジェクトに貢献しました。それはタイプproject
のカスタム投稿タイプです。
project
投稿のテンプレートを操作するとき、どうやってperson
型のカスタムフィールドに[acf field]ショートコードを含めることができますか?
これが私がやりたいことのスクリーンショット/概念です:赤い丸で囲まれた情報はproject
カスタムフィールドから引き出された情報ですが、青い丸で囲まれた情報はperson
カスタムフィールドから引き出された情報です。
ノート:
私はかなりワードプレスに慣れていないとphpの知識がない
理想的には私の問題の解決策はphpファイルにコードを追加する必要はないはずです。それは私のクライアントには望ましくないからです。できればWPBakeryテンプレートエディタ内で実行できるようにします。
あなたの助けをありがとう、私は私が私の問題を理解できる方法で言い表すことに成功したことを望みます。
私はこのプラグインを見つけました、それは1つの解決策を提供するように思われる:入れ子になったショートコード: https://wordpress.org/plugins/nested-shortcodes/
残念ながら、それはまた制約をもたらし、私が解決策を見つけることを許していません。私がやりたいことはこれです:
入力:[acf field="first_name" post_id=[acf field="student"]]
予想される出力は次のとおりです。John Doe
残念ながら、私が得る出力は]
です。
これらによると、部分的にここにリストされているショートコード制限によるものです https://codex.wordpress.org/Shortcode_API#Limitations
一方、このハードコーディングされた回避策は機能します。
入力:[acf field="student"]
出力:89
入力:[acf field="first_name" post_id=89]
出力:John Doe
残念ながら、この回避策はハードコードされた固有のID 89を持っているため、将来の使用のためのテンプレートとして使用することはできません。
誰かが私をハードコードすることを必要としない解決策またはより良い回避策を持っていますか?この問題を解決するのに役立つ限り、私はまったく新しいアイディアや方向性についても開いています。
ACF設定でリレーションシップモデルを使用しているので、ページ上の要素を反復処理する必要があると思います。そのため、ACFドキュメントのコードを使用してそれをsingle.phpまたはpage.phpに追加するだけです。 https://www.advancedcustomfields.com/resources/relationship/
それでもショートコードを使用したい場合は、上記のリンクからのサンプルコードを含む独自のショートコードを作成できます。
お役に立てれば!
これは私がbe.freshの助けを借りて見つけた解決策です。この行のコードをfunctions.phpファイルに追加するとshortcode [person]が作成され、正しい出力が得られます。
function person_func() {
$postID = do_shortcode("[acf field='student']");
$postField = get_field("first_name", $postID);
return $postField;
}
add_shortcode( 'person', 'person_func' );
なぜそれが機能するのですか?私は ここで ACFがそれらのget_field()関数でポストIDも受け付けることを発見したので、ポストIDとしてハードコードされた89で私の問題を回避することができます。
もちろんここで見つけることができるように 、 することができるように属性を取ることができるショートコードを作成することによってこの関数はもっと便利にすることができます。