Corsi on-line

WordPress: identificare la categoria di un post

La funzione booleana is_category() di WordPress è sostanzialmente un tag condizionale che verifica se una pagina di archivio di una categoria viene visualizzata al momento corrente; se per esempio volessimo non mostrare in un archivio del nostro Blog il titolo dei post per certe categorie, ipotizziamo la “6”, la “7” e la “8”, potremmo modificare il codice della pagina content.php del nostro tema in questo modo:

<?php if ( (is_category('5')) 
		|| (is_category('6')) 
		|| (is_category('7'))
		|| (is_category('8'))
) { ?>			
<?php echo ""; ?>
<?php }else { ?>
<h1 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php echo esc_attr( sprintf( __( 'Permalink to %s', 'nome-tema' ), the_title_attribute( 'echo=0' ) ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h1>
<?php } ?>

Ma is_category() non può essere utilizzato in tutti i casi all’interno del sorgente dei post, questo perché tale funzione accetta come parametro l’id delle varie categorie; quindi, come dovremmo procedere se volessimo conoscere l’identificatore della categoria di un determinato post? A tal proposito potremmo utilizzare un costrutto basato su get_the_category() che produce un array contenenti le informazioni relative alla categoria corrente.

wordpress

Nello specifico, il dato di nostro interesse è contenuto nell’oggetto cat_ID che potremmo ricavare nel modo seguente, tramite un semplice ciclo da impostare sul file single.php:

<?php
foreach((get_the_category()) as $category) {
    $current_cat = $category->cat_ID;
}
?>

Una volta ottenuto l’id della categoria, potremmo utilizzarlo per definire delle condizioni; l’esempio seguente mostra come sia possibile escludere dalla visualizzazione di un’immagine tutti i post del Blog tranne quelli appartenenti alle categorie indicate (la “1” e la “4”):

if ( ($current_cat==1) || ($current_cat==4) ){
?>
<img src="http://www.sitoweb.com/wp-content/uploads/2014/10/informazioni.png" alt="Chiedi Info">
<?php } ?>

Per completezza è possibile segnalare anche la funzione in_category(), che testa se un post è stato assegnato o meno ad una categoria specifica.

Post correlati
  • Umby

    Buongiorno

    Ho installato il tema ONETONE e provato ad utilizzare questa guida ma funziona solo in parte.

    In sostanza la mia necessità è che la ricerca venga fatta sul post title e sulla categoria (e relativa sottocategoria) corrente.

    Ho trovato il seguente codice per filtrare la ricerca su post title

    ————————————————————————————

    /**

    Search by Post Title **/

    function search_by_title_only( $search, &$wp_query )

    {

    global $wpdb;

    if ( empty( $search ) )

    return $search; // skip processing – no search term in query

    $q = $wp_query->query_vars;

    $n = ! empty( $q[‘exact’] ) ? ” : ‘%’;

    $search = ”;

    $searchand = ”;

    foreach ( (array) $q[‘search_terms’] as $term ) {

    $term = esc_sql( like_escape( $term ) );

    $search .= “{$searchand}($wpdb->posts.post_title LIKE ‘{$n}{$term}{$n}’)”;

    $searchand = ‘ AND ‘;

    }

    if ( ! empty( $search ) ) {

    $search = ” AND ({$search}) “;

    if ( ! is_user_logged_in() )

    $search .= ” AND ($wpdb->posts.post_password = ”) “;

    }

    return $search;

    }

    add_filter( ‘posts_search’, ‘search_by_title_only’, 500, 2 );

    ———————————————————————————————

    e il seguente per restringere la ricerca ad una certa categoria (cat_ID- in questo esempio la categoria 1)

    ———————————————————————————————–

    function SearchFilter($query) {

    if ($query->is_search) {

    // Insert the specific categories you want to search

    $query->set(‘cat’, ‘1’);

    }

    return $query;

    }

    add_filter(‘pre_get_posts’,’SearchFilter’);

    ———————————————————————————

    Ho notato che le due funzioni lavorano correttamente sul mio tema ma

    ora avrei bisogno di implementarle per estendere la ricerca anche alla categoria (non solo al post title) e contemporaneamente filtrare il tutto sulla categoria corrente (e relative sottocategorie).

I più letti del mese
Tematiche