¿Cómo obtener entradas por tipo de contenido personalizado y mostrar campos personalizados?

25 feb 2014, 22:05:02
Vistas: 23.8K
Votos: 6

Tengo tipos de contenido personalizado para Recetas, y dentro de eso he configurado Advanced Custom Fields (del plugin).

Dentro de ese tipo de contenido personalizado, tengo varias categorías. Dos preguntas:

1.) ¿Cómo obtengo todas las entradas de una categoría personalizada? Entiendo cómo mostrar los campos personalizados, pero no estoy seguro de cómo llamar a todas las entradas de una categoría personalizada, para luego mostrar su título, imagen y enlace.

2.) En un escenario de tipo de contenido personalizado, ¿es mejor configurar categorías personalizadas o usar las categorías genéricas de entradas?

He probado get_posts, luego intenté obtener entradas por categoría personalizada. Por ejemplo:

<?php
$args = array(
     'posts_per_page' => 8,
     'orderby' => 'rand',
     'post_type' => 'recipes',
     'type' => 'side-dishes',
     'post_status' => 'publish'
);
$show_albums = get_posts( $args );
?>

No sé la implementación exacta, ya que post_type es un contenido personalizado, y supongo que tendría que hacer algún foreach probablemente para usar the_field (de ACF)

=========================================================== Ok, después de tomar la sugerencia de abajo, esto es lo que tengo, ¿podrían decirme si lo estoy haciendo correctamente?

aquí está la consulta - que parece funcionar:

<?php
// La Consulta
$the_query = new WP_Query($args = array(
    'post_type' => 'recipes',
    'custom_cat' => 'side-dishes'
) );

// El Bucle
if ( $the_query->have_posts() ) {
        echo '<ul>';
    while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
        echo '</ul>';
} else {
    // no se encontraron entradas
}
/* Restaurar datos originales de la entrada */
wp_reset_postdata();?>

Registré la taxonomía, pero lo que me confunde es que, mi post-type registrado es recipes, ¿no debería register_taxonomy ser "recipes" y no 'custom_cat'?

register_taxonomy( 'custom_cat', 
        array('recipes'), /* si cambias el nombre de register_post_type( 'custom_type', entonces tienes que cambiar esto */
        array('hierarchical' => true,     /* si esto es verdadero, actúa como categorías */
            'labels' => array(
                'name' => __( 'Categorías de Recetas', 'bonestheme' ), /* nombre de la taxonomía personalizada */
                'singular_name' => __( 'Categoría de Receta', 'bonestheme' ), /* nombre singular de taxonomía */
                'search_items' =>  __( 'Buscar Categorías de Recetas', 'bonestheme' ), /* título de búsqueda para taxonomía */
                'all_items' => __( 'Todas las Categorías de Recetas', 'bonestheme' ), /* título para todas las taxonomías */
                'parent_item' => __( 'Categoría de Receta Padre', 'bonestheme' ), /* título padre para taxonomía */
                'parent_item_colon' => __( 'Categoría Personalizada Padre:', 'bonestheme' ), /* título de taxonomía padre */
                'edit_item' => __( 'Editar Categoría Personalizada', 'bonestheme' ), /* título de editar taxonomía personalizada */
                'update_item' => __( 'Actualizar Categoría Personalizada', 'bonestheme' ), /* título de actualización para taxonomía */
                'add_new_item' => __( 'Añadir Nueva Categoría Personalizada', 'bonestheme' ), /* título de añadir nuevo para taxonomía */
                'new_item_name' => __( 'Nuevo Nombre de Categoría Personalizada', 'bonestheme' ) /* título de nombre para taxonomía */
            ),
            'show_admin_column' => true, 
            'show_ui' => true,
            'query_var' => true,
            'rewrite' => array( 'slug' => 'custom-slug' ),
        )
    );

aquí está el tipo de contenido registrado:

