J'ai installé le plugin Custom Post Type UI . Après l'activation de ce plugin, j'ai créé un type de message personnalisé appelé portfolio
. Maintenant, je veux utiliser ceci sur la page portfolio du front-end. Comment extraire toutes les publications de type personnalisé portfolio
?
query_posts( array( 'post_type' => array('post', 'portfolio') ) );
qui montre les messages normaux et les messages dans le type portfolio
ou
query_posts('post_type=portfolio');
pour seulement portfolio
.
Utilisation normale WP Query - 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;?>
La réponse tardive étant la réponse principale, utilise query_posts()
, ce qui devrait jamais être fait.
Utilisez le filtre pre_get_posts
et définissez simplement le type d'article portfolio
pour la requête principale. Utilisez Balises conditionnelles pour déterminer l’endroit où vous souhaitez placer ce filtre.
<?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;
}
Le code ci-dessus est un plugin, mais peut simplement être inséré dans le fichier functions.php
de votre thème (qui est not recommandé).
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 plug-in.
Exemple: 'has_archive' => true,
Vous pouvez également contrôler le nombre de pages affichées et leur ordre d'affichage 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' );
}
}