wordpress очищает массив?


У меня есть пользовательская форма записи, которая отправляет данные на страницу, которая использует wp_insert_post для создания записи. Я могу легко очистить большинство данных, но у меня есть некоторые проблемы с моими тегами, которые я извлекаю в массиве:

$tags =  $_POST['tags'];

Прежде чем использовать эти теги в качестве tags_input, как я могу успешно очистить все имена?

Спасибо!

Author: FLX, 2011-08-02

4 answers

Вот способ сделать это с помощью функции PHP отображение массива:

// 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 );
 31
Author: chrisguitarguy, 2016-12-28 15:31:58

Мне нужна была рекурсивная очистка, поэтому вот мое решение:

/**
 * 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;
}
 4
Author: Broshi, 2017-02-05 09:14:46

Если кому-то интересно, я решил это так:

        $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);
        }
 3
Author: FLX, 2011-08-21 13:03:30

Вы можете использовать эту функцию практически во всех случаях.

/**
 * 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
Author: Lenin Zapata, 2017-02-09 20:24:45