function create_recipe() { 
    // creando (registrando) el tipo personalizado 
    register_post_type( 'recipes', /* (http://codex.wordpress.org/Function_Reference/register_post_type) */
        // ahora añadamos todas las opciones para este tipo de contenido
        array( 'labels' => array(
            'name' => __( 'Recetas', 'bonestheme' ), /* Este es el Título del Grupo */
            'singular_name' => __( 'Receta', 'bonestheme' ), /* Este es el tipo individual */
            'all_items' => __( 'Todas las Recetas', 'bonestheme' ), /* el elemento de menú todos los items */
            'add_new' => __( 'Añadir Nueva Receta', 'bonestheme' ), /* El elemento de menú añadir nuevo */
            'add_new_item' => __( 'Añadir Receta', 'bonestheme' ), /* Título de Añadir Nuevo */
            'edit' => __( 'Editar', 'bonestheme' ), /* Diálogo de Edición */
            'edit_item' => __( 'Editar Receta', 'bonestheme' ), /* Título de Editar */
            'new_item' => __( 'Nuevo Tipo de Receta', 'bonestheme' ), /* Título de Nuevo */
            'view_item' => __( 'Ver Receta', 'bonestheme' ), /* Título de Ver */
            'search_items' => __( 'Buscar Recetas', 'bonestheme' ), /* Título de Búsqueda de Tipo Personalizado */ 
            'not_found' =>  __( 'Nada encontrado en la Base de Datos.', 'bonestheme' ), /* Esto se muestra si no hay entradas aún */ 
            'not_found_in_trash' => __( 'Nada encontrado en la Papelera', 'bonestheme' ), /* Esto se muestra si no hay nada en la papelera */
            'parent_item_colon' => ''
            ), /* fin de arrays */
            'description' => __( "Sección de Recetas para It's Just food", 'bonestheme' ), /* Descripción del Tipo Personalizado */
            'public' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'show_ui' => true,
            'query_var' => true,
            'menu_position' => 4, /* este es el orden en que quieres que aparezca en el menú del lado izquierdo */ 
            'menu_icon' => get_stylesheet_directory_uri() . '/library/images/custom-post-icon.png', /* el icono para el menú del tipo de contenido personalizado */
            'rewrite'   => array( 'slug' => 'recipes', 'with_front' => false ), /* puedes especificar su slug url */
            'has_archive' => 'recipes', /* puedes renombrar el slug aquí */
            'capability_type' => 'post',
            'hierarchical' => false,
            /* el siguiente es importante, dice qué está habilitado en el editor de entradas */
            'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'sticky')
        ) /* fin de opciones */
    ); /* fin de register post type */
2
Comentarios

¿Qué has intentado? ¿Has hecho alguna investigación? ¿Has considerado usar WP_Query?

Howdy_McGee Howdy_McGee
25 feb 2014 22:24:53

sí, tienes razón, voy a modificar mi pregunta para agregar lo que intenté.

user31344 user31344
25 feb 2014 22:28:52
Todas las respuestas a la pregunta 1
8

Esto podría ser una buena lectura para ti. No estoy seguro exactamente de lo que estás buscando hacer, así que lo presentaré en un formato simple.

Esta consulta obtendrá todas las entradas del tipo de entrada recipes donde exista el campo personalizado side-dishes. Luego puedes iterar y mostrarlos como prefieras.

$recipes = new WP_Query(
    array(
        'post_type' => 'recipes',
        'posts_per_page' => 8,
        'orderby' => 'rand',
        'post_status' => 'publish',
        'meta_query' => array(
            array(
                'key' => 'side-dishes'
                'compare' => 'EXISTS'
            )
        )
    )
);

Esta segunda consulta obtendrá todas las entradas de la taxonomía my_taxonomy_name_here que deberás reemplazar con tu taxonomía. Busca categorías con el slug my_category_slug_here que deberás reemplazar con el slug de la categoría. Puedes reemplazar 'slug' por ID y obtenerlas basadas en eso si lo prefieres.

$recipes = new WP_Query(
    array(
        'post_type' => 'recipes',
        'posts_per_page' => 8,
        'orderby' => 'rand',
        'post_status' => 'publish',
        'tax_query' => array(
            array(
                'taxonomy' => 'my_taxonomy_name_here',
                'field' => 'slug',
                'terms' => 'my_category_slug_here'
            )
        )
    )
);

Luego puedes iterar a través de cada entrada como en un bucle normal:

<?php if($recipes->have_posts()) : ?>
    <?php while($recipes->have_posts()) : $recipes->the_post(); ?>
        <h1><?php the_title(); ?></h1>
        <?php the_content(); ?>
    <?php endwhile; ?>
<?php endif; wp_reset_query(); ?>

Documentación sobre WP_Query

Documentación sobre Meta_Query

Documentación sobre Tax_Query

25 feb 2014 23:01:22
Comentarios

en la plantilla para esta página ya estoy llamando a las publicaciones usando <?php if (have_posts()) : while (have_posts()) : the_post(); ?> , ¿sería innecesario el wp_query?

user31344 user31344
26 feb 2014 00:14:49

WP_Query es una forma estándar de mostrar múltiples tipos de publicaciones en la misma página. El Loop que publicaste es el loop principal para ese tipo de publicación específica. Puedes modificar el loop principal usando el filtro pre_get_posts si lo deseas.

Howdy_McGee Howdy_McGee
26 feb 2014 00:23:18

ok, entonces está bien tener dos wp_querys en la misma página siempre que no interfieran entre sí?

user31344 user31344
26 feb 2014 00:56:49

esto es con lo que estoy trabajando ahora: <?php

// La Consulta $the_query = new WP_Query($args = array( 'post_type' => 'recipes', 'recipe' => 'side-dishes' ) );

// El Loop if ( $the_query->have_posts() ) { echo '

    '; while ( $the_query->have_posts() ) { $the_query->the_post(); echo '
  • ' . get_the_title() . '
  • '; } echo '
'; } else { // no se encontraron posts } /* Restaurar los datos originales del Post */ wp_reset_postdata();?>

user31344 user31344
26 feb 2014 00:59:05

No necesitas pasar $args = array() dentro de WP_Query, puedes poner $args fuera de WP_Query o colocar el array directamente dentro de WP_Query. Entonces, asumo que tu taxonomía se llama recipe, ¿correcto?

Howdy_McGee Howdy_McGee
26 feb 2014 16:37:14

se llama custom_cat pero probablemente debería llamarse recipe. He modificado la pregunta anterior para incluir la solución actual.

user31344 user31344
26 feb 2014 18:15:15

aquí está la consulta - que parece funcionar: -> ¿Entonces hay algún problema o funcionó? :D

Howdy_McGee Howdy_McGee
26 feb 2014 18:20:56

sí, funcionó, solo quería verificar si había algún problema con la solución. Podría funcionar, pero luego en el camino... en cualquier caso, ¡agradezco mucho tu tiempo!

user31344 user31344
26 feb 2014 18:43:07
Mostrar los 3 comentarios restantes