Googlé cela pendant des heures, ne peut pas trouver une solution.
Sur mon theme vous avez une page Browse
qui extrait toutes les vidéos du type de message personnalisé avec lequel je travaille. Si un utilisateur crée 30 catégories, identifiez-les pour que les utilisateurs puissent trier les vidéos à l'aide des boutons de catégorie répertoriés en haut. S'ils cliquent sur Horror
, ils souhaitent afficher toutes les vidéos Horror
.
Comment puis-je trier mes vidéos à l'aide de catégories dans cette boucle?
BROWSE PAGE
Ma catégorie ul li a
<ul class="sort-by-category">
<?
$args = array(
'orderby' => 'name',
'parent' => 0
);
$categories = get_categories( $args );
foreach ( $categories as $category ) {
echo '<li><a class="browse-categories" href="' . get_category_link( $category->term_id ) . '">' . $category->name . '</a></li>';
}
?>
</ul>
<?
// Our variables
$numPosts = (isset($_GET['numPosts'])) ? $_GET['numPosts'] : 0;
$page = (isset($_GET['pageNumber'])) ? $_GET['pageNumber'] : 0;
query_posts(array(
'posts_per_page' => $numPosts,
'paged' => $page,
'post_type' => 'theme_video'
));
// our loop
if (have_posts()) {
while (have_posts()){
the_post();
get_template_part( 'partials/content', 'browse' );
}
}
wp_reset_query();
?>
Je suis un peu perdu sur la façon de procéder. Rien de ce que j'ai essayé ne semble trier la boucle, et les méthodes que j'ai utilisées ont été dépassées de 1 à 2 ans ...
Le site fonctionne bien pour mon premier thème, mais je ne sais pas comment faire en sorte que cette boucle soit triée en fonction de la catégorie sélectionnée. Des conseils ou des pointeurs?
Merci!
Vous avez le paramètre orderby
dans votre requête, mais vous manquez le compagnon order
. Cela donne une règle ascendante/descendante au tri.
WordPress Codex référence
Je n'arrive pas à comprendre la question, mais je suppose que le fragment de code que vous avez posté contenant query_posts
se trouve dans un modèle de catégorie, d'archive ou d'index appelé lorsque vous suivez les liens générés par get_category_link ()
. Si tel est le cas, la fonction query_posts
écrase la boucle par défaut, mais vous n'incluez pas la catégorie à filtrer afin de saisir toutes les publications de ce type de publication.
// Our variables
$numPosts = (isset($_GET['numPosts'])) ? $_GET['numPosts'] : 0;
$page = (isset($_GET['pageNumber'])) ? $_GET['pageNumber'] : 0;
// build query
$args = array(
'posts_per_page' => $numPosts,
'paged' => $page,
'post_type' => 'theme_video'
);
// get category ID
$cat_id = get_query_var( 'cat' );
// add category to query if an id is found
if ( $cat_id != '' ) {
$cat = get_category ( $cat_id );
$args['category'] = $cat->slug;
}
// go!
query_posts( $args );
Sur un autre point, je suggérerais d’envisager d’utiliser le crochet pre_get_posts
plutôt que la fonction query_posts
.
EDIT: Une réponse a été trouvée et je la poste pour toute autre personne ayant ce problème. Si vous avez de meilleures façons de le faire, veuillez poster ci-dessous pour le bénéfice des autres.
Placez ce code dans votre category.php. Il va automatiquement saisir la catégorie de l'URL et la passer au cat => $category_id
et mettre à jour la boucle en conséquence.
<ul class="sort-by-category">
<?
$args = array(
'orderby' => 'name',
'parent' => 0
);
$categories = get_categories( $args );
foreach ( $categories as $category ) {
echo '<li><a class="browse-categories" href="' . get_category_link( $category->term_id ) . '">' . $category->name . '</a></li>';
}
?>
</ul>
<?
// Our variables
$page = (isset($_GET['pageNumber'])) ? $_GET['pageNumber'] : 0;
// grab slug from url
$category_id = get_query_var('cat');
// define args
$args = array(
'posts_per_page' => '36',
'paged' => $page,
'post_type' => 'theme_video',
'cat' => $category_id
);
// place args in query
$category_posts = new WP_Query($args);
// our loop
if($category_posts->have_posts()) {
while($category_posts->have_posts()) {
$category_posts->the_post();
get_template_part( 'partials/content', 'browse' );
}
}
wp_reset_query();
?>