• User

    Esclusione di una categoria di post visualizzati

    Chiedo cortesemente un aiuto.
    Sono giorni che sto cercando di risolvere questo problema, studiando le soluzioni proposte sul web e cercando di applicarle al sito che sto preparando.

    Il template che sto usando ha una funzione che si chiama "Homepage builder" che ha diversi moduli tra cui uno per inserire i post recenti.
    Io ne ho inseriti due, uno dopo l'altro, nella home: il primo per visualizzare l'elenco degli ultimi post dalla categoria BLOG, il secondo per visualizzare l'elenco degli ultimi post da tutte le categorie. Da quest'ultimo vorrei però eliminare quelli della categoria BLOG già visulizzati nel primo.
    Ho trovato il codice seguente che, inserito nel file functions sembrava fare quello che mi serve.

    <?php

    function elimina_cat($query) {

    if ( $query->is_home ) {
    $query->set('cat', '-82');
    }
    return $query;
    }
    add_filter('pre_get_posts', 'elimina_cat');

    ?>

    All'apertura della home i due moduli mostrano il numero di articoli richiesto nei settaggi (3 per il modulo che mostra i post della categoria BLOG e 5 per il modulo che mostra i post delle altre categorie).

    Il secondo, correttamente, non mostra i post della categoria BLOG.

    In quest'ultimo, tuttavia, cliccando per vedere i successivi 5 (il modulo prevede questa opzione), nell'ulteriore elenco che si apre compaiono alcuni post già visualizzati nel primo gruppo di 5 post e anche alcuni post della categoria BLOG (quelli che eccedono il numero settato per ogni visualizzazione, 3 nello specifico).

    Cortesemente, se qualcuno ha qualche idea su cosa sto sbagliando perché non so più cosa tentare.

    Grazie

    Sergio


  • Moderatore

    Ciao seowebby,

    purtroppo senza vedere il loop è un po' difficile capire perché non funziona correttamente, hai provato eventualmente con un'altro tema?

    Ciao
    Enea


  • User

    Ciao Sergio,

    per esperienza, ho trattato il loop di WordPress abbastanza esaustivamente sul mio blog, ci possono essere vari motivi per cui non riesci a fare quello che vuoi oltre al fatto che non è la tecnica giusta.

    Innanzi tutto stai lavorando su un solo loop ed è perfettamente normale che appaiano tutti i post della categoria 83 visto non implementi nessun meccanismo per impedirlo o operare una selezione. Per fare quello che vuoi tu dovresti lavorare sui loop multipli in quanto hai la necessità di estrarre uno o più articoli (identificati da uno o più id) da visualizzare nel primo box e i rimanenti meno quelli già visualizzati nel secondo. Seconda di poi dovresti immagazzinare da qualche parte (possibilmente in un array) l'id o gli id dei post da escludere nella seconda query altrimenti oltre a capitare quello che dici potrebbe anche succederti di vedere, nel secondo gruppo, tutti post uguali. Come ti ha detto Enea nel post qua sotto è difficile darti una risposta precisa senza vedere il loop. Quel che è certo, però, è che fino a quando lavorerai su una query senza dargli un qualche meccanismo atto a operare una qualche forma di selezione non potrai aspettarti qualcosa di diverso da quanto accade adesso.

    Come detto non conosco ne il tuo loop, ne il nome, l'id o altro delle tue categorie ma quello che dovresti fare é:

    1. Estrarre un certo numero di articoli in base ai criteri che preferisci (esempio: gli ultimi 3 di una categoria e gli ultimi ... magari quelli con la data più recente ... da tutte le categorie) e la query purtroppo devi crearla da solo.
    2. Scorrere il primo loop andando a popolare il primo bloccco con gli ultimi tre articoli della categoria blog.
    3. Scorrere il secondo loop andando a popolare il secondo blocco con i rimanenti meno quelli della prima categoria.

    Per aiutarti ti posto un codice che ho usato in un mio template e fa qualcosa di molto simile a quanto chiedi. Nello specifico avevo la necessità di mostrare due blocchi di articoli (quelli in evidenza e i rimanenti) senza che nel secondo blocco apparissero i post in evidenza.

    Questo primo blocco mostra gli articoli in evidenza.
    [PHP]
    <?php
    query_posts( 'showposts=10' );
    $postID = array();
    while ( have_posts() ) : the_post();
    $postID[] = get_the_ID();
    the_title();
    the_content();
    endwhile;
    ?>
    [/PHP]

    Questo secondo blocco mostra i rimanenti meno quelli in evidenza
    [PHP]
    <?php
    query_posts( array( 'post__not_in' => $postID ) );
    while ( have_posts() : the_post();
    the_title();
    the_content();
    endwhile;
    ?>
    [/PHP]

    Anche se non conosco le tue specifiche esigenze spero di esserti stato di aiuto.