¿Consulta para tipo de publicación personalizada?
He instalado el plugin Custom Post Type UI. Después de activar este plugin, he creado un tipo de publicación personalizada llamada portfolio
. Ahora quiero usarlo en la página de portfolio en el front-end. ¿Cómo puedo obtener todas las publicaciones que son del tipo de publicación personalizada portfolio
?

query_posts( array( 'post_type' => array('post', 'portfolio') ) );
que muestra tanto publicaciones normales como publicaciones del tipo portfolio
o
query_posts('post_type=portfolio');
para mostrar solo portfolio
.
Usa como una consulta normal de WP - lee el Codex: http://codex.wordpress.org/Function_Reference/query_posts#Usage y http://codex.wordpress.org/Function_Reference/query_posts#Post_.26_Page_Parameters
<?php
query_posts(array(
'post_type' => 'portfolio',
'showposts' => 10
) );
?>
<?php while (have_posts()) : the_post(); ?>
<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
<p><?php echo get_the_excerpt(); ?></p>
<?php endwhile;?>

Esta es una respuesta bastante antigua, pero para ser claros, esta no es la forma en que deberías hacer esto. Casi inevitablemente llevará a errores 404 y una serie de otros problemas. Por favor, revisa las respuestas de @kaiser o esta publicación sobre por qué no deberías usar query_posts()

Respuesta tardía ya que la respuesta principal utiliza query_posts()
, lo cual nunca debería hacerse.
Usa un filtro
Utiliza el filtro pre_get_posts
y simplemente establece el tipo de entrada portfolio
para la consulta principal. Usa Etiquetas Condicionales para determinar dónde deseas aplicar este filtro.
Ejemplo rápido
<?php
defined( 'ABSPATH' ) OR exit;
/* Plugin Name: (#6417) Tipo de entrada "Portfolio" en la consulta */
add_filter( 'pre_get_posts', 'wpse_6417_portfolio_posts' );
function wpse_6417_portfolio_posts( $query )
{
if (
! $query->is_main_query()
// Aquí podemos verificar todas las Etiquetas Condicionales
OR ! $query->is_archive() // Por ejemplo: Cada archivo mostrará ambos tipos de entradas
)
return $query;
$query->set( 'post_type', array( 'post', 'portfolio' ) );
return $query;
}
Aviso
El código anterior es un plugin, pero puede colocarse simplemente en el archivo functions.php
de tu tema (lo cual no se recomienda).

¿Por qué no se recomienda agregarlo a functions? Seguramente, si el administrador del sitio cambia el tema, necesitaría abordar cómo mostrar el portafolio en la página de inicio con este nuevo tema de todos modos. Entonces, diría que es igual de válido agregar esto en functions en lugar de en un plugin. ¿O me estoy perdiendo algo?

@PhillHealey Como dijiste, los datos serían invisibles y tendrías que copiar y pegar el código. Las modificaciones pesadas de lógica en las consultas se manejan mejor mediante plugins, mientras que la visualización y el estilo deben mantenerse en los temas.

@PhillHealey Un tipo de publicación nunca debe ser específico de un tema.

Añade este código al archivo de funciones de tu tema hijo (recomendado) para agregar tus páginas de CPT individuales a tu bucle principal
add_action( 'pre_get_posts', 'add_custom_post_types_to_loop' );
function add_custom_post_types_to_loop( $query ) {
if ( is_home() && $query->is_main_query() )
$query->set( 'post_type', array( 'post', 'portfolio' ) );
return $query;
}
Fuente http://codex.wordpress.org/Post_Types
O crea una plantilla de página personalizada archive-portfolio.php que solo muestre tus páginas de CPT. Esto solo es necesario si no has agregado una página de archivo usando la configuración del plugin.
Ejemplo: 'has_archive' => true,
También puedes controlar cuántas páginas se muestran y el orden en que se muestran en la página de archivo usando este código:
add_action( 'pre_get_posts', 'cpt_items' );
function cpt_items( $query ) {
if( $query->is_main_query() && !is_admin() && is_post_type_archive( 'portfolio' ) ) {
$query->set( 'posts_per_page', '8' );
$query->set( 'order', 'ASC' );
}
}
