web-dev-qa-db-ja.com

Advanced Custom Fieldsプラグインを使用してpost_objectコンテンツを表示する

このコードの何が問題になっているのかを突き止めるのは困難です。

私がやろうとしていること: ACFプラグインを使用してadminのカスタムフィールドを設定し、すべてのページのメタボックスに紹介文のリストを追加する(custom-post-type)。ドロップダウンメニューから、クライアントはその特定のページに表示される紹介文を選択できます。

私は12のテーマのわずかに修正されたバージョンを使っています、そしてこれは私が私のfront_pageテンプレートで使っているコードです。

コード:

<?php $featured_testimonial = get_field('testimonial', $post_object->ID); ?>
    <?php foreach ($featured_testimonial as $post_object): ?>
            <a href="<?php echo get_permalink($post_object->ID); ?>">
                <p class="descr"><?php echo get_the_title($post_object->ID) ?></p>
            </a>
    <?php endforeach; ?> 

問題: /このコードはフロントページに何も表示しません。私はprint_r( $post_object )をしました、そしてそれは私の紹介文の中のすべての情報(タイトル、日付、内容など)を示しました。

解決策: 過去2/3日間、ACFサポートフォーラムで回答を得ようとしていますが、これが私の回答です。

投稿オブジェクトフィールドは、HTMLではなく投稿オブジェクトを返します。 post_objectフィールドでthe_fieldを使用すると、何も表示されません。

あなたはそれを変数として保存する必要があります、そして希望のHTMLを出力するためにIDかpost_title変数を使います

私は解決策を理解していなかったのですか、それとも実際にメッセージが言っていることを正確にやっていて問題は別のところにありますか?

その後の編集: これは私のACFでの証言分野の現在の設定です。

Rules: Post Types - Page.
Field Name - Testimonial.
Field Type: Post Object.
Post type: Testimonial.
Filter from taxonomy: All.

'rules'は、カスタムフィールドがページにのみ表示され、 '紹介文'カスタム投稿タイプの '投稿オブジェクト'のみが表示されることを意味します。管理者にとっては、すべてがうまく機能しているように見えます。フロントエンドに何も表示できないということです。

最終編集: @ s1lv3rの提案に従って、フィールドタイプを 'post-object'から 'relationship'に変更しました。私もこのようにコードを修正しました:

<?php $posts = get_field('testimonial'); ?>
    <?php if( $posts ): ?>
    <?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) ?>
        <?php setup_postdata($post); ?>
        <?php echo get_the_excerpt(); ?>... <a href="<?php the_permalink(); ?>">+More</a>
        <?php the_title(); ?>
    <?php endforeach; ?>
    <?php wp_reset_postdata(); ?>
    <?php endif; ?>

フロントエンドですべてがうまく動作します。助けてくれてありがとう。

3

そもそも、コードの構文が間違っているようには見えません。どのような種類のフィールドを使用していますか。関係?

また、なぜあなたは$post_objectをオーバーライドしていて、それはそもそもどこから来たのでしょうか?コードのその部分がありません。

現在の投稿に添付されているフィールド(現在のloop/global $ postオブジェクト内)を取得するには、IDパラメータなしでget_field('testimonial')を使用するだけです。

フィールドを別のpost_objectに添付したい場合は、投稿した最初の行の直前に$post_object->IDに有効なpost_idが含まれていることを確認しましたか?

新しい情報に従って編集されました:

これは 'multiple'オプションが有効になっている投稿オブジェクトフィールドですか?ドキュメント( http://www.advancedcustomfields.com/resources/field-types/post-object/ )によると、multipleオプションが有効になっている場合、このフィールドはpostオブジェクトの配列のみを返すとのことです。単一の投稿オブジェクト。これはあなたのコードにforeachループが必要ないことを意味します。その場合は、次のようにしてください。

<?php $featured_testimonial = get_field('testimonial', $post_object->ID); ?>
            <a href="<?php echo get_permalink($featured_testimonial->ID); ?>">
                <p class="descr"><?php echo get_the_title($featured_testimonial->ID) ?></p>
            </a> 
3
s1lv3r

まず最初に。管理者側のドロップダウンから値を選択しましたか?そうでなければ、そのページのget_fieldから何の結果も得られません。

また、データベースにアクセスできる場合は、そのページの値が_postmetaテーブルに設定されていることを確認してください。

SELECT * FROM `wp_postmeta` WHERE `post_id` = XX

_ xx _ はあなたのページID、 _ yy _ (下記参照)はあなたが管理者側のドロップダウンから選んだ紹介文のIDです。

結果の中には、次のような数行があります。

meta_id    post_id    meta_key        meta_value
1607       XX         testimonial     YY 
1608       XX         _testimonial    field_5177d30141f17

あなたがすべてDBに正しく設定されているのであれば、それが問題なのはあなたのコードです。

0
montrealist

このコードは役に立ちます

<?php
$featured_testimonial = get_field('testimonial', $post_object->ID); 
?>
<a href="<?php echo get_the_permalink( $featured_testimonial->ID ); ?>"><?php echo $featured_testimonial->post_title; ?></a>
0
Prashant Baldha