Escludere la categoria dal loop di WordPress
Ho questo codice per il loop e ho bisogno di escludere la categoria 4
da questo loop. Qualche suggerimento su come realizzarlo?
Codice che avvia il loop
<?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;
?>
potresti usare wp_parse_args() per unire i tuoi argomenti alla query predefinita
// Definisci gli argomenti predefiniti della query
global $wp_query;
$defaults = $wp_query->query_vars;
// I tuoi argomenti personalizzati
$args = array('cat'=>-4);
// unisci gli argomenti predefiniti con quelli personalizzati
$args = wp_parse_args( $args, $defaults );
// esegui la query basata sugli argomenti uniti
query_posts($args);
tuttavia, penso che la strada più elegante sia utilizzare l'azione pre_get_posts(). questa modifica la query prima che venga eseguita, evitando così di eseguirla due volte.
dai un'occhiata a:
http://codex.wordpress.org/Custom_Queries#Category_Exclusion
basandoti su quell'esempio, per escludere la categoria 4 dall'indice inseriresti questo nel tuo functions.php:
add_action('pre_get_posts', 'wpa_44672' );
function wpa_44672( $wp_query ) {
//$wp_query è passato per riferimento. non è necessario restituire nulla. qualsiasi modifica fatta all'interno di questa funzione influenzerà automaticamente la variabile globale
$excluded = array(4); //trasformato in array nel caso tu debba escludere più di una categoria
// escludi solo nella home page
if( is_home() ) {
set_query_var('category__not_in', $excluded);
//che è semplicemente il modo più elegante per scrivere:
//$wp_query->set('category__not_in', $excluded);
}
}

Vota a favore di Helga poiché ha menzionato per prima pre_get_posts.

invece di 'category__not_in' o 'category__in', potresti usare 'cat' e utilizzare una stringa come valore ad es. '2,-4'
. in questo modo, non solo la categoria specificata verrebbe inclusa/esclusa, ma anche le sue sottocategorie.

Signorina, ha commesso un crimine orribile. Dovrebbe vergognarsi! Nome della funzione "wpa_44672"? Davvero? :P

Dal tuo file functions.php
function remove_home_category( $query ) {
// Se la query è per la home page ed è la query principale
if ( $query->is_home() && $query->is_main_query() ) {
// Esclude la categoria con ID 4 dai risultati
$query->set( 'cat', '-4' );
}
}
// Aggiunge l'azione al hook 'pre_get_posts' per modificare la query prima che venga eseguita
add_action( 'pre_get_posts', 'remove_home_category' );
Questo codice modifica la query prima che venga effettivamente eseguita, rendendolo l'hook più efficiente per modificare il loop in questo caso.

Prima della riga
<?php if(have_posts()): ?>
Inserisci qualcosa come questo
<?php query_posts($query_string . '&cat=-4'); ?>
Questo esclude la categoria con ID Categoria 4. Come visto qui

in effetti rimuove i post da quella categoria ma è una sorta di portfolio nella pagina dell'utente, e ora l'impaginazione è rotta alla pagina 3.

ho anche questo codice personalizzato nel file theme_setup.php: $newrules["user/({$author->nicename})/(portfolio)/?$"] = 'index.php?author_name=$matches[1]&baction=$matches[2]'; $newrules["user/({$author->nicename})/(portfolio)/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&baction=$matches[2]&paged=$matches[3]';
