Astuce : Paramètres de Custom Post Type

J’inaugure mon blog avec une petite astuce que j’ai testé ce matin.
Dans un snippet récupéré sur le web, le code utilisait la fonction get_post_types
, qui permet de récupérer l’ensemble des paramètres des CPT (Custom Post Type) créés.
[pastacode provider= »manual » lang= »php » message= »Exemple d’utilisation de get_post_types »]
<?php
...
$post_types = get_post_types( array( '_builtin' => false ), 'objects' );
foreach ( $post_types as $post_type ) {
....
?>
[/pastacode]
Dans la boucle foreach
nous voulons utiliser plusieurs paramètres du « custom post type » (attribut perso de l’objet), seulement voilà, ceux ci ne sont pas stockés dans le « custom post type » de wordpress, il faut donc appeler importer le fichier de fonction ou la classe puis appeler une fontion get_
approprié.
L’astuce est d’ajouter tout simplement notre attribut directement dans l’objet par défaut de WordPress. Lors de l’appel de la fonction register_post_type
, on ajoute la pair « clé / valeur » de notre choix. Içi nous allons mettre 'attributPerso' => 'company'
.
[pastacode lang= »php » message= »Enregistrement du CPT » highlight= »5″ provider= »manual »]
<?php
...
$args = array(
/* config personnel */
'attributPerso' => 'company',
'labels' => $labels,
'description' => __( 'Companies management' ),
'public' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'show_in_menu' => true,
'show_in_admin_bar' => true,
'menu_position' => 100,
'menu_icon' => "",
'hierarchical' => false,
'supports' => false,
'register_meta_box_cb' => array($this, 'ptw_company_meta_boxes'),
'has_archive' => true,
'rewrite' => $rewrite,
'query_var' => true,
'can_export' => true,
);
register_post_type( 'company', $args );
...
?>
[/pastacode]
Nous pouvons donc par la suite l’utiliser pour ce que l’on veut.
[pastacode lang= »php » message= »Utilisation bidon du paramètre » highlight= »7-8″ provider= »manual »]
<?php
...
$post_types = get_post_types( array( '_builtin' => false ), 'objects' );
foreach ( $post_types as $post_type ) {
if ( isset($post_type->attributPerso) ){
echo '<div class="' . $post_type->attributPerso. '">' . $post_type->name . '</div>';
}
else{
echo '<div class="cpt">' . $post_type->name . '</div>';
}
}
....
?>
[/pastacode]