web-dev-qa-db-fra.com

wordpress assainir tableau?

J'ai un formulaire de publication personnalisé qui envoie des données à une page qui utilise wp_insert_post pour créer une publication. Je peux facilement nettoyer la plupart des données, mais j'ai quelques problèmes avec mes balises, je les récupère dans un tableau:

$tags =  $_POST['tags'];

Avant d’utiliser ces balises en tant que tags_input, comment puis-je assainir avec succès tous les noms?

Merci!

5
FLX

Si quelqu'un est intéressé, je l'ai résolu comme ceci:

        $tags = $_POST['tags'];
        if (count($tags) > 5){
            echo 'Niet meer dan 5 tags';
            $stop = true;
        }

        if (is_array($tags)) {
            foreach ($tags as &$tag) {
                $tag = esc_attr($tag);
            }
            unset($tag );
        } else {
            $tags = esc_attr($tags);
        }
2
FLX

Voici un moyen de le faire avec PHP array map function:

// Good idea to make sure things are set before using them
$tags = isset( $_POST['tags'] ) ? (array) $_POST['tags'] : array();

// Any of the WordPress data sanitization functions can be used here
$tags = array_map( 'esc_attr', $tags );
16
chrisguitarguy

J'avais besoin d'un assainissement récursif, alors voici ma solution:

/**
 * Recursive sanitation for an array
 * 
 * @param $array
 *
 * @return mixed
 */
function recursive_sanitize_text_field($array) {
    foreach ( $array as $key => &$value ) {
        if ( is_array( $value ) ) {
            $value = recursive_sanitize_text_field($value);
        }
        else {
            $value = sanitize_text_field( $value );
        }
    }

    return $array;
}
0
Broshi

Vous pouvez utiliser cette fonction dans presque tous les cas.

/**
 * Recursive sanitation for text or array
 * 
 * @param $array_or_string (array|string)
 * @since  0.1
 * @return mixed
 */
function sanitize_text_or_array_field($array_or_string) {
    if( is_string($array_or_string) ){
        $array_or_string = sanitize_text_field($array_or_string);
    }elseif( is_array($array_or_string) ){
        foreach ( $array_or_string as $key => &$value ) {
            if ( is_array( $value ) ) {
                $value = sanitize_text_or_array_field($value);
            }
            else {
                $value = sanitize_text_field( $value );
            }
        }
    }

    return $array_or_string;
}
0
Lenin Zapata