在CMB2选项中添加帖子类别

时间:2016-09-27 15:46:02

标签: php wordpress

我需要在我的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

编辑#2

Another answer提供了指向正确页面的链接。

3 个答案:

答案 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)

维基上有一个演示。 https://github.com/WebDevStudios/CMB2/wiki/Adding-your-own-field-types#example-2-posts-or-other-post_type-dropdown-store-post_id

修改

如文档中所述:

当你需要将一个帖子与另一个帖子联系起来时,这就派上用场了。

与上面的条款字段一样,我们会将一系列帖子传递给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',
) );

或者 ,您也可以使用multicheckradio字段类型。

如果您正在寻找类似的解决方案来保存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没有被定义,从而允许正确的查询结果。