J'ai ce code pour la boucle et je dois exclure une catégorie 4
de cette boucle. Des suggestions sur la façon de réaliser ceci?
Code qui commence la boucle
<?php if(have_posts()): ?>
<ol class="item_lists">
<?php
$end = array(3,6,9,12,15,18,21,24,27,30,33,36,39,42,45);
$i = 0;
while (have_posts()) : the_post();
$i++;
global $post;
?>
vous pouvez utiliser wp_parse_args () pour fusionner vos arguments dans la requête par défaut
// Define the default query args
global $wp_query;
$defaults = $wp_query->query_vars;
// Your custom args
$args = array('cat'=>-4);
// merge the default with your custom args
$args = wp_parse_args( $args, $defaults );
// query posts based on merged arguments
query_posts($args);
bien que je pense que la route la plus élégante utilise l’action pre_get_posts (). cela modifie la requête before la requête est faite pour que la requête ne soit pas exécutée deux fois.
check-out:
http://codex.wordpress.org/Custom_Queries#Category_Exclusion
sur la base de cet exemple pour exclure la catégorie 4 de l'index, je mettrais ceci dans votre functions.php:
add_action('pre_get_posts', 'wpa_44672' );
function wpa_44672( $wp_query ) {
//$wp_query is passed by reference. we don't need to return anything. whatever changes made inside this function will automatically effect the global variable
$excluded = array(4); //made it an array in case you need to exclude more than one
// only exclude on the home page
if( is_home() ) {
set_query_var('category__not_in', $excluded);
//which is merely the more elegant way to write:
//$wp_query->set('category__not_in', $excluded);
}
}
À partir de votre fichier de fonctions
function remove_home_category( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', '-4' );
}
}
add_action( 'pre_get_posts', 'remove_home_category' );
Ce code modifie la requête avant que la requête réelle ne soit exécutée. C'est le hook le plus efficace pour modifier la boucle dans ce cas.
Adam a raison. De plus, pour que la pagination fonctionne, vous devez avoir quelque chose de plus semblable à ceci:
<?php query_posts('post_type=post&paged='.$paged.'&cat=-4'); ?>
Avant la ligne
<?php if(have_posts()): ?>
Insérer quelque chose comme ça
<?php query_posts($query_string . '&cat=-4'); ?>
Ceci exclut la catégorie avec la catégorie ID 4. Comme vu ici