我需要在我的CMB2 WordPress插件的下拉选项中添加特定类型的帖子。我已经在我的代码中找到了我的字段生成的位置;但是,我看到taxonomies
被用作过滤器,但我需要一个帖子post_type
。
使用分类法工作
$cmb_events->add_field( array (
'name' => __('Catégorie d\'événement','aqmat'),
'id' => $prefix . 'categorie',
'type' => 'taxonomy_select',
'taxonomy' => 'aqmat_categorie_evenement'
));
我想我会查询我的帖子,只获取我想要的内容,并使用逻辑作为taxonomy
字段将其添加到下拉列表中
我尝试获取帖子类型
// Get posts in desired category
$posts = array();
$args = array(
'post_type' => 'post_type_i_want',
'orderby' => 'id',
'posts_per_page' => -1
);
$getPosts = get_posts($args);
foreach($getPosts as $post) {
setup_postdata($post);
// Yes, I am aware I would *technically* have several times the same value
// Not getting there yet, so not an issue for me right now
// Besides, my category currently has but 1 post
array_push($getPosts, array(
'standard' => __( 'Option value', 'cmb2' )
));
}
// Add field
$cmb_events->add_field( array (
'name' => __('Label','cmb2'),
'id' => $prefix . 'enseignant',
'type' => 'taxonomy_select',
'options' => $teamMembers
));
但是,我没有错误,我的下拉列表中没有值。我似乎无法在官方Documentation中查询帖子,所以我对这个问题的看法非常空洞。有什么建议吗?
I have posted an answer使用Advanced Custom Fields。
Another answer提供了指向正确页面的链接。
答案 0 :(得分:1)
似乎您正在为选项分配$ teamMembers,但它没有定义,也没有分配任何值。
// Get posts in desired category
$posts = array();
$args = array(
'post_type' => 'post_type_i_want',
'orderby' => 'id',
'posts_per_page' => -1
);
$getPosts = get_posts($args);
foreach($getPosts as $post) {
setup_postdata($post);
// Yes, I am aware I would *technically* have several times the same value
// Not getting there yet, so not an issue for me right now
// Besides, my category currently has but 1 post
array_push($posts, array(
'standard' => __( 'Option value', 'cmb2' )
));
}
// Add field
$cmb_events->add_field( array (
'name' => __('Label','cmb2'),
'id' => $prefix . 'enseignant',
'type' => 'taxonomy_select',
'options' => $posts
));
试试这段代码,希望你能得到选项值
答案 1 :(得分:1)
如文档中所述:
当你需要将一个帖子与另一个帖子联系起来时,这就派上用场了。
与上面的条款字段一样,我们会将一系列帖子传递给select
字段类型。首先,我们将创建一个函数来拉回一系列后期选项:
/**
* Gets a number of posts and displays them as options
* @param array $query_args Optional. Overrides defaults.
* @return array An array of options that matches the CMB2 options array
*/
function cmb2_get_post_options( $query_args ) {
$args = wp_parse_args( $query_args, array(
'post_type' => 'post',
'numberposts' => 10,
) );
$posts = get_posts( $args );
$post_options = array();
if ( $posts ) {
foreach ( $posts as $post ) {
$post_options[ $post->ID ] = $post->post_title;
}
}
return $post_options;
}
/**
* Gets 5 posts for your_post_type and displays them as options
* @return array An array of options that matches the CMB2 options array
*/
function cmb2_get_your_post_type_post_options() {
return cmb2_get_post_options( array( 'post_type' => 'your_post_type', 'numberposts' => 5 ) );
}
然后,在创建字段时,我们会添加multicheck
类型,并使用cmb2_get_your_post_type_post_options
作为options_cb
字段参数的回调函数。以这种方式使用回调可确保查询仅在调用字段时发生(而不是在每次页面加载时)。
$cmb_demo->add_field( array(
'name' => __( 'Select your_post_type Posts', 'cmb2' ),
'desc' => __( 'field description (optional)', 'cmb2' ),
'id' => $prefix . 'post_multicheckbox',
'type' => 'multicheck',
'options_cb' => 'cmb2_get_your_post_type_post_options',
) );
或者 ,您也可以使用multicheck
或radio
字段类型。
如果您正在寻找类似的解决方案来保存term_id(或term_ids),read about it on the Tips & Tricks page.
答案 2 :(得分:0)
啊!最后!我找到了一种绕过自定义编程的方法 - 我已经设置了Advanced Custom Fields并添加了一个" post_object"键入我将我的类别设置为我想要的帖子类型。
但是,我会给bonus points to Mohamed Nizar他的回答,指出$ teamMembers没有被定义,从而允许正确的查询结果。