是否可以使用自定义帖子类型的下拉列表填充元框?我计划尝试为客户端创建一个模板,允许他们在仪表板中创建一个新页面,然后从CPT元框中选择一个自定义帖子类型,以选择在所述页面上显示的帖子。
更新:这是我目前掌握的最新情况。保存后,“post types”框不会返回值。任何帮助都将不胜感激。
add_action( \'add_meta_boxes\', \'cd_meta_box_add\' );
function cd_meta_box_add()
{
add_meta_box( \'my-meta-box-id\', \'My First Meta Box\', \'cd_meta_box_cb\', \'page\', \'normal\', \'high\' );
}
function cd_meta_box_cb( $post )
{
$values = get_post_custom( $post->ID );
$selected = isset( $values[\'my_meta_box_select\'] ) ? esc_attr( $values[\'my_meta_box_select\'][0] ) : \'\';
wp_nonce_field( \'my_meta_box_nonce\', \'meta_box_nonce\' );
?>
<p>
<label for="my_meta_box_select">Post type: </label>
<select name="my_meta_box_select" id="my_meta_box_select">
<?php $post_types=get_post_types(\'\', \'objects\'); foreach ($post_types as $post_type): ?>
<option value="<?php echo esc_attr($post_type->name); selected ?>"><?php echo esc_html($post_type->label); selected ?></option>
<?php endforeach; ?>
</select>
</p>
<p>
<label for="my_meta_box_select">Color</label>
<select name="my_meta_box_select" id="my_meta_box_select">
<option value="red" <?php selected( $selected, \'red\' ); ?>>Red</option>
<option value="blue" <?php selected( $selected, \'blue\' ); ?>>Blue</option>
</select>
</p>
<?php
}
add_action( \'save_post\', \'cd_meta_box_save\' );
function cd_meta_box_save( $post_id )
{
// Bail if we\'re doing an auto save
if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;
// if our nonce isn\'t there, or we can\'t verify it, bail
if( !isset( $_POST[\'meta_box_nonce\'] ) || !wp_verify_nonce( $_POST[\'meta_box_nonce\'], \'my_meta_box_nonce\' ) ) return;
// if our current user can\'t edit this post, bail
if( !current_user_can( \'edit_post\' ) ) return;
// now we can actually save the data
$allowed = array(
\'a\' => array( // on allow a tags
\'href\' => array() // and those anchords can only have href attribute
)
);
// Probably a good idea to make sure your data is set
if( isset( $_POST[\'my_meta_box_select\'] ) )
update_post_meta( $post_id, \'my_meta_box_select\', esc_attr( $_POST[\'my_meta_box_select\'] ) );
}
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成
当然这是可能的。
下面是显示注册帖子类型的代码:
function my_meta_box_add() {
add_meta_box( \'my-meta-box-id\', \'MY meta\', \'my_meta_box\', \'page\', \'normal\', \'high\' );
} add_action( \'add_meta_boxes\', \'my_meta_box_add\' );
function my_meta_box( $post ) {
?>
<p>
<label for="my_meta_box_post_type">Post type: </label>
<select name=\'my_meta_box_post_type\' id=\'my_meta_box_post_type\'>
<?php $post_types=get_post_types(\'\', \'objects\'); foreach ($post_types as $post_type): ?>
<option value="<?php echo esc_attr($post_type->name); ?>"><?php echo esc_html($post_type->name); ?></option>
<?php endforeach; ?>
</select>
</p>
<?php
}
当然,您必须注意保存此值、检查nonce等。