ACF relationship fields-получение значений полей из другого типа post

на странице "Мои сообщения" (обычный тип записи) я настроил поле отношений ACF. Внутри этого я могу выбрать название компании, которые находятся под типом post directory_listings.

теперь у меня есть следующий код на странице списков каталогов, и поэтому использование просто get_field не работает, потому что эти значения не находятся на этой странице, они находятся в другом месте типа POST.

Так не уверен, как захватить информацию.

код на одном из страницы, которые находятся под типом публикации DIRECTORY_LISTINGS:

$posts = get_field('related_articles');

if( $posts ): ?>
    <ul>
    <?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) ?>
        <?php setup_postdata($post); ?>
        <li>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
        </li>
    <?php endforeach; ?>
    </ul>
    <?php wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly ?>
<?php endif; ?>

пример диаграммы, как я не большой с объяснением через текст. enter image description here

В настоящее время я настроил поле отношения на странице редактирования компании (directory_listing). Он работает, когда делает следующее: 1) связанные сообщения в этом бизнес-листинге - > выберите сообщение - > опубликовать - > теперь отображает список на странице бизнес-листинга. Пример здесь:http://bit.ly/1vwydDl (внизу страницы)

2) я хотел бы на странице редактирования сообщения выбрать бизнес, на котором будут отображаться сообщения. Я могу поместить поле туда через ACF без проблем, но заставить его фактически отображать результаты, которые я не могу понять.

3 ответов


Справочная Информация:

get_field () имеет три параметра:

  1. $field_name: имя поля, которое необходимо получить. например, "page_content" (обязательно)
  2. $post_id: конкретный идентификатор записи, в который было введено ваше значение. по умолчанию текущий post ID (не требуется). Это также может быть options / taxonomies / users / etc
  3. $format_value

если бы вы только беспокоились при захвате определенного поста (из которого вы знали идентификатор) ключ будет вторым параметром ($post_id). В ACF нет ничего волшебного. Довольно просто:meta_value (т. е. каталог, к которому привязан пост) сохраняется к каждому сообщению (прикрепленному к этому сообщению $post_id).

однако в вашем случае мы не знаем идентификатор сообщения(сообщений), которое мы хотим получить.

устранение:

если мы объясним, что вы хотите сделать в простом предложении, это предложение будет выглядеть примерно так:

показать / получить сообщения на directory_listings (пользовательский тип записи) страница, которая имеет meta_value что указывает на эту страницу.

очевидно, вы не можете использовать get_field(), потому что ваша проблема не имеет ничего общего с "получением поле."Скорее, вам нужно" найти сообщения, которые имеют конкретное поле.- У ACF есть отличная документация по этому.

к счастью для вас, WordPress поставляется с удивительным классом под названием WP_Query, и аналогично удивительная функция под названием get_posts (). Поэтому, оглядываясь на наше предложение выше и переводя его в функцию, мы хотим:get_posts() здесь meta_key есть value текущего $post_id.

или, более конкретно, на ваш directory_listings страница, у вас будет следующий запрос:

$related_articles = get_posts(array(
    'post_type' => 'post',
    'meta_query' => array(
        array(
            'key' => 'related_articles', // name of custom field
            'value' => '"' . get_the_ID() . '"',
            'compare' => 'LIKE'
        )
    )
));

if( $related_articles ): 
    foreach( $related_articles as $article ): 

    // Do something to display the articles. Each article is a WP_Post object.
    // Example:

    echo $article->post_title;  // The post title
    echo $article->post_excerpt;  // The excerpt
    echo get_the_post_thumbnail( $article->ID );  // The thumbnail

    endforeach;
endif;

Если это настраиваемое поле, которое вы ищете в этом запросе, вы можете сделать это следующим образом:

<?php
$posts = get_field('related_articles');

if( $posts ): ?>
    <ul>
    <?php foreach( $posts as $post): // variable must be called $post (IMPORTANT) ?>
        <?php setup_postdata($post); ?>
        <li>
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
            <?php the_field('your_custom_field',$post); ?>
        </li>
    <?php endforeach; ?>
    </ul>
    <?php wp_reset_postdata(); // IMPORTANT - reset the $post object so the rest of the page works correctly ?>
<?php endif; ?>

если я правильно понял, это та же проблема, что и у меня. В моем случае я предпочитал работать с шорткодами. Используя [acf field="person"] С полем, являющимся relationshipt, только дал мне идентификатор человека, но я не смог получить доступ к их полям. С другой стороны, используя [acf field="last_name", post_id=[acf field="person"], который будет идеальным решение не работает парсер WordPress не позволяет вложенные шорткоды.

вот почему я кулачок с этим очень маленьким php решение:

function import_cf_from_cpt( $atts ) {
    // import custom fields from other custom post types that are connected via a relationship to the calling custom post type
    // shortcode: [import <field from calling CPT of type relationship> <field name from field from other CPT>]
    // ex [import person last_name] --> Doe

    $postID = do_shortcode("[acf field={$atts[0]}]");
    // we use the first attribute to get the ID of the object
    $postField = get_field($atts[1], $postID);
    // next, using the ID we look for the field of the second attribute.
return $postField;
}
add_shortcode( 'import', 'import_cf_from_cpt' );

размещение этого в функции.php файл позволяет использовать шорткод

[import person last_name] например, или любая другая комбинация для импорта значений полей из других сообщений.