wake-up-neo.com

Wie werden Auswahlfeldwerte in Post-Meta bereinigt?

Ich habe ein Auswahlfeld im Post-Meta hinzugefügt. Hier ist der Code, und es funktioniert gut. Meine Frage ist, muss ich die Werte bereinigen, bevor ich das Post-Meta aktualisiere? Wenn ja, wie soll es gemacht werden?

So füge ich das Metafeld hinzu:

<?php $value = get_post_meta( $post->ID, 'my_options', true ); ?>
<select name="my_options">
    <option value="option1" <?php selected( $value, 'option1'); ?>><?php _e('Option 1', 'textdomain'); ?></option>
    <option value="option2" <?php selected( $value, 'option2'); ?>><?php _e('Option 2', 'textdomain'); ?></option>
</select>

und so aktualisiere ich den Wert:

if ( isset( $_POST['my_options'] )){
    update_post_meta( $post->ID, 'my_options', $_POST['my_options'] );  
}
4
qasir

Bei der Annahme von Benutzerdateneingaben denke ich, dass die Datenüberprüfung möglichst durchgeführt werden muss, nicht nur die Bereinigung. Beispielsweise können Sie eine Zahl, einen Bool-Wert, eine Textzeichenfolge (selbst wenn die Eingabe ein Auswahlfeld ist, kann sie einen Zeichenfolgenwert haben) usw. erwarten. Anschließend können Sie die Daten anhand der erwarteten Werte überprüfen: Ganzzahl, Float, Wahr/Falsch, E-Mail, URLs usw.

Lassen Sie uns mit Ihrer Selectbox gehen. Es gibt zwei Optionen mit den Werten "Option1" und "Option2". Beide sind also Zeichenfolgen und können mit sanitize_text_field bereinigt werden:

if ( isset( $_POST['my_options'] )){

    $value = sanitize_text_field( $_POST['my_options'] );

    update_post_meta( $post->ID, 'my_options', $value );  

}

Ein Benutzer kann den Wert der Formularauswahloptionen jedoch einfach über das Frontend ändern, sodass er das Formular bearbeiten und andere Werte als "Option1" oder "Option2" senden kann, die Sie in der Datenbank speichern. Da Sie genau wissen, wie hoch die erwarteten Werte sind, können Sie eine Datenbereinigung und Datenvalidierung durchführen. Zum Beispiel:

if ( isset( $_POST['my_options'] )){

   $valid_values = array(
                       'option1',
                       'option2',
   );

    $value = sanitize_text_field( $_POST['my_options'] );

    if( in_array( $value, $valid_values ) ) {

        update_post_meta( $post->ID, 'my_options', $value );

    }

}

Oder Sie können einen benutzerdefinierten Desinfektionsrückruf für die Option "my_options" definieren und sanitize_meta verwenden:

if ( isset( $_POST['my_options'] ) ){

        $value = sanitize_meta( 'my_options', $_POST['my_options'], 'post' )

        update_post_meta( $post->ID, 'my_options', $value );

}

Und definieren Sie den Santitization Callback:

add_filter( 'sanitize_post_meta_my_options', 'sanitize_my_options_meta' );

function sanitize_my_options_meta( $value ) {

   $value = sanitize_text_field( $value );

   $valid_values = array(
                       'option1',
                       'option2',
   );

   if( ! in_array( $value, $valid_values ) ) {

        wp_die( 'Invalid value, go back and try again.' );
    }

    return $value;
}
5
cybmeta

Sie können alle in Wordpress integrierten Hygienefunktionen verwenden (z. B. Sanitize_text_field ). Wenn Sie sich Sorgen machen, dass bestimmte Elemente in die Auswahloptionen eingefügt werden, können Sie alternativ mit der Funktion sanitize_meta eine eigene Hygienefunktion schreiben.

0