Crear un menú desplegable de Tipos de Entradas Personalizadas en un Meta Box
¿Es posible llenar un meta box con una lista desplegable de tipos de entradas personalizadas? Planeo crear una plantilla para un cliente que le permita crear una nueva página en el escritorio y luego seleccionar un tipo de entrada personalizada desde el meta box de CPT para elegir qué entradas se mostrarán en dicha página.
Actualización: Esto es lo que he logrado hasta ahora. El cuadro de tipos de entradas no está devolviendo el valor después de guardar. Cualquier ayuda sería apreciada.
add_action( 'add_meta_boxes', 'cd_meta_box_add' );
function cd_meta_box_add()
{
add_meta_box( 'my-meta-box-id', 'Mi Primer 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">Tipo de entrada: </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' ); ?>>Rojo</option>
<option value="blue" <?php selected( $selected, 'blue' ); ?>>Azul</option>
</select>
</p>
<?php
}
add_action( 'save_post', 'cd_meta_box_save' );
function cd_meta_box_save( $post_id )
{
// Salir si se está haciendo un guardado automático
if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
// Si nuestro nonce no está ahí o no podemos verificarlo, salir
if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'my_meta_box_nonce' ) ) return;
// Si el usuario actual no puede editar este post, salir
if( !current_user_can( 'edit_post' ) ) return;
// ahora podemos guardar los datos
$allowed = array(
'a' => array( // permitir solo etiquetas a
'href' => array() // y esos anchors solo pueden tener atributo href
)
);
// Probablemente sea buena idea asegurarse de que tus datos están establecidos
if( isset( $_POST['my_meta_box_select'] ) )
update_post_meta( $post_id, 'my_meta_box_select', esc_attr( $_POST['my_meta_box_select'] ) );
}

Por supuesto que es posible.
A continuación se muestra el código que mostrará los tipos de entradas registrados:
function my_meta_box_add() {
add_meta_box( 'my-meta-box-id', 'Mi 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">Tipo de entrada: </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
}
Por supuesto, debes encargarte de guardar este valor, verificar nonces, y demás.

¡Gracias por esa información! Debería ponerme en el camino correcto. Después de configurarlo, publicaré el resultado aquí.
