¿Cómo obtener entradas por tipo de contenido personalizado y mostrar campos personalizados?
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 */
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(); ?>

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?

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.

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

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 '

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?

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

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