Obtenir uniquement les types de publication basés sur le support

10

J'essaie de récupérer une liste comprenant les types de publication intégrés et personnalisés:

$post_types = get_post_types(array(
  'public' => TRUE,
), 'objects');

Ce qui précède fonctionne presque, mais je voudrais exclure% c_de% de cette liste, en ne renvoyant que les types de publication avec un support spécifique tel que attachment , editor et title . Est-ce possible?

    
posée Cyclonecode 15.01.2018 - 16:55

2 réponses

9

J'ai découvert que get_post_types_by_support() semblait être la solution pour obtenir le résultat souhaité:

$post_types = get_post_types_by_support(array('title', 'editor', 'thumbnail'));

Ce qui précède renverra post , page et tout type de message personnalisé prenant en charge title , editor et thumbnail .

Etant donné que cela retournera également des types de publications privées, nous pourrions parcourir la liste et vérifier si le type est visible sur le front-office. Cela peut être fait en utilisant la fonction is_post_type_viewable() :

foreach ($post_types as $key => $post_type) {
  if (!is_post_type_viewable($post_type)) {
    unset($post_types[$post_type]);
  }
}
    
réponse donnée Cyclonecode 15.01.2018 - 17:36
4

get_post_types() accepte un tableau d'arguments pour faire correspondre les champs d'un objet de type post . Donc, vous pourriez faire quelque chose comme ça (non testé):

$post_types = get_post_types(array(
  'public'   => true,
  'supports' => array( 'editor', 'title', 'thumbnail' )
), 'objects');

Malheureusement, vous ne pouvez pas définir quelque chose comme "exclure" dans cette fonction et vous n'obtenez que les types de publication qui prennent en charge exactement 'editor', 'title', 'thumbnail' , ni plus ni moins.

Vous pouvez également utiliser get_post_types_by_support() (uniquement pour WP 4.5 et versions ultérieures. Notez également que vous ne pouvez pas exclure des types de publication spécifiques avec cette fonction, mais dans le cas spécifique de la prise en charge de editor, title, thumbnail , le type de publication de pièce jointe être exclu dans la plupart des cas).

$post_types = get_post_types_by_support( array( 'editor', 'title', 'thumbnail' ) );

Si vous voulez quelque chose qui fonctionnera dans tous les cas, j'essaierais de faire en sorte que les types de posts reposent sur des critères plus larges, puis construisez votre propre tableau, comme ceci:

$_post_types = get_post_types_by_support( array( 'editor', 'title', 'thumbnail' ) );

$post_types = [];

foreach($_post_types as $post_type) {
    // In most cases, attachment post type won't be here, but it can be
    if( $post_type->name !== 'attachment' ) {
        $post_types[] = $post_type;
    }
}
    
réponse donnée cybmeta 15.01.2018 - 17:23

Lire d'autres questions sur les étiquettes