Obtenha apenas tipos de postagem com base no suporte

10

Estou tentando recuperar uma lista que inclui tipos de postagem incorporados e personalizados:

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

O acima mencionado quase funciona, mas eu gostaria de excluir o attachment dessa lista, retornando apenas os tipos de postagem com suporte específico, como editor , title e thumbnail . Isso é possível?

    
por Cyclonecode 15.01.2018 / 16:55

2 respostas

9

Descobri que get_post_types_by_support() parece ser a solução para obter o resultado desejado:

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

As opções acima retornarão post , page e qualquer tipo de postagem personalizada que suporte title , editor e thumbnail .

Como isso também retornará tipos de postagens privadas, poderíamos percorrer a lista e verificar se o tipo é visível no frontend. Isso pode ser feito usando a função is_post_type_viewable() :

foreach ($post_types as $key => $post_type) {
  if (!is_post_type_viewable($post_type)) {
    unset($post_types[$post_type]);
  }
}
    
por Cyclonecode 15.01.2018 / 17:36
4

get_post_types() aceita uma matriz de argumentos para corresponder aos campos de um objeto de tipo de postagem . Então, você poderia fazer algo assim (não testado):

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

Infelizmente, você não pode definir algo como "excluir" nesta função, e também recebe apenas tipos de post que suportam exatamente 'editor', 'title', 'thumbnail' , nem mais nem menos.

Ou você pode usar get_post_types_by_support() (somente para o WP 4.5 e superior. Além disso, observe que não é possível excluir tipos de post específicos com essa função também, mas para o caso específico de suporte a editor, title, thumbnail , o tipo de postagem do anexo excluídos em mais casos).

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

Se você quiser algo que funcione em qualquer caso, eu tentaria obter tipos de postagem com base em critérios mais amplos e, em seguida, criar sua própria matriz, algo assim:

$_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;
    }
}
    
por cybmeta 15.01.2018 / 17:23