J'utilise la fonction ci-dessous (grâce à @helgatheviking!) Pour exclure les catégories de la boucle wordpress. Cela fonctionne très bien - les publications des catégories sélectionnées sont exclues de la boucle sur la page de liste principale des blogs, des pages de liste de catégories et des archives, mais pas des publications récentes et non des commentaires récents dans la barre latérale. Comment peut-on étendre l'action de ce code également sur eux?
add_action('pre_get_posts', 'wpa_31553' );
function wpa_31553( $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(272); //made it an array in case you need to exclude more than one
// only exclude on the front end
if( !is_admin() ) {
set_query_var('category__not_in', $excluded);
//which is merely the more elegant way to write:
//$wp_query->set('category__not_in', $excluded);
}
}
UPDATE: Une petite précision: les catégories exclues n'ont pas également disparu du widget Catégories. Tout a disparu toutes les publications de ces catégories lorsque je les ouvre avec un clic de souris. J'aimerais qu'ils disparaissent également du widget Catégories.
J'ai exclu mes catégories sélectionnées de partout avec le plugin Advanced Category Excluder (ACE), sauf depuis le widget Catégories - ici a aidé le code @Brad Dalton. ACE a son propre widget Commentaires récents qui masque les catégories exclues, mais il y avait un problème mineur sur la page 404, où ce widget continue d'afficher les catégories exclues avec des commentaires. Je l'ai redirigé (la page 404) vers la page d'accueil de mon site avec le plugin 404 to Start .
Merci à tous pour votre aide!
UPDATE
Le plug-in Advanced Category Excluder ne permet pas de sélectionner les rôles d'utilisateur exclus. Vous l'avez donc désactivé, ainsi que le widget Commentaires récents, pour lequel je ne peux pas exclure, pour l'instant, les catégories requises. En conclusion, la seule solution était les fonctions @helgatheviking et @Brad Dalton.
L’auteur original n’a pas tout à fait raison de dire "c’est simplement la manière la plus élégante d’écrire".
set_query_var()
remplacera toujours la requête main , alors que si vous utilisez réellement:
$wp_query->set( 'category__not_in', $excluded );
... cela fonctionnera pour toute instance de query_posts()
, telle que le widget publications récentes.
Per @TheDeadMedic, j'ai ajusté mon code. Espérons que cela fonctionnera désormais sur toutes les requêtes non-administratives.
add_action('pre_get_posts', 'wpa_136017' );
function wpa_136017( $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(272); //made it an array in case you need to exclude more than one
// only exclude on the front end
if( !is_admin() ) {
$wp_query->set('category__not_in', $excluded);
}
}
C'est ce que je voudrais utiliser pour exclure les catégories du widget de catégories
function widget_categories_args_filter( $cat_args ) {
$cat_args['exclude'] = array(1,2,3);
return $cat_args;
}
add_filter( 'widget_categories_args', 'widget_categories_args_filter', 10, 1 );
Il n'y a PAS de filtres pour exclure les catégories des publications récentes ou des widgets de commentaires récents. Vous pouvez reconstruire le widget en utilisant cette solution comme guide http://wordpress.org/support/topic/recent-posts-widget-with-category-exclude