我试图通过动态获取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");