感谢您花时间阅读本文,我会尽力解释。任何帮助表示赞赏。
我有一个复选框组供我用于每个Wordpress帖子。它允许我勾选/检查当前帖子中的哪些人。我通过将此代码添加到我的functions.php文件来实现这一目的:
Collections.sort(array_list, new Comparator<Date>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2));
}
});
这样做很好,但是,我相信你会同意每次有新人的时候继续添加人都会非常繁琐。
因此,为了使此复选框组更具动态性,我创建了一个新的自定义帖子类型,允许我为每个人添加信息,就像在wp-admin中添加普通帖子的内容一样。唯一的问题是我无法弄清楚如何在functions.php中循环这个自定义的帖子类型。
这就是我想要做的事情:
function add_custom_meta_box() {
add_meta_box(
'custom_meta_box',
'Featured People',
'show_custom_meta_box',
'post',
'side',
'core'
);}
add_action('add_meta_boxes', 'add_custom_meta_box');
// Field Array
$prefix = 'custom_';
$custom_meta_fields = array(
array (
'label' => '',
'desc' => '',
'id' => $prefix.'checkbox_group',
'type' => 'checkbox_group',
'options' => array (
'1' => array (
'label' => 'Person One',
'value' => 'personone'
),
'2' => array (
'label' => 'Person Two',
'value' => 'persontwo'
),
'3' => array (
'label' => 'Person Three',
'value' => 'personthree'
),
'4' => array (
'label' => 'Person Four',
'value' => 'personfour'
// Add More People Here
),
)
)
);
我希望这个帖子类型填充复选框组,每次添加新人时,复选框组都会更新以包含它们作为选项。
(然后我必须弄清楚如何在single.php上显示信息,但一次只能有一件事。)
任何帮助都会受到极大的关注。谢谢!
答案 0 :(得分:0)
你非常接近。最简单的方法是将选项存储在变量中,执行循环,然后执行其余操作。这应该让你开始:
///store options
$options = array();
$args = array(
'post_type' => 'featured-people',
'posts_per_page' => -1
);
$query = new WP_Query( $args );
//loop query
while ($query->have_posts()) : $query->the_post();
//get_the_title returns the post title
//bracket notation stores it as the array key
$options[get_the_title()] => array (
'label' => get_the_title(),
//get post meta's last parameter decides if it is a string
//might need to play with this part a bit
'value' => get_post_meta(get_the_ID(), 'custom_meta_box' true)
);
endwhile;
$custom_meta_fields = array(
array (
'label' => '',
'desc' => '',
'id' => $prefix.'checkbox_group',
'type' => 'checkbox_group',
'options' => $options //reference our previous array
)
);
修改强>
如果你想让你想做逻辑“内联”,你可以在技术上用call_user_func
创建一个自调用函数,尽管它有点奇怪的模式:
$custom_meta_fields = array(
array (
'label' => '',
'desc' => '',
'id' => $prefix.'checkbox_group',
'type' => 'checkbox_group',
'options' => call_user_func(function(){
///store options
$options = array();
$args = array(
'post_type' => 'featured-people',
'posts_per_page' => -1
);
$query = new WP_Query( $args );
//loop query
while ($query->have_posts()) : $query->the_post();
$options[get_the_title()] => array (
'label' => get_the_title(),
'value' => get_post_meta(get_the_ID(), 'custom_meta_box' true)
);
endwhile;
return $options;
})
)
);