Wordpress ACF 选择:动态使用类别作为选择时仅返回第一个对象

Posted

技术标签:

【中文标题】Wordpress ACF 选择:动态使用类别作为选择时仅返回第一个对象【英文标题】:Wordpress ACF selection: Only first object returned when dynamically using categories as choices 【发布时间】:2016-10-28 10:11:35 【问题描述】:

我正在尝试通过动态获取帖子类别来修改 ACF 选择字段,以便用户可以在不同的类别之间进行选择(它用于博客页面模板)。我用的是ACF的函数,现在只返回第一个类别。

这就是我在functions.php 中得到的:

函数 acf_load_color_field_choices( $field )

function categoryName() 
        $args = array(
            'type'       => 'post',
            'taxonomy'   => 'category',
            'parent'     => 0, // get top level categories
            'orderby'    => 'name',
            'order'         => 'ASC',
            'hierarchical'  => 1,
            'pad_counts'    => 0
        );

        $categories = get_categories( $args );

        foreach ( $categories as $category )

            echo $category->name;

        
    


    // reset choices
    $field['choices'] = array();


    // get the textarea value from options page without any formatting
    $choices = categoryName();


    // explode the value so that each line is a new array piece
    $choices = explode("\n", $choices);


    // remove any unwanted white space
    $choices = array_map('trim', $choices);


    // loop through array and add to field 'choices'
    if( is_array($choices) ) 

        foreach( $choices as $choice ) 

            $field['choices'][ $choice ] = $choice;

        

    


    // return the field
    return $field;



add_filter('acf/load_field/name=blog_by_cat', 'acf_load_color_field_choices');

我也试过了:

function acf_load_cat_field_choices( $field ) 


    // reset choices
    $field['choices'] = array();

    // get the textarea value from options page without any formatting

    $choices = get_categories();
    $value = get_categories();

    // explode the value so that each line is a new array piece
    $choices = explode("\n", $choices);

    // remove any unwanted white space
    $choices = array_map('trim', $choices);

        // loop through array and add to field 'choices'
    if( is_array($choices) ) 

        foreach( $choices as $choice ) 

            $field['choices'][ $value->slug ] = $choice->name;


        

    

    // return the field
    return $field;

这不返回任何内容

还有:

function acf_load_cat_field_choices( $field ) 


    // reset choices
    $field['choices'] = array();

    // get the textarea value from options page without any formatting

    $choices = get_categories();

    // explode the value so that each line is a new array piece
    $choices = explode("\n", $choices);

    // remove any unwanted white space
    $choices = array_map('trim', $choices);

        // loop through array and add to field 'choices'
    if( is_array($choices) ) 

        foreach( $choices as $choice ) 

            $field['choices'][$choice] = $choice;


        

    

    // return the field
    return $field;


这会返回“数组”(一次)

【问题讨论】:

【参考方案1】:

categoryName() 没有返回任何内容。与其回显$category->name,不如将​​它们打包成一个数组,然后返回该数组?

【讨论】:

【参考方案2】:

所以我找到了正确的方法:

函数 acf_load_cat_field_choices( $field )

// reset choices
$field['choices'] = array();

// get the textarea value from options page without any formatting

$getCatSlugs = array('all_posts');
$getCatNames = array('All Posts');


$args = array(
        'type'          => 'post',
        'taxonomy'      => 'category',
        'parent'        => 0, // get top level categories
        'orderby'       => 'name',
        'order'         => 'ASC',
        'hierarchical'  => 1,
        'pad_counts'    => 0
);

$categories = get_categories( $args );

foreach ( $categories as $category )

        $getCatSlugs[] = $category->slug;
        $getCatNames[] = $category->name;




$values = implode("\n", $getCatSlugs);
$labels = implode("\n", $getCatNames);


$values = explode("\n", $values);
$labels = explode("\n", $labels);



// loop through array and add to field 'choices'


    foreach( array_combine($values, $labels ) as $value => $label ) 
        $field['choices'][ $value ] = $label;       
   


// return the field
return $field;

add_filter('acf/load_field/name=post_by_cat', 'acf_load_cat_field_choices');

【讨论】:

以上是关于Wordpress ACF 选择:动态使用类别作为选择时仅返回第一个对象的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress 如何在动态表中显示 ACF 字段

Wordpress 类别循环无法检索 ACF 图像给出图像值:NULL

子/子类别中的 ACF 字段

在 Wordpress 自定义帖子类型循环中使用 ACF 分类字段作为变量

使用自定义帖子类型的标题列表作为 ACF 字段的值

任何人都可以告诉我如何使用 ACF(免费版)在 WordPress 中添加动态英雄图像