Consulta para o tipo de postagem personalizada? [fechadas]

16

Eu instalei o plug-in personalizado da interface do usuário do tipo de postagem . Após a ativação deste plugin, criei um tipo de postagem personalizado chamado portfolio. Agora eu quero usar isso na página do portfólio no front-end. Como obtenho todas as postagens que são do tipo personalizadoportfolio ?

shalu
fonte

Respostas:

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

que mostra as postagens normais e as postagens dentro do portfoliotipo

ou

query_posts('post_type=portfolio');

por apenas portfolio.

Use como consulta WP normal - leia o Codex: http://codex.wordpress.org/Function_Reference/query_posts#Usage e 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;?>
Martin-Al
fonte
6
Esta é uma resposta bastante antiga - mas, para ficar claro, não há como você deveria estar fazendo isso. Isso quase inevitavelmente levará a 404s e uma série de outros problemas. Consulte @ respostas do kaiser ou este post sobre por que você não deve usarquery_posts()
Stephen Harris
16

Resposta tardia como principal resposta query_posts(), o que nunca deve ser feito.

Use um filtro

Use o pre_get_postsfiltro e apenas defina o portfoliotipo de postagem para a consulta principal. Use Tags condicionais para determinar onde você deseja ter esse filtro.

Exemplo rápido

<?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;
}

aviso Legal

O código acima é um plug-in, mas pode simplesmente ser inserido no functions.phparquivo do seu tema (o que não é recomendado).

kaiser
fonte
por que não é recomendado adicioná-lo às funções? Certamente, se o administrador do site alterar o tema, eles precisarão abordar como exibir o portfólio na página inicial com esse novo tema. Então, eu diria que é tão válido adicionar isso em funções, em vez de um plugin. Ou eu estou esquecendo de alguma coisa?
Phill Healey 29/11
@PhillHealey Como você disse, os dados seriam invisíveis e você teria que copiar e colar o código. Modificações lógicas e pesadas nas consultas são melhor atendidas através de plug-ins, enquanto a exibição e o estilo devem ser mantidos em temas.
Kaiser
Não se esse código for específico para o tema.
Phill Healey
@PhillHealey Um tipo de postagem nunca deve ser específico para um tema.
Kaiser #
Ok, se você quiser entrar em alguns detalhes sobre absolutos, tudo bem. No entanto, não é correto dizer que nenhum código específico de design deve ser enviado a um plugin. Muitas vezes isso não é apropriado.
Phill Healey
4

Adicione este código ao arquivo de funções de temas filhos (recomendado) para adicionar suas páginas CPT únicas ao loop 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;

}

Fonte http://codex.wordpress.org/Post_Types

Ou crie um modelo de página archive-portfolio.php personalizado que exibirá apenas suas páginas de CPT. Isso só precisa ser feito se você não adicionou uma página de arquivamento usando as configurações do plug-in.

Exemplo: 'has_archive' => true,

Você também pode controlar quantas páginas são exibidas e a ordem em que elas são exibidas na página de arquivamento 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' );

    }

}
Brad Dalton
fonte