web-dev-qa-db-ja.com

あるカスタム投稿タイプの詳細カスタムフィールドを別のカスタム投稿タイプで使用する/ネストされたショートコードを使用する

私は2つのカスタム投稿タイプprojectpersonを持っています。どちらもいくつかのカスタムフィールドがあります。私はprojectカスタム投稿タイプのテンプレートを作成しています。

このスクリーンショットに見られるように、私はprojectカスタムフィールドにタイプリレーションのいくつかのフィールドがあります。残念なことに、それらが何を意味するのか、そしてそれらをどのように使用するのかはあまりよくわかっていませんが、それが私の主な質問ではありません enter image description here

次に、personカスタムフィールドの中には、first_namelast_nameなどのテキストフィールドしかありません。

それでは、personというタイプのカスタム投稿タイプがあるとしましょう。その人はプロジェクトに貢献しました。それはタイプprojectのカスタム投稿タイプです。

project投稿のテンプレートを操作するとき、どうやってperson型のカスタムフィールドに[acf field]ショートコードを含めることができますか?

これが私がやりたいことのスクリーンショット/概念です:赤い丸で囲まれた情報はprojectカスタムフィールドから引き出された情報ですが、青い丸で囲まれた情報はpersonカスタムフィールドから引き出された情報です。 enter image description here

ノート:

  • 私はかなりワードプレスに慣れていないとphpの知識がない

  • 理想的には私の問題の解決策はphpファイルにコードを追加する必要はないはずです。それは私のクライアントには望ましくないからです。できればWPBakeryテンプレートエディタ内で実行できるようにします。

    • インストールされ使用可能なプラグインはACF、WPベーカリー、ツールセット、顕著、acf-vc、カスタム投稿タイプUIです

あなたの助けをありがとう、私は私が私の問題を理解できる方法で言い表すことに成功したことを望みます。

更新

私はこのプラグインを見つけました、それは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を持っているため、将来の使用のためのテンプレートとして使用することはできません。

誰かが私をハードコードすることを必要としない解決策またはより良い回避策を持っていますか?この問題を解決するのに役立つ限り、私はまったく新しいアイディアや方向性についても開いています。

1
charel-f

ACF設定でリレーションシップモデルを使用しているので、ページ上の要素を反復処理する必要があると思います。そのため、ACFドキュメントのコードを使用してそれをsingle.phpまたはpage.phpに追加するだけです。 https://www.advancedcustomfields.com/resources/relationship/

それでもショートコードを使用したい場合は、上記のリンクからのサンプルコードを含む独自のショートコードを作成できます。

お役に立てれば!

0
be.fresh

これは私が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で私の問題を回避することができます。

もちろんここで見つけることができるように することができるように属性を取ることができるショートコードを作成することによってこの関数はもっと便利にすることができます。

0
charel-f