输出未发布内容的ACF关系字段

时间:2018-12-07 作者:Xav

我有一个从自定义帖子类型输出帖子的关系字段。然而,如果我取消发布其中一篇文章,它仍然会显示在输出的代码中。

我知道可以将字段设置为仅允许用户从发布的帖子中进行选择(在管理中),但我不确定如何在ACF输出代码中添加检查,以查看帖子是否已发布。

最有可能发生这种情况的情况是,客户端已经使用站点一段时间并使用关系字段,但随后删除或取消发布其中一篇帖子,并忘记从关系字段中手动删除它们。

有没有办法在飞行中检查这个?

代码如下:

<?php 
$holidays = get_sub_field(\'holidays\');
if( $holidays ): ?>

<?php foreach( $holidays as $holiday): ?>
    <?php setup_postdata($holiday); ?>

    <a href="<?php echo get_permalink( $holiday->ID ); ?>">
        <?php echo get_the_title( $holiday->ID ); ?>
    </a>

<?php endforeach; ?>
<?php wp_reset_postdata(); ?>

2 个回复
SO网友:Milo

使用get_post_status 检查帖子的状态。

if( get_post_status( $holiday->ID ) == \'publish\' ){
    echo \'This is a published post\';
}
还请注意,您使用setup_postdata 此处不正确。需要通过全球$post var到函数,否则任何依赖于全局$post 将输出不正确的数据。也就是说,您没有使用任何这些函数,因为您使用的是允许传递显式post ID的版本,所以您可以删除setup_postdata 以及wp_reset_postdata.

SO网友:rudtek

您也可以使用ACF的过滤器进行此操作。在函数中输入以下代码。php。

// hide drafts
function relationship_options_filter($options, $field, $the_post) {
$options[‘post_status’] = array(‘publish’);
return $options;
}
add_filter(‘acf/fields/post_object/query/name=<YOUR FIELD NAME>’, ‘relationship_options_filter’, 10, 3);
直接从其网站获取更多信息:https://www.advancedcustomfields.com/resources/acf-fields-post_object-query/

相关推荐