Tout savoir sur WordPress
Tutoriel WordPress

Désactiver les champs personnalisés de WordPress

Cette astuce permet de désactiver les champs personnalités des articles, des pages.

Les champs personnalisés sur WordPress permettent d’ajouter des informations complémentaires à un article ou une page. Pour récupérer et afficher la valeur d’un champ personnalisé, vous devez utiliser la fonction get_post_meta().

Les champs personnalisés sur WordPress
Les champs personnalisés dans l'administration de WordPress

Dans certains cas, vous n’avez pas besoin de ces champs personnalisés. Il serait judicieux de les désactiver pour éviter à vos rédacteurs ou votre client d’ajouter des champs personnalisés inutiles..

Copier le code ci-dessous dans le fichier functions.php de votre thème pour désactiver les champs personnalisés :

[pastacode lang=”php” message=”” highlight=”” provider=”manual”]


function baw_remove_custom_field_meta_boxes() {
    remove_post_type_support( 'post','custom-fields' );
    remove_post_type_support( 'page','custom-fields' );
}
add_action('init','baw_remove_custom_field_meta_boxes');

[/pastacode]

Cet article a été mis à jour il y a 4394 jours - Il n'est peut être plus à jour !

Article écrit par Jonathan B.

Jonathan est le co-fondateur de WP Media, startup connue pour être l’auteur de WP Rocket et Imagify. Il est aussi co-organisateur du WordCamp Lyon et Paris.

4 Commentaires

  1. Bonjour !
    Cette astuce ne désactive pas les champs personnalisés comme
    indiqué, elle ne fait “que” empêcher les metabox des custom fields de s’afficher.
    Il vaudrait mieux les supprimer “vraiment” avec remove_post_type_support().
    Code php à coller dans functions.php:

    function remove_custom_field_meta_boxes() {
           remove_post_type_support( 'post','custom-fields' );
           remove_post_type_support( 'page','custom-fields' );
    }
    add_action('init','remove_custom_field_meta_boxes');
    

    Aussi ce code ne les désactive que pour post et page, pas pour vos types de posts persos.

  2. J’ai hésité entre les deux techniques, mais au risque de jouer avec les mots, le fait de ne plus pouvoir en ajouter, on peut dire que la fonction est “désactivé” ? =D

  3. Ne pas afficher != Désactiver.
    Dans ce cas là, autant ne rien mettre et décocher la box “Custom fields” dans les “options d’écran” dans le menu du haut. La box disparait, le fonctione est-elle désactivée ?
    Ton code empêche les box de s’écrire dans la page, mais le post supoprte-t-il les custom fields encore ou pas ?
    Si oui, alors on peut en ajouter.
    “Quand tu fermes les yeux, les choses existent encore”, c’est pareil, il ne suffit pas de cacher pour désactiver.
    D’ailleurs, cette façon de coder mène à des failles.
    Exemple :
    page.php et page-admin.php
    les 2 pages existent
    Pour empecher les visiteurs d’aller sur ma page admn, je ne mets pas de lien vers la page admin. La page admin est-elle restreinte aux visiteurs ? non
    Ou aussi je fais un lien sans texte ou un display:none, la page est-elle cachée ? non plus ;)
    Il faut donc bien différencier cacher|ne pas afficher et désactiver réellement, c’est à dire, supprime la fonction/callback de traitement de données envoyées.

    Je pense meme que tu peux faire le test suivant :
    1) ne mets pas ton code
    2) ouvre 2 oglets en edition sur un article
    3) mets ton code
    4) refresh l’onglet N°2
    4.5) la box a disparu
    5) retourne que l’onglet n°1 (ne refresh pas !)
    6) Ajoute un custom field.
    7) ton champ est ajouté …
    Et un hacker saura rajouter un champ sans faire tout ça ;) compte sur moi :p

  4. Je viens de fouiller le core et, oui le code fourni fait la m^m chose que le mien.
    MAIS, car il y a un MAIS tout de même.
    Imaginons que je fasse un plugin qui touche aux posts qui supportent les customs fields et dans mon plugin on peut en ajouter… Retirer la box ne retire pas le support !
    ps : et mon “truc” du double onglet n’est pas un bon, oui ça fonctionne, mais grace aux nonces qu’on a gardé, une fois les nonces disparus, on ne peut pas les deviner (c’est le but des nonces) ^^