Type de contenu personnalisé absent de l'éditeur en masse : la solution
Un type de contenu personnalisé qui n'apparaît pas dans l'éditeur en masse est presque toujours un type que son extension a enregistré comme non public. WOLF ne remplit sa liste déroulante de types de contenu qu'avec les types publics : les articles et les pages y figurent, les médias aussi, mais pas les groupes de cours, les réservations ou les éléments de menu d'une extension, alors que celle-ci leur donne leur propre écran de liste dans wp-admin. Un seul filtre suffit à les ajouter. Voici pourquoi cela se produit, quel code utiliser, ce qu'il modifie et comment faire entrer les champs du nouveau type dans le tableau.
Pourquoi un type de contenu personnalisé n'apparaît pas dans l'éditeur en masse
Chaque type de contenu est enregistré avec un ensemble de paramètres. Le paramètre public indique si les entrées sont destinées à être vues sur le site public : leurs propres URL, leurs archives, les résultats de recherche. Les extensions de réservation, de cours, de restauration, d'annuaire et de formulaires le mettent souvent à false pour leurs données internes, car une réservation ou un groupe de cours ne doit pas avoir de page publique. Les entrées conservent pourtant un écran d'administration, si bien que le type ressemble à n'importe quel autre type de contenu personnalisé dans wp-admin.
WOLF construit sa liste avec get_post_types(array('public' => true)). La même liste alimente le sélecteur de type de contenu du panneau d'outils de l'éditeur d'articles et les options de la colonne Type de contenu (Post type) ; un type non public manque donc aux deux endroits.
Pour vérifier que c'est bien votre cas, ouvrez l'écran de liste de l'extension. Si l'adresse se termine par edit.php?post_type=course_group (ou par un autre identifiant), les entrées sont des contenus de ce type et cet identifiant est ce dont WOLF a besoin. Saisir l'identifiant dans Types de contenu des éditeurs du site (Site editors post types) ne l'ajoute pas : ce réglage ne fait que restreindre la liste pour les utilisateurs non administrateurs, il ne l'étend jamais.
Afficher les types de contenu non publics avec wpbe_post_type_args
Les arguments de cette requête passent par le filtre wpbe_post_type_args. La modification la plus propre consiste à lister tous les types de contenu qui disposent d'un écran d'administration, publics ou non :
/*
* WOLF: list every post type that has an admin screen,
* including non-public types registered by plugins.
* Child theme functions.php or a code snippets plugin.
*/
add_filter('wpbe_post_type_args', function ($args) {
return array('show_ui' => true);
});
Rechargez la page de WOLF et ouvrez le sélecteur de type de contenu : le type manquant figure désormais dans la liste, à côté des articles, des pages et des médias. Quelques types WordPress dotés de leur propre écran d'édition, comme les compositions synchronisées (wp_block), apparaissent aussi ; il suffit de ne pas les sélectionner.
Si le type reste absent, son extension l'a enregistré sans l'écran d'administration standard et gère les entrées sur ses propres pages. Supprimez alors complètement la restriction :
/*
* WOLF: list all registered post types.
* Child theme functions.php or a code snippets plugin.
*/
add_filter('wpbe_post_type_args', function ($args) {
unset($args['public']);
return $args;
});
Cette version liste absolument tout, y compris les éléments internes de WordPress comme revision, nav_menu_item et customize_changeset. N'y touchez pas : ce ne sont pas des contenus, et des modifications en masse peuvent casser les menus ou les révisions.
Vous croiserez peut-être aussi l'extrait return array('public' => false);. Il fonctionne à l'inverse : il ne liste que les types non publics, de sorte que les articles et les pages disparaissent de la liste déroulante tant que vous ne le retirez pas. Ne l'utilisez que si vous ne modifiez rien d'autre dans WOLF.
Ce que le filtre modifie, et ce qu'il ne modifie pas
- Il ne modifie que la liste des types de contenu de la page WOLF. Le type de contenu lui-même reste intact : il ne devient pas public, n'obtient pas d'URL côté public et n'apparaît ni dans les résultats de recherche ni dans les plans de site.
- WOLF lit le filtre tard dans le hook
init; le fichier functions.php du thème actif (ou du thème enfant) et les extensions d'extraits de code fonctionnent donc tous deux. - La liste élargie sert également à la colonne Type de contenu (Post type), qui permet de déplacer un contenu vers un autre type. Ne déplacez pas de contenu vers un type que vous n'avez ajouté que pour l'édition.
Ajouter les champs du nouveau type de contenu comme colonnes
Le type de contenu d'une extension est surtout constitué de champs meta : dates, prix, capacités, réglages. Ils ne deviennent des colonnes que si vous les ajoutez.
- Sélectionnez le nouveau type dans le sélecteur de type de contenu de l'éditeur d'articles.
- Dans wp-admin, ouvrez une entrée de ce type dont tous les champs sont remplis et notez son ID (le nombre qui suit
post=dans l'adresse). - Dans l'onglet Champs personnalisés (Meta Fields), saisissez l'ID sous Récupérer les clés meta d'un contenu par son ID (Get meta keys from any post by its ID) et cliquez sur Récupérer (Get). WOLF liste toutes les clés meta enregistrées pour cette entrée.
- Supprimez les clés dont vous n'avez pas besoin, donnez aux autres des titres lisibles (le titre devient l'en-tête de la colonne), puis choisissez l'affichage et le type de chacune : nombre (number) pour les valeurs numériques, case à cocher (checkbox) pour les valeurs 1/0, tableau (array) pour les données sérialisées. Cliquez sur Enregistrer les champs meta (Save meta fields).
- Dans l'onglet Réglages (Settings), saisissez les titres dans la recherche de colonnes (columns finder), activez les colonnes, faites-les glisser dans l'ordre voulu et cliquez sur Enregistrer tous les réglages (Save all settings).
Si l'option Séparer les colonnes et les métadonnées par type de contenu (Separate columns and meta for post types) est sur Oui (Yes) dans les réglages généraux, chaque type de contenu possède sa propre liste de champs meta et son propre jeu de colonnes. Sélectionnez d'abord le type, puis ajoutez ses champs meta ; sinon ils sont rattachés au type qui était sélectionné auparavant.
La documentation des champs personnalisés (Meta Fields) explique les affichages et les types, et la page sur la modification en masse des métadonnées sérialisées traite des champs qui stockent des tableaux. Le filtrage et la modification en masse fonctionnent ensuite comme pour tout autre type, comme l'explique la page sur la modification en masse des types de contenu personnalisés.
Les éditeurs et les autres utilisateurs non administrateurs ne le voient toujours pas
Les utilisateurs qui ne sont pas administrateurs n'obtiennent que les types de contenu listés dans Réglages (Settings) → Types de contenu des éditeurs du site (Site editors post types). Ajoutez-y l'identifiant, séparé par des virgules et sans espaces, par exemple post,page,course_group, puis cliquez sur Enregistrer tous les réglages (Save all settings). Ce réglage ne peut choisir que dans la liste produite par le filtre : le filtre reste donc nécessaire pour un type non public. Si un éditeur voit le message No any post type permitted to edit for site editors, lisez l'article expliquant comment WOLF décide quels types de contenu un utilisateur peut modifier.
Si le type de contenu n'apparaît toujours pas
- Le code ne s'exécute pas. L'extrait est désactivé, ou il se trouve dans le fichier functions.php d'un thème qui n'est pas actif (par exemple le thème parent alors qu'un thème enfant est actif).
- Les entrées ne sont pas des contenus WordPress. Si l'écran de liste de l'extension est
admin.php?page=…plutôt queedit.php?post_type=…, l'extension conserve souvent ses enregistrements dans ses propres tables de base de données. Ces enregistrements ne sont pas des contenus, et aucun éditeur de contenus ne peut les lister. - Le type est listé, mais le tableau continue d'afficher des articles. WOLF rebascule le type de contenu lorsqu'il considère votre compte comme celui d'un éditeur du site, ce qui arrive aussi aux administrateurs dont les rôles ont été modifiés par une extension de gestion des rôles. L'article sur les éditeurs du site, lié plus haut, montre comment vérifier le compte.
Si le type est bien enregistré comme type de contenu et n'apparaît toujours pas alors que le second extrait est actif, ouvrez un sujet sur le forum d'assistance de WOLF en indiquant l'identifiant du type et l'extension qui l'enregistre.