【问题标题】:Only show child pages of a specific page ID in an ACF Relationship Select Box仅在 ACF 关系选择框中显示特定页面 ID 的子页面
【发布时间】:2017-12-20 04:21:23
【问题描述】:

我正在建立一家音乐课公司。我有一个主“团队”页面,每个音乐导师都有一堆子页面,上面有一些 ACF 的东西。在该网站上还有一个“课程”页面,这是一个单一页面,其中包含所有仪器,每个仪器都会在单击时打开一个模式框以显示一些信息,其中部分信息包括以下详细信息:

  • 哪些导师教授该特定乐器
  • 导师姓名
  • 导师的照片
  • 导师子页面的链接

使用 ACF,我已经设置了一个初始关系选择框来开始一切,客户可以进入课程页面并选择哪些导师教哪种乐器,这很好,但为了减少人为错误的机会,我'只希望我的客户能够从“团队”页面下的子页面中进行选择。

ACF 文档确实提供了一些帮助,但这只是为了选择您当前正在编辑的特定页面的子父级 - found here

我已尝试将函数编辑为如下所示,因此它仅显示来自特定页面 ID(在本例中为 11)的子页面。

function my_relationship_query( $args, $field, $post_id ) {

// only show children of the current post being edited
$args = array(
'post_parent' => 11,
'post_type'   => 'any', 
'numberposts' => 10,
'post_status' => 'any' 
);
$children = get_children( $args );  

// return
return $args;

}

// filter for every field
add_filter('acf/fields/relationship/query', 'my_relationship_query', 10, 3);

但它没有做我想做的事,哈哈。我正在绞尽脑汁。我的 PHP 经验仍处于青春期,所以任何关于我哪里出错的帮助或建议都会很棒。谢谢!

【问题讨论】:

    标签: php wordpress advanced-custom-fields


    【解决方案1】:

    看起来您返回的是$args,而不是$children。试试这样的:

    function my_relationship_query( $args, $field, $post_id ) {
    
        $args = array(
            'post_parent' => $post_id, // updated to use the current $post_id
            'post_type'   => 'any', 
            'numberposts' => 10,
            'post_status' => 'any' 
        );
    
        $children = get_children( $args );  
    
        // return
        return $children; // updated to return $children
    
    }
    
    // filter for every field
    add_filter('acf/fields/relationship/query', 'my_relationship_query', 10, 3);
    

    【讨论】:

    • 感谢 mbacon40 这么快回来!我已经使用了您提供的功能,它现在在关系字段中显示的唯一选项是最初的“Hello World”帖子。然后,我将“post_parent”更改为我想从(ID 11)调用孩子的页面 ID,它显示的内容相同。
    猜你喜欢
    • 1970-01-01
    • 2016-11-12
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    相关资源
    最近更新 更多