高级自定义字段关系 - 基本循环+反转?

时间:2016-02-25 22:56:38

标签: php wordpress advanced-custom-fields

我想使用高级关税字段将公司产品连接起来。这些是我网站上的一些页面:

www.example.com/companies/apple/
www.example.com/companies/microsoft/
www.example.com/products/iphones/
www.example.com/products/ipods/

例如,我想将Apple连接到他们的产品(iPhone和iPod)。

我在ACF中添加了一个名为related_articles的关系字段,仅当父页面为/ companies / -page时才可用。

因此,在Apple的公司页面上,已在自定义关系字段related_articles中选择了iPhone和iPod产品。

在page.php上我添加了以下内容:

<?php 

$posts = get_field('related_articles');

if( $posts ): ?>
    <?php foreach( $posts as $p ): // variable must NOT be called $post (IMPORTANT) ?>
            <a href="<?php echo get_permalink( $p->ID ); ?>"><?php echo get_the_title( $p->ID ); ?></a><br>
    <?php endforeach; ?>
<?php endif; ?>

在页面www.example.com/companies/apple/上返回以下内容:

<a href="http://www.example.com/products/iphones/">iPhones</a><br>
<a href="http:// www.example.com/products/ipods/">iPods</a><br>

完全符合我的要求。

问题是http://www.example.com/products/iphones/http:// www.example.com/products/ipods/为空。在这里,我想要颠倒关系,并显示<a href="http://www.example.com/companies/apple/">Apple</a><br>。我怎么解决这个问题?是否可以使用兼容两种方式的代码?

我不希望从产品到公司建立第二个连接 - 这需要从单个页面而不是两个页面进行处理。自定义帖子类型也是不行的。

已更新 - Querying relationship fields文档中的新代码:

<?php 

$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'
        )
    )
));
?>

<?php if( $related_articles ): ?>
    <?php foreach( $related_articles as $article ): ?>
        <a href="<?php echo get_permalink( $article->ID ); ?>"> <?php echo get_the_title( $article->ID ); ?></a><br>
    <?php endforeach; ?>
<?php endif; ?>

这样做不会返回任何内容(空白)。

1 个答案:

答案 0 :(得分:1)

这当然是可能的 - ACF允许对相关项目进行2路或反向查询。那么,您的产品页面,您可以执行以下操作(使用您自己的相关名称)

global $post;
$related_company = get_posts(
    array(
        'post_type'=>'company',
        'meta_query'=>array(
            array(
                'key' => 'related_product',
                'value' => '"'.$post->ID.'"',
                'compare' => 'LIKE'
            )
        )
));

整个过程在ACF网站上详细解释:http://www.advancedcustomfields.com/resources/querying-relationship-fields/

虽然,如果不使用自定义帖子类型是否可行,我不确定。