Crear un menú desplegable de Tipos de Entradas Personalizadas en un Meta Box

12 jul 2013, 16:12:28
Vistas: 18.9K
Votos: 3

¿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'] ) );

   }
1
Comentarios

No es confuso, pero falta investigación. Buscar aquí y consultar el Codex puede darte la solución. Al menos, un punto de partida.

brasofilo brasofilo
12 jul 2013 16:31:05
Todas las respuestas a la pregunta 1
2

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.

12 jul 2013 16:34:19
Comentarios

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

mtuttle mtuttle
12 jul 2013 18:50:38

Vale, hasta ahora he llegado a esto. Creo que todavía puedo estar un poco desviado ya que el menú desplegable "Select Post Type" muestra la opción incorrecta después de guardar. Aquí está mi código:

mtuttle mtuttle
12 jul 2013 22:30:58