Description

Les contextes 'attribute' et 'js' agissent comme 'display' quand ils appellent des filtres.

Paramètres

$field

(string) (Requis) Le nom du champ d'un objet Post.

$value

(mixed) (Requis) La valeur du champ d'un objet Post.

$post_id

(int) (Requis) Id du poste.

$context

(string) (Optionnel) De quelle façon nettoyer le champ. Accepte 'raw', 'edit', 'db', 'display', 'attribute' ou 'js'.

Valeur par défaut : 'display'

Retourne

(string) Valeur nettoyée.

Structure de la fonction sanitize_post_field()

Définie dans le fichier wp-includes/post.php à la ligne 2470 :

function sanitize_post_field( $field, $value, $post_id, $context = 'display' ) {
    $int_fields = array( 'ID', 'post_parent', 'menu_order' );
    if ( in_array( $field, $int_fields, true ) ) {
        $value = (int) $value;
    }

    // Fields which contain arrays of integers.
    $array_int_fields = array( 'ancestors' );
    if ( in_array( $field, $array_int_fields, true ) ) {
        $value = array_map( 'absint', $value );
        return $value;
    }

    if ( 'raw' === $context ) {
        return $value;
    }

    $prefixed = false;
    if ( false !== strpos( $field, 'post_' ) ) {
        $prefixed        = true;
        $field_no_prefix = str_replace( 'post_', '', $field );
    }

    if ( 'edit' === $context ) {
        $format_to_edit = array( 'post_content', 'post_excerpt', 'post_title', 'post_password' );

        if ( $prefixed ) {

            /**
             * Filters the value of a specific post field to edit.
             *
             * The dynamic portion of the hook name, `$field`, refers to the post
             * field name.
             *
             * @since 2.3.0
             *
             * @param mixed $value   Value of the post field.
             * @param int   $post_id Post ID.
             */
            $value = apply_filters( "edit_{$field}", $value, $post_id );

            /**
             * Filters the value of a specific post field to edit.
             *
             * The dynamic portion of the hook name, `$field_no_prefix`, refers to
             * the post field name.
             *
             * @since 2.3.0
             *
             * @param mixed $value   Value of the post field.
             * @param int   $post_id Post ID.
             */
            $value = apply_filters( "{$field_no_prefix}_edit_pre", $value, $post_id );
        } else {
            $value = apply_filters( "edit_post_{$field}", $value, $post_id );
        }

        if ( in_array( $field, $format_to_edit, true ) ) {
            if ( 'post_content' === $field ) {
                $value = format_to_edit( $value, user_can_richedit() );
            } else {
                $value = format_to_edit( $value );
            }
        } else {
            $value = esc_attr( $value );
        }
    } elseif ( 'db' === $context ) {
        if ( $prefixed ) {

            /**
             * Filters the value of a specific post field before saving.
             *
             * The dynamic portion of the hook name, `$field`, refers to the post
             * field name.
             *
             * @since 2.3.0
             *
             * @param mixed $value Value of the post field.
             */
            $value = apply_filters( "pre_{$field}", $value );

            /**
             * Filters the value of a specific field before saving.
             *
             * The dynamic portion of the hook name, `$field_no_prefix`, refers
             * to the post field name.
             *
             * @since 2.3.0
             *
             * @param mixed $value Value of the post field.
             */
            $value = apply_filters( "{$field_no_prefix}_save_pre", $value );
        } else {
            $value = apply_filters( "pre_post_{$field}", $value );

            /**
             * Filters the value of a specific post field before saving.
             *
             * The dynamic portion of the hook name, `$field`, refers to the post
             * field name.
             *
             * @since 2.3.0
             *
             * @param mixed $value Value of the post field.
             */
            $value = apply_filters( "{$field}_pre", $value );
        }
    } else {

        // Use display filters by default.
        if ( $prefixed ) {

            /**
             * Filters the value of a specific post field for display.
             *
             * The dynamic portion of the hook name, `$field`, refers to the post
             * field name.
             *
             * @since 2.3.0
             *
             * @param mixed  $value   Value of the prefixed post field.
             * @param int    $post_id Post ID.
             * @param string $context Context for how to sanitize the field. Possible
             *                        values include 'edit', 'display',
             *                        'attribute' and 'js'.
             */
            $value = apply_filters( "{$field}", $value, $post_id, $context );
        } else {
            $value = apply_filters( "post_{$field}", $value, $post_id, $context );
        }

        if ( 'attribute' === $context ) {
            $value = esc_attr( $value );
        } elseif ( 'js' === $context ) {
            $value = esc_js( $value );
        }
    }

    return $value;
}

Fonctions et Hooks utilisés par sanitize_post_field()

esc_attr()

Échappe les valeurs des attributs HTML.

esc_js()

Échappe les guillemets simples, le caractère spécial & et traite / enlève les fins de lignes.

format_to_edit()

Agit sur le texte destiné à être édité.

user_can_richedit()

Vérifie si l'utilisateur peut accéder à l'éditeur visuel.

apply_filters()

Appel les fonctions qui ont été attaché à un filtre (hook).

edit_{$field}

Filtre la valeur d'un champ de poste spécifique destiné à être édité.

{$field_no_prefix}_edit_pre

Filtre la valeur d'un champ de poste spécifique destiné à être édité.

pre_{$field}

Filtre la valeur d'un champ de poste spécifique avant d'être sauvegardée.

{$field_no_prefix}_save_pre

Filtre la valeur d'un champ de poste spécifique avant d'être sauvegardée.

{$field}_pre

Filtre la valeur d'un champ de poste spécifique avant d'être sauvegardée.

{$field}

Filtre la valeur d'un champ de poste spécifique destiné à être affiché.

Où trouver la fonction sanitize_post_field() dans le CMS Wordpress

Exemples

Nettoyer un titre de poste pour l'affichage :
$post = get_post( 35 );
$post_title = sanitize_post_field( 'post_title', $post->post_title, $post->ID, 'display' );
echo $post_title;
Nettoyer un titre de poste pour l'attribut value d'un input :
$post = get_post( 543 );
$post_title = sanitize_post_field( 'post_title', $post->post_title, $post->ID, 'attribute' );
echo '<input type="hidden" name="post-title" value="' . $post_title  . '">';

// Pas besoin d'utiliser la fonction esc_attr() dans ce cas précis.

Sources

Codex Wordpress : sanitize_post_field()

Autres fonctions dans le même fichier : wp-includes/post.php

Retour