¿Consulta por tipo de publicación personalizada? [cerrado]


16

He instalado el complemento de IU de tipo de publicación personalizada . Después de la activación de este complemento, he creado un tipo de publicación personalizado llamado portfolio. Ahora quiero usar esto en la página de cartera en el front-end. ¿Cómo obtengo todas las publicaciones que son de tipo de publicación personalizadaportfolio ?

Respuestas:


22
query_posts( array( 'post_type' => array('post', 'portfolio') ) );

que muestra tanto las publicaciones normales como las publicaciones dentro del portfoliotipo

o

query_posts('post_type=portfolio');

por sólo portfolio.

Usar como consulta WP normal: lea el Códice: 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;?>

66
Esta es una respuesta bastante antigua, pero para ser claros, no hay forma de que debas hacerlo. Casi inevitablemente conducirá a 404s y a una serie de otros problemas. Consulte las respuestas de @ kaiser o esta publicación sobre por qué no debe usarloquery_posts()
Stephen Harris

16

Respuesta tardía como la respuesta principal usa query_posts(), lo cual nunca debe hacerse.

Usar un filtro

Use el pre_get_postsfiltro y simplemente configure el portfoliotipo de publicación para la consulta principal. Use etiquetas condicionales para determinar dónde desea tener este filtro.

Ejemplo rapido

<?php
defined( 'ABSPATH' ) OR exit;
/* Plugin Name: (#6417) "Portfolio" post type in query */

add_filter( 'pre_get_posts', 'wpse_6417_portfolio_posts' );
function wpse_6417_portfolio_posts( $query )
{
    if (
        ! $query->is_main_query()
        // Here we can check for all Conditional Tags
        OR ! $query->is_archive() // For e.g.: Every archive will feature both post types
    )
        return $query;

    $query->set( 'post_type', array( 'post', 'portfolio' ) );

    return $query;
}

Descargo de responsabilidad

El código anterior es un complemento, pero simplemente puede rellenarse en el functions.phparchivo de su tema (que no se recomienda).


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

@PhillHealey Como dijiste, los datos serían invisibles y tendrías que copiar y pegar el código. Las modificaciones lógicas y pesadas en las consultas se sirven mejor a través de complementos, mientras que la visualización y el estilo deben mantenerse en los temas.
Kaiser

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

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

De acuerdo, si quieres ganar algo de ojo por ojo sobre absolutos, entonces está bien. Sin embargo, simplemente no es correcto decir que ninguno de los códigos específicos de diseño debe enviarse a un complemento. Hay muchas ocasiones en que eso no es apropiado.
Phill Healey

4

Agregue este código al archivo de funciones de temas secundarios (recomendado) para agregar sus páginas CPT individuales a su 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 cree una plantilla de página personalizada archive-portfolio.php que solo mostrará sus páginas CPT. Esto solo debe hacerse si no ha agregado una página de archivo utilizando la configuración del complemento.

Ejemplo: 'has_archive' => verdadero,

También puede 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' );

    }

}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.