Speichern Sie Meta-Box-Daten aus der ausgewählten Dropdown-Liste

Lesezeit: 3 Minuten

Benutzer-Avatar
ausgeflippt

Ich versuche, einige Daten in einer WordPress-Datenbank aus einer Metabox zu speichern.

Ich habe eine Dropdown-Liste, um einige Optionen auszuwählen, und ich möchte die ausgewählte Option dank der Metabox in der Datenbank speichern.

Allerdings habe ich einige Schwierigkeiten mit der Speicherfunktion in 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);
}

?>

Wie bekomme ich den ausgewählten Wert und speichere ihn mit update_post_meta()?

Benutzer-Avatar
Jean Paul

Hier ist der Code, den ich getestet habe und der funktioniert:

<?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
}

  • Vielen Dank für Ihre Antwort. Aber es funktioniert nicht … Wert wird nicht gespeichert und Auswahlliste nicht aktualisiert …

    – verrückt

    19. Juli 2013 um 22:28 Uhr

  • Wenn du print_r($_POST) was bekommst du?

    – Jean Paul

    19. Juli 2013 um 22:39 Uhr

  • Nichts, ein leeres Array … Ich verstehe wirklich nicht mit Ihrem Code, wie er etwas speichern kann …

    – verrückt

    19. Juli 2013 um 22:43 Uhr


  • Ich habe ein UPDATE hinzugefügt – ich habe vergessen, den Wert von $_POST zu erfassen. Ich teste es gerade, bin gleich wieder da.

    – Jean Paul

    19. Juli 2013 um 22:54 Uhr

  • Bitte überprüfen Sie den letzten HINWEIS, den ich unten hinzugefügt habe. Werde gleich wiederkommen, wenn ich den Code teste.

    – Jean Paul

    19. Juli 2013 um 23:02 Uhr

1373810cookie-checkSpeichern Sie Meta-Box-Daten aus der ausgewählten Dropdown-Liste

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy