Wie setze ich Optionsfelder in einem benutzerdefinierten Meta-Feld, das aktiviert ist?

Lesezeit: 6 Minuten

Ich habe ein benutzerdefiniertes Meta-Feld erstellt, in dem Sie einen Wert aus einigen Optionsfeldern auswählen und in der post_meta-Tabelle in der WordPress-Datenbank speichern können. Mit folgendem Code speichere ich den Wert:

function save_value_of_my_custom_metabox ($post_id, $post){
    $post_id = get_the_ID();
    $new_meta_value = ( isset( $_POST['the_name_of_the_radio_buttons'] ) ? sanitize_html_class( $_POST['the_name_of_the_radio_buttons'] ) : '' );
    $meta_key = 'my_key';
    update_post_meta( $post_id, $meta_key, $new_meta_value );
}

Aber wenn der Beitrag erneut bearbeitet wird, möchte ich, dass das Optionsfeld mit dem aktuellen Wert zum Setzen aktiviert ist. Was ist der beste Weg, das zu tun? Hier ist die Funktion zum Anzeigen der Metabox:

function my_custom_meta_box( $object, $box ) {
    $post_id=get_the_ID();
    $key='my_key';
    $the_value_that_should_be_set_to_checked=get_post_meta( $post_id, $key);
    //$the_value_that_should_be_set_to_checked[0] returns the value as string
    ?>    
    <label for="my_custom_metabox"><?php _e( "Choose value:", 'choose_value' ); ?></label>
    <br />  
      <input type="radio" name="the_name_of_the_radio_buttons" value="value1">Value1<br>
      <input type="radio" name="the_name_of_the_radio_buttons" value="value2">Value2<br>
      <input type="radio" name="the_name_of_the_radio_buttons" value="value3">Value3<br>
      <input type="radio" name="the_name_of_the_radio_buttons" value="value4">Value4<br>

        <?php
}

Ich könnte so etwas schreiben if(isset($the_value_that_should_be_set_to_checked[0])=="value of that line") echo "checked='checked'"; in jeder Zeile, aber das erscheint mir nicht sehr elegant. Die Verwendung von Javascript ist in WordPress auch ziemlich kompliziert, da ich die Hooks verwenden müsste, das Skript in die Warteschlange stellen müsste und es sich nicht lohnt, die Eigenschaft „checked“ mit einer Zeile Javascript zu ändern. Was ist die beste Vorgehensweise dafür?

  • Geben Sie den Aktionshaken an, den Sie verwendet haben.

    – Bhumi Schah

    27. August 2014 um 8:32 Uhr

  • add_action( ‘load-post.php’, ‘my_custom_meta_box_setup’ ); add_action( ‘load-post-new.php’, ‘my_custom_meta_box_setup’ ); und innerhalb der Setup-Funktion: add_action( ‘add_meta_boxes’, ‘my_custom__meta_box’ ); und add_action( ‘save_post’, ‘save_value_of_my_custom_metabox’, 10, 2 );

    – Benutzer2718671

    27. August 2014 um 8:38 Uhr

Ich gehe davon aus, dass Sie versuchen, eine benutzerdefinierte Metabox für „Beiträge“ hinzuzufügen. Der folgende Code wird für Sie funktionieren. Auf dem Bildschirm „Neuen Beitrag hinzufügen“ oder „Beitrag bearbeiten“ werden Optionsfelder angezeigt. Bitte lesen Sie die Kommentare im Code. Es wird Ihnen helfen, den Code zu verstehen.

Sie können WordPress verwenden checked Funktion, um zu entscheiden, ob das Optionsfeld ausgewählt werden soll oder nicht.

Fühlen Sie sich frei zu fragen, wenn Sie irgendwelche Zweifel haben.

/**
 * Adds a box to the main column on the Post add/edit screens.
 */
function wdm_add_meta_box() {

        add_meta_box(
                'wdm_sectionid', 'Radio Buttons Meta Box', 'wdm_meta_box_callback', 'post'
        ); //you can change the 4th paramter i.e. post to custom post type name, if you want it for something else

}

add_action( 'add_meta_boxes', 'wdm_add_meta_box' );

/**
 * Prints the box content.
 * 
 * @param WP_Post $post The object for the current post/page.
 */
function wdm_meta_box_callback( $post ) {

        // Add an nonce field so we can check for it later.
        wp_nonce_field( 'wdm_meta_box', 'wdm_meta_box_nonce' );

        /*
         * Use get_post_meta() to retrieve an existing value
         * from the database and use the value for the form.
         */
        $value = get_post_meta( $post->ID, 'my_key', true ); //my_key is a meta_key. Change it to whatever you want

        ?>
        <label for="wdm_new_field"><?php _e( "Choose value:", 'choose_value' ); ?></label>
        <br />  
        <input type="radio" name="the_name_of_the_radio_buttons" value="value1" <?php checked( $value, 'value1' ); ?> >Value1<br>
        <input type="radio" name="the_name_of_the_radio_buttons" value="value2" <?php checked( $value, 'value2' ); ?> >Value2<br>
        <input type="radio" name="the_name_of_the_radio_buttons" value="value3" <?php checked( $value, 'value3' ); ?> >Value3<br>
        <input type="radio" name="the_name_of_the_radio_buttons" value="value4" <?php checked( $value, 'value4' ); ?> >Value4<br>

        <?php

}

/**
 * When the post is saved, saves our custom data.
 *
 * @param int $post_id The ID of the post being saved.
 */
function wdm_save_meta_box_data( $post_id ) {

        /*
         * We need to verify this came from our screen and with proper authorization,
         * because the save_post action can be triggered at other times.
         */

        // Check if our nonce is set.
        if ( !isset( $_POST['wdm_meta_box_nonce'] ) ) {
                return;
        }

        // Verify that the nonce is valid.
        if ( !wp_verify_nonce( $_POST['wdm_meta_box_nonce'], 'wdm_meta_box' ) ) {
                return;
        }

        // If this is an autosave, our form has not been submitted, so we don't want to do anything.
        if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
                return;
        }

        // Check the user's permissions.
        if ( !current_user_can( 'edit_post', $post_id ) ) {
                return;
        }


        // Sanitize user input.
        $new_meta_value = ( isset( $_POST['the_name_of_the_radio_buttons'] ) ? sanitize_html_class( $_POST['the_name_of_the_radio_buttons'] ) : '' );

        // Update the meta field in the database.
        update_post_meta( $post_id, 'my_key', $new_meta_value );

}

add_action( 'save_post', 'wdm_save_meta_box_data' );

  • Danke sehr! Ich hatte gehofft zu vermeiden, es in jeder Zeile zu überprüfen, aber ich denke, das ist einfach nicht möglich. Aber ich verwende WPs selected() für dynamisch hinzugefügte Zeilen und daher ist es großartig. Und danke für die Kommentare zu den Sicherheitsproblemen von wp nonce. Das muss ich noch integrieren.

    – Benutzer2718671

    27. August 2014 um 11:11 Uhr

Wie setze ich Optionsfelder in einem benutzerdefinierten Meta Feld das aktiviert
Benutzer2718671

Ich habe eine funktionierende Lösung gefunden, aber ich denke, so sollten Sie es nicht machen. Immer noch offen für bessere Lösungen 😉

Dieser Code wurde unter dem PHP-Code von oben hinzugefügt:

if(isset($$the_value_that_should_be_set_to_checked[0])){
     $the_value_that_should_be_set_to_checked= $the_value_that_should_be_set_to_checked[0]; 
} 
else{
     $the_value_that_should_be_set_to_checked='';
}

Hier ist der Code, den ich unter den Radiobuttons hinzugefügt habe:

<script type="text/javascript">
    jQuery(document).ready(function () {            
       var checked_value= <?php echo json_encode($the_value_that_should_be_set_to_checked);?>;
       if(checked_value!==''){                    
          jQuery("input[name=the_name_of_the_radio_buttons][value="+checked_value+"]").attr('checked', 'checked');                    
       }
    });
</script>

PS: Der $-Selektor wird nicht funktionieren, aber das hängt vielleicht von dem Thema ab, das Sie verwenden.

852280cookie-checkWie setze ich Optionsfelder in einem benutzerdefinierten Meta-Feld, das aktiviert ist?

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

Privacy policy