Solo obtiene tipos de publicaciones basadas en el soporte

10

Estoy intentando recuperar una lista que incluye tipos de publicaciones integradas y personalizadas:

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

Lo anterior casi funciona, pero me gustaría excluir attachment de esta lista, solo devolviendo tipos de publicación con soporte específico como editor , title y thumbnail . ¿Es esto posible?

    
pregunta Cyclonecode 15.01.2018 - 16:55

2 respuestas

9

Descubrí que get_post_types_by_support() parece ser la solución para obtener el resultado deseado:

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

Lo anterior devolverá post , page y cualquier tipo de publicación personalizada que admita title , editor y thumbnail .

Ya que esto también devolverá tipos de publicaciones privadas, podríamos recorrer la lista y verificar si el tipo se puede ver en la interfaz. Esto se puede hacer usando la función is_post_type_viewable() :

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

get_post_types() acepta una serie de argumentos para coincidir con los campos de a post type object . Entonces, podrías hacer algo como esto (no probado):

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

Lamentablemente, no puede establecer algo como "excluir" en esta función, y también obtiene solo tipos de publicación que admiten exactamente 'editor', 'title', 'thumbnail' , ni más ni menos.

O podría usar get_post_types_by_support() (solo para WP 4.5 y superior. Además, tenga en cuenta que tampoco puede excluir tipos de mensajes específicos con esta función, pero para el caso específico de soporte para editor, title, thumbnail , el tipo de mensaje adjunto excluirse en la mayoría de los casos).

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

Si quieres algo que funcione en cualquier caso, intentaría obtener tipos de publicación basados en un criterio más amplio y luego construir tu propia matriz, algo como esto:

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

Lea otras preguntas en las etiquetas