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

时间:2016-10-28 10:11:36

标签: php wordpress categories advanced-custom-fields

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

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

function 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;

}

返回“Array”(一次)

2 个答案:

答案 0 :(得分:0)

categoryName()没有返回任何内容。你应该将它们打包成一个数组,然后返回那个数组,而不是回显$category->name

答案 1 :(得分:0)

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

function 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');