我正在尝试通过动态提取帖子类别来修改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”(一次)
答案 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');