J'ai créé un type d'article personnalisé avec des catégories et des sous-catégories. Ce que je dois faire est de répertorier les titres et les images des articles pour une sous-catégorie ou une catégorie donnée dans un modèle de page.
J'ai eu jusqu'à obtenir tous les éléments énumérés dans le type de message personnalisé, mais je ne sais pas comment aller plus loin ... toute aide appréciée.
<?php
$args = array( 'post_type' => 'portfolio', 'posts_per_page' => 10 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
the_title();
echo '<div class="entry-content">';
the_content();
echo '</div>';
endwhile;
?>
La fonction qui crée le type d'article personnalisé et la taxonomie ressemble à ceci: -
<?php
// CUSTOM POST TYPE 1
add_action('init', 'portfolio_register');
function portfolio_register() {
$args = array(
'label' => __('Portfolio'),
'singular_label' => __('Portfolio'),
'public' => true,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => true,
'supports' => array('title', 'editor', 'thumbnail')
);
register_taxonomy("galleries", array("portfolio"), array(
"hierarchical" => true,
"label" => "Galleries",
"singular_label" => "Galleries",
"rewrite" => true)
);
register_post_type( 'portfolio' , $args );
}
add_action("admin_init", "admin_init");
add_action('save_post', 'save_portfolio_options');
add_action('save_post', 'save_portfolio_single_options');
function admin_init(){
add_meta_box("gallerymeta", "Gallery Options", "portfolio_meta_options", "portfolio", "normal", "low");
add_meta_box("portfoliometa", "Portfolio Item Options", "portfolio_single_meta_options", "portfolio", "side", "low");
}
function portfolio_meta_options(){
global $post;
$custom = get_post_custom($post->ID);
$excerpt = $custom["excerpt"][0];
$info = $custom["info"][0];
$linkto = $custom["linkto"][0];
?>
Ceci est une version d'une fonction que j'utilise dans le cadre sur lequel je travaille, avec l'exemple html remplaçant une autre fonction contenant quelque chose de similaire.
// Custom Loop
function arrr_custom_loop( $r_type = 'post', $r_post_num, $r_tax = 'category', $r_terms = 'featured' ) {
$args = array(
'showposts' => $r_post_num,
'tax_query' => array(
array(
'post_type' => $r_type,
'taxonomy' => $r_tax,
'field' => 'slug',
'terms' => array(
$r_terms
),
)
)
);
query_posts( $args );
if (have_posts())
while ( have_posts() ) : the_post();
$more = 0;
?>
<article>
<header class="pagetitle">
<?php if ( is_singular() ) { ?>
<h1><?php the_title(); ?></h1>
<?php } else { ?>
<h2 class="entry"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<?php } ?>
</header>
<div class="content_wrapper">
<div class="content">
<?php the_content(); ?>
</div>
</div>
<?php if ( comments_open() && ! post_password_required() ) { ?>
<div class="comments_wrapper">
<div class="comments">
<?php comments_template(); ?>
</div>
</div>
<?php } ?>
</article>
<?php endwhile;
wp_reset_query();
}
Donc, vous utiliseriez simplement la fonction avec les arguments créés:
arrr_custom_loop( 'portfolio', 10, 'galleries', 'pirates' );
Vous pouvez l'obtenir si vous avez/connaissez la catégorie/sous-catégorie slug ...
Il suffit de le passer dans le tableau args pour query_posts.
$args = array( 'post_type' => 'portfolio', 'posts_per_page' => 10 ,'taxonomy_name'=>'slug of category/subcategory');
query_posts($args);
Je l'ai déjà utilisé auparavant pour faire plus que ce dont vous avez besoin, mais si vous supprimez la deuxième taxonomie, tous les articles d'une catégorie donnée seront répertoriés pour vous:
<?php
// set up taxonomies
$tax_one = 'project_category';
$tax_two = 'brand';
$post_type = 'project';
$categories = get_categories( array(
'type' => $post_type,
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => 0,
'hierarchical' => 1,
'taxonomy' => $tax_one ));
foreach ( $categories as $category ) : // list all categories
echo '<li><a href="'.get_term_link( $category->slug, $tax_one ).'">'.$category->name.'</a><ul>'?>
<?php $terms = get_terms( $tax_two, array( 'hide_empty' => 0 ) );
foreach ( $terms as $term ) : // list all brands in each category
$myquery['tax_query'] = array(
array(
'taxonomy' => $tax_one,
'terms' => array($category->slug),
'field' => 'slug',
),
array(
'taxonomy' => $tax_two,
'terms' => array($term->slug),
'field' => 'slug',
)
);
$the_posts = new WP_Query($myquery);
if ( $the_posts->have_posts() ) : // if there are posts in the current brand and category then display it
echo '<li><a href="'.get_term_link( $term->slug, $tax_two ).'">'.$term->name.'</a></li>';
endif;
endforeach; ?>
<?php echo '</ul></li>';
endforeach; ?>
donc peaufiner pour votre situation:
<?php
// set up taxonomies
$tax_one = 'category';
$post_type = 'portfolio';
$categories = get_categories( array(
'type' => $post_type,
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => 0,
'hierarchical' => 1,
'taxonomy' => $tax_one ));
foreach ( $categories as $category ) : // list all categories
echo '<li><a href="'.get_term_link( $category->slug, $tax_one ).'">'.$category->name.'</a><ul>'?>
<?php $the_posts = new WP_Query($myquery);
if ( $the_posts->have_posts() ) : // if there are posts in the current category then display it
foreach($the_posts as $post) :
echo '<li>Your Post stuff here</li>';
endforeach;
endif;
endforeach; ?>
<?php echo '</ul></li>';
endforeach; ?>
Je n'ai pas du tout testé cela, mais j'espère que cela aidera!
À votre santé,
Dave
La réponse de Rajeev a fonctionné pour moi en utilisant votre code. Dans une installation vierge, j'ai fait ce qui suit:
portfolio_register
et le hook add_action
qui l'appelleindex.php
contenant uniquement le premier bloc de code que vous avez collé. La seule modification que j'ai apportée a été d'ajouter 'galleries'=>'aerial'
à votre variable $args
:$args = array( 'post_type' => 'portfolio', 'posts_per_page' => 10, 'galleries'=>'aerial' );
Seules "antenne 1" et "antenne 2" étaient affichées.
Toute chance que votre code ne soit pas appelé (un modèle différent peut-être)?