Requête pour un type de publication personnalisé? [fermé]

16

J'ai installé le plug-in d'interface utilisateur de type de publication personnalisé . Après l'activation de ce plugin, j'ai créé un type de message personnalisé appelé portfolio. Maintenant, je veux l'utiliser sur la page du portfolio dans le front-end. Comment récupérer tous les messages de type personnaliséportfolio ?

shalu
la source

Réponses:

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

qui montre les messages normaux et les messages à l'intérieur du portfoliotype

ou

query_posts('post_type=portfolio');

pour seulement portfolio.

Utilisez comme une requête WP normale - lisez le Codex: http://codex.wordpress.org/Function_Reference/query_posts#Usage et 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
la source
6
C'est une réponse assez ancienne - mais pour être clair, il n'y a pas la façon dont vous devriez le faire. Cela conduira presque inévitablement à des 404 et à une foule d'autres problèmes. Veuillez voir les réponses de @ kaiser ou cet article sur les raisons pour lesquelles vous ne devriez pas utiliserquery_posts()
Stephen Harris
16

Réponse tardive utilisée comme réponse principale query_posts(), ce qui ne devrait jamais être fait.

Utilisez un filtre

Utilisez le pre_get_postsfiltre et définissez simplement le portfoliotype de publication pour la requête principale. Utilisez des balises conditionnelles pour déterminer où vous souhaitez placer ce filtre.

Exemple rapide

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

Avertissement

Le code ci-dessus est un plugin, mais peut simplement être bourré dans le functions.phpfichier de votre thème (ce qui n'est pas recommandé).

kaiser
la source
pourquoi n'est-il pas recommandé de l'ajouter aux fonctions? Sûrement, si l'administrateur du site change de thème, il devra de toute façon expliquer comment afficher le portfolio sur la page d'accueil avec ce nouveau thème. Donc, je dirais qu'il est tout aussi valable d'ajouter cela dans des fonctions plutôt qu'un plugin. Ou est-ce que je manque quelque chose?
Phill Healey
@PhillHealey Comme vous l'avez dit, les données seraient invisibles et vous devrez copier et coller le code autour. Les modifications logiques lourdes des requêtes sont mieux servies via des plugins, tandis que l'affichage et le style doivent être conservés dans les thèmes.
kaiser
Pas si ce code est spécifique au thème.
Phill Healey
@PhillHealey Un type de message ne doit jamais être spécifique à un thème.
kaiser
Ok, si vous voulez vous lancer dans des absolus, alors très bien. Cependant, il n'est tout simplement pas correct de dire qu'aucun code spécifique à la conception ne doit être poussé vers un plugin. Il y a de nombreuses fois où ce n'est pas approprié.
Phill Healey
4

Ajoutez ce code à votre fichier de fonctions de thèmes enfants (recommandé) pour ajouter vos pages CPT uniques à votre boucle principale

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;

}

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

Ou créez un modèle de page archive-portfolio.php personnalisé qui n'affichera que vos pages CPT. Cela ne doit être fait que si vous n'avez pas ajouté de page d'archive à l'aide des paramètres du plugin.

Exemple: 'has_archive' => true,

Vous pouvez également contrôler le nombre de pages affichées et l'ordre dans lequel elles sont affichées sur la page d'archive à l'aide de ce code:

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
la source