No se muestran publicaciones de tipos de entradas personalizadas
He creado una plantilla personalizada y estoy intentando obtener publicaciones personalizadas del tipo "song", pero solo muestra el encabezado y el pie de página. No aparece el contenido de las publicaciones. Incluso si intento llamar a publicaciones generales, tampoco aparece contenido. ¿Debo registrar esta plantilla en algún lugar del tema? ¿O necesito llamar a algo aquí?
Mi código:
<?php
/* Nombre de la plantilla: Página de canciones
*
* Seleccionable desde un menú desplegable en la pantalla de edición de página.
*/
get_header(); ?>
<div>
<?php
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
query_posts( 'post_type=song');
} // fin del while
} // fin del if
?></div>
<?php get_footer(); ?>
Por favor, ayuda a corregir mi código. Quiero mostrar todas las publicaciones del tipo de entrada personalizada "songs". Ya he creado el tipo de entrada personalizada.
Estoy colocando el código anterior en el editor de WordPress, tengo instalado un plugin llamado "PHP execution" para que ejecute código PHP.

Tienes dos errores importantes en tu código:
query_posts
debe ir antes de tu bucle, no dentro de élNunca uses
query_posts
en primer lugar a menos que necesites romper algo en tu página
Para aprender por qué no usar query_posts
y cuándo usar una consulta personalizada y cómo usarla, revisa esta publicación que hice hace un tiempo
Entonces, para corregir tu código en tu plantilla, vamos a hacer uso de WP_Query
y no de query_posts
, y vamos a hacer la consulta antes del bucle
Prueba con algo así:
<?php
/* Plantilla Nombre: Página de Canciones
*
* Seleccionable desde un menú desplegable en la pantalla de edición de página.
*/
?>
<?php get_header(); ?>
<div>
<?php
$args = array(
'post_type' => 'song' // Tipo de publicación: canción
);
$q = new WP_Query($args);
if ( $q->have_posts() ) {
while ( $q->have_posts() ) {
$q->the_post();
// Añade tus etiquetas de plantilla como se muestra a continuación
the_title(); // Muestra el título
} // fin del while
wp_reset_postdata(); // Restablece los datos de la publicación
} // fin del if
?>
</div>
Además, nunca olvides restablecer las consultas personalizadas si has usado el bucle o setup_postdata($post)
con wp_reset_postdata()

Muchas gracias por la respuesta. Usando el código anterior solo obtengo el nombre de la publicación, pero necesito mostrar el título de la publicación con la miniatura y un poco de contenido. ¿Debo llamar a the_content()
?

Sí, deberías agregar lo que necesites, esto es solo lo básico. Para el contenido, necesitarás agregar the_content();
. Todavía necesitas agregar todo tu marcado HTML también. Esta sección es de preferencia personal, algo en lo que no puedo ayudarte :-)

Para un diseño básico de plantilla, echa un vistazo a los temas incluidos como twentyfifteen. Esto debería darte un buen punto de partida

¿Cómo puedo llamar al estilo CSS predeterminado de las publicaciones para esta publicación personalizada? Solo quiero que mi publicación personalizada también se muestre correctamente como una publicación normal en términos de estilo/CSS.

Simplemente copia tu bucle entre la parte del while desde tu index.php y agrégalo en el bucle aquí. Como dije, esa es una sección de preferencia personal que tendrás que resolver por ti mismo desafortunadamente. Nunca podré conocer los estilos de tu tema. Es por eso que esta sección está fuera de tema aquí :-)

No necesitas crear ninguna plantilla si simplemente quieres listar todas las páginas en un archivo para tu tipo de entrada personalizado (CPT):
Simplemente ve a http://example.com/canciones y WordPress mostrará todas tus páginas CPT en un archivo estándar según la Jerarquía de Plantillas. Cambia example.com por tu dominio.
Puede que necesites volver a guardar tus Enlaces Permanentes para limpiar las reglas de reescritura e incluir los siguientes parámetros en tu función register_post_type:
'has_archive' => true,
'rewrite' => array( 'slug' => 'canciones', 'with_front' => false ),
Si quieres crear una página personalizada para tu archivo CPT, crea un nuevo archivo y nómbralo archive-cancion.php en el directorio raíz de tu tema.

¿Has probado 'post_type' => 'songs'
?
Referencia: Consultas por Tipo de Post
