sanitize_post_field( string $field, mixed $value, int $post_id, string $context = 'display' )
Nettoie le champ d'un poste basé sur le contexte.
Paramètres
$field(string)requisLe nom du champ d'un objet Post.
$value(mixed)requisLa valeur du champ d'un objet Post.
$post_id(int)requisId du poste.
$context(string)optionnelDe quelle façon nettoyer le champ. Accepte 'raw', 'edit', 'db', 'display', 'attribute' ou 'js'.
Valeur par défaut : 'display'
Description / Informations supplémentaires
Les contextes 'attribute' et 'js' agissent comme 'display' quand ils appellent des filtres.
Retourne
(string) Valeur nettoyée.
Déclaration et structure de la fonction sanitize_post_field()
sanitize_post_field() est déclarée dans le fichier wp-includes/post.php à la ligne 2866 :
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 ( str_contains( $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.
* Accepts 'raw', 'edit', 'db', 'display',
* 'attribute', or 'js'. Default 'display'.
*/
$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 );
}
}
// Restore the type for integer fields after esc_attr().
if ( in_array( $field, $int_fields, true ) ) {
$value = (int) $value;
}
return $value;
}
Fonctions utilisées 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).
Hooks utilisés par sanitize_post_field()
edit_fieldFiltre la valeur d'un champ de poste spécifique destiné à être édité.
field_no_prefix_edit_preFiltre la valeur d'un champ de poste spécifique destiné à être édité.
pre_fieldFiltre la valeur d'un champ de poste spécifique avant d'être sauvegardée.
field_no_prefix_save_preFiltre la valeur d'un champ de poste spécifique avant d'être sauvegardée.
field_preFiltre la valeur d'un champ de poste spécifique avant d'être sauvegardée.
fieldFiltre la valeur d'un champ de poste spécifique destiné à être affiché.
Où est utilisée la fonction sanitize_post_field()
dans le CMS WordPress
Exemples
$post = get_post( 35 );
$post_title = sanitize_post_field( 'post_title', $post->post_title, $post->ID, 'display' );
echo $post_title;
$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