Guarde los datos del metabox de la lista desplegable seleccionada

3 minutos de lectura

avatar de usuario
raro

Estoy tratando de guardar algunos datos en la base de datos de WordPress desde un cuadro meta.

Tengo una lista desplegable para seleccionar algunas opciones y quiero guardar la opción seleccionada en la base de datos gracias al cuadro meta.

Sin embargo, tengo algunas dificultades con la función de guardar en PHP:

<?php

function add_admin_menu_class_meta_box() {
    $pages = array('post', 'portfolio');
    foreach( $pages as $page ) {
        add_meta_box('custom_element_grid_class','Element grid size', 'custom_element_grid_class_meta_box', $page, 'side', 'high');
    }
}
add_action( 'admin_menu', 'add_admin_menu_class_meta_box' );

function custom_element_grid_class_meta_box(){

    ?>

    <label>Choose the size of the element :  </label>

    <select name="custom_element_grid_class" id="custom_element_grid_class">
      <option value="normal" <?php selected( $meta_element_class, 'normal' ); ?>>normal</option>
      <option value="square" <?php selected( $meta_element_class, 'square' ); ?>>square</option>
      <option value="wide" <?php selected( $meta_element_class, 'wide' ); ?>>wide</option>
      <option value="tall" <?php selected( $meta_element_class, 'tall' ); ?>>tall</option>
    </select>


    <?php
}

add_action('save_post', 'save_custom_element_grid_class');
function save_custom_element_grid_class(){

global $post;

if(!isset($_POST["custom_element_grid_class"])):
    return $post;
    endif;
    update_post_meta($post->ID, 'custom_element_grid_class', $meta_element_class);
}

?>

¿Cómo puedo obtener el valor seleccionado y guardarlo con update_post_meta()?

avatar de usuario
Juan Pablo

Aquí está el código que probé y funciona:

<?php
/**
* Plugin Name: Metabox test
*
*/

add_action( 'add_meta_boxes', 'so_custom_meta_box' );

function so_custom_meta_box($post){
    add_meta_box('so_meta_box', 'Custom Box', 'custom_element_grid_class_meta_box', $post->post_type, 'normal' , 'high');
}

add_action('save_post', 'so_save_metabox');

function so_save_metabox(){ 
    global $post;
    if(isset($_POST["custom_element_grid_class"])){
         //UPDATE: 
        $meta_element_class = $_POST['custom_element_grid_class'];
        //END OF UPDATE

        update_post_meta($post->ID, 'custom_element_grid_class_meta_box', $meta_element_class);
        //print_r($_POST);
    }
}

function custom_element_grid_class_meta_box($post){
    $meta_element_class = get_post_meta($post->ID, 'custom_element_grid_class_meta_box', true); //true ensures you get just one value instead of an array
    ?>   
    <label>Choose the size of the element :  </label>

    <select name="custom_element_grid_class" id="custom_element_grid_class">
      <option value="normal" <?php selected( $meta_element_class, 'normal' ); ?>>normal</option>
      <option value="square" <?php selected( $meta_element_class, 'square' ); ?>>square</option>
      <option value="wide" <?php selected( $meta_element_class, 'wide' ); ?>>wide</option>
      <option value="tall" <?php selected( $meta_element_class, 'tall' ); ?>>tall</option>
    </select>
    <?php
}

  • Gracias por su respuesta. Pero no funciona… el valor no se guarda y la lista de selección no se actualiza…

    – raro

    19 de julio de 2013 a las 22:28

  • Cuando usted print_r($_POST) ¿qué sacas?

    – Juan Pablo

    19 de julio de 2013 a las 22:39

  • Nada, una matriz vacía… Realmente no entiendo con tu código cómo puede guardar algo…

    – raro

    19 de julio de 2013 a las 22:43


  • He agregado una ACTUALIZACIÓN: olvidé capturar el valor de $_POST. Lo estoy probando ahora mismo, vuelvo en un momento.

    – Juan Pablo

    19 de julio de 2013 a las 22:54

  • Por favor revise la última NOTA que he agregado en la parte inferior. Volveré cuando pruebe el código en un momento.

    – Juan Pablo

    19 de julio de 2013 a las 23:02

¿Ha sido útil esta solución?