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



我试图通过动态获取Post类别来修改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;
}

返回"Array"(一次)

categoryName()未返回任何内容。而不是返回$category->name,你应该把它们打包成一个数组,并返回该数组?

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

函数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");

相关内容

  • 没有找到相关文章

最新更新