通过Metabox查询另一个CPT的自定义发布类型

时间:2014-03-08 作者:Marco

我提前道歉,我在发布这个问题之前搜索了一个答案,但没有看到,我看到了一些变化,但无法完全理解。

我有两种自定义帖子类型:建筑和公寓。我想通过metabox下拉列表为每个公寓分配一栋建筑。

这就是我的职能。php文件:

function get_myposttype_options( $query_args ) {

$args = wp_parse_args( $query_args, array(
    \'post_type\' => \'buildings\',
) );

$posts = get_posts( $args );

$post_options = array();
if ( $posts ) {
    foreach ( $posts as $post ) {
        $post_options[ $post->ID ] = $post->post_title;
    }
}

return $post_options;
}
这是我的Metbox

 $meta_boxes[] = array(
\'id\' => \'buildingdetails\',
\'title\' => \'Add to Building\',
\'pages\' => array( \'property\' ),
\'context\' => \'normal\',
\'priority\' => \'high\',

// List of meta fields
\'fields\' => array(

    array(
\'name\' => \'\',
\'id\' => $prefix . \'test_select\',
\'type\' => \'select\',
\'options\' => get_myposttype_options(),
    ),


)
);
Apartment with building metabox

任何帮助都将不胜感激。

1 个回复
SO网友:Tom J Nowell

您将希望通过官方API创建一个标准的metabox,如何做到这一点超出了这个答案,我将讨论的是您的下拉列表。

您需要保存的是建筑物的Post ID,因此类似于以下伪代码:

<?php
$current_building=....;
?>
<select name="....">
<?php
$query = new WP_Query( array( \'post_type\' => \'buildings\' ));
if ( $query->have_posts() ) {
    while( $query->have_posts() ) {
        $query->the_post();
        ?>
        <option value="<?php the_ID(); ?>" <?php selected( get_the_ID(), $current_building ); ?>><?php the_title(); ?></option>
        <?php
    }
}
?>
</select>
现在您已经对输入进行了排序,请将其视为metabox中的任何其他输入。长方体的保存和创建与正常情况相同

结束

相关推荐

以http://为前缀的Custom-Metaboxes-and-Fields Text_url字段

我正在使用Custom Metaboxes and Fields 代码很好。不过,我当然需要对URL字段进行清理,但内置的text\\u URL字段类型正在将“http://”添加到我的条目中。我知道它正在使用WPesc_url (cmb\\u Meta\\u box\\u types.php)和cmb\\u Meta\\u box\\u Sanitizeesc_url_raw()如何使此字段类型仅返回输入的值?