¿Consulta para tipo de publicación personalizada?

6 ene 2011, 12:14:22
Vistas: 174K
Votos: 18

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?

0
Todas las respuestas a la pregunta 3
1
24
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;?>
6 ene 2011 12:33:02
Comentarios

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()

Stephen Harris Stephen Harris
28 may 2013 16:24:26
5
18

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).

27 may 2013 16:42:29
Comentarios

¿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?

Phill Healey Phill Healey
29 nov 2016 22:21:32

@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.

kaiser kaiser
29 nov 2016 22:45:33

No si ese código es específico del tema.

Phill Healey Phill Healey
3 dic 2016 23:27:00

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

kaiser kaiser
4 dic 2016 20:33:06

De acuerdo, si quieres discutir sobre absolutos, está bien. Sin embargo, no es correcto decir que el código no específico del diseño nunca debe incluirse en un plugin. Hay muchas ocasiones en las que eso no es apropiado.

Phill Healey Phill Healey
5 dic 2016 20:23:49
0

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' );

    }

}
11 dic 2013 02:02:08