Supporto » Sviluppare con WordPress » Richiamare lo slug di una categoria

  • Buongiorno a tutti, spero possiate aiutarmi a trovare un soluzione per il problema di seguito descritto.

    Volevo creare una pagina dove visualizzare i post raggruppati per ogni singola categoria.

    Così ho creato un file “category.php” ed utilizzando il seguente codice, riesco a raggruppare tutti i posti della cateogoria relativa allo “slug” che inserisco (nel mio caso, in via esemplificativa, userò lo slug “my-category“).

    Per cambiare categoria basta agire sulla linea ‘category_name’ => ‘my-category’,, inserendo lo slug della categoria che si vuole visualizzare.

    <?php
    $args = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'category_name' => 'my-category',
        'posts_per_page' => 5,
    );
    $arr_posts = new WP_Query( $args );
    
    if ( $arr_posts->have_posts() ) :
    
        while ( $arr_posts->have_posts() ) :
            $arr_posts->the_post();
            ?>
            <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                <?php
                if ( has_post_thumbnail() ) :
                    the_post_thumbnail();
                endif;
                ?>
    
                        <h2><a href="<?php the_permalink() ?>">
        <?php the_title(); ?></a></h2>
                    <div class="Time_Category"><?php the_time('j M Y') ?>&nbsp | &nbsp<?php the_category(', '); ?></div>
                    <div class="riassunto_content"><?php the_excerpt(); ?></div>
                    <a href="<?php the_permalink() ?>" class="leggi_articoli">
        Leggi di più...</a>
            </article>
            <?php
        endwhile;
    endif;
    ?>  

    Ora vorrei sostituire il valore “my-category” con qualcosa che richiami lo slug della categoria corrente.

    In questo modo, a secondo della categoria che è stata selezionata, verranno visualizzati i relativi post nella relativa pagina.

    Potete aiutarmi a raggiungere questo risultato?

    Grazie!

    • Questo topic è stato modificato 3 settimane, 2 giorni fa da ivanisevic82.
    • Questo topic è stato modificato 3 settimane, 2 giorni fa da ivanisevic82.
    • Questo topic è stato modificato 3 settimane, 2 giorni fa da ivanisevic82.
Stai visualizzando 5 risposte - dal 1 al 5 (di 5 totali)
  • Ciao @ivanisevic82,
    hai già consultato la documentazione relativa a Template Hierarchy di WP?

    Ti serve il codice perché stai lavorando al tuo tema?
    In WP richiamare una pagina con il loop degli articoli di una categoria specifica è già previsto.
    Ad esempio dal menu.

    Facci sapere

    Chi ha creato la discussione ivanisevic82

    (@ivanisevic82)

    Ciao Glora e grazie innanzitutto per il supporto!
    Si, sto lavorando al mio tema personale costruito da zero.

    Riguardo a quanto mi dici, ovverosia “In WP richiamare una pagina con il loop degli articoli di una categoria specifica è già previsto.” avrei bisogno di maggiori chiarimenti.
    In che senso è previsto?
    In quale menu?

    Grazie ancora!

    PS, EDIT: riguardo alla domanda che mi hai fatto sulla gerarchia dei file in wordpress, penso tu ti riferissi alla possibilità di creare un “category” file per ogni categoria.

    Ad esempio “category-mycategory.php”

    Tuttavia, se riuscissi a richiamare semplicemente lo slug della categoria relativa alla pagina corrente nel codice che ho riportato in apertura, potrei evitare di dover creare tanti file php quante sono le mie categorie ed averne uno solo!

    • Questa risposta è stata modificata 3 settimane, 2 giorni fa da ivanisevic82.

    Ciao @ivanisevic82,
    è un po’ che non maneggio il codice quindi sono un po’ arrugginita. Ho fatto un po’ di ricerca e credo che questo codice possa darti un nuovo spunto. Ricorda di apportare le tue personalizzazioni.

    <?php
    /**
     * Template Name: Archive by Category
     */
     
    get_header();
    
    $category = get_category( get_query_var( 'cat' ) );
    $cat_id = $category->cat_ID;
    
    $args = array(
        'category' => $cat_id,
        'post_type' => 'post',
        'post_status' => 'publish',
        'posts_per_page' => -1,
    );
    
    $query = new WP_Query( $args );
    
    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();
            ?>
            <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
            <div class="entry-meta">
                <?php the_date(); ?> by <?php the_author(); ?>
            </div>
            <div class="entry-content">
                <?php the_excerpt(); ?>
            </div>
            <?php
        }
        wp_reset_postdata();
    } else {
        _e( 'Sorry, no posts matched your criteria.', 'text-domain' );
    }
    
    get_footer();

    Per quanto riguarda le funzioni native di WP, ad esempio come voce di menu puoi scegliere se richiamare una categoria.


    WP automaticamente mostrerà solo gli articoli assegnati a quella categoria.

    Nella parte di editor del contenuto o dei Widegt della sidebar puoi invece usare il blocco Gutenberg “Query Loop” e filtare per categoria gli articoli

    Chi ha creato la discussione ivanisevic82

    (@ivanisevic82)

    Ciao Glora, ti ringrazio per il supporto!

    Riguardo al primo problema, alla fine ho risulto aggiungendo al mio codice queste stringhe:

    $category = get_queried_object();
    $slug = $category->slug;

    e sostituendo la parole “my-categories” (o comunque il nome della categoria), semplicemente con “$slug”.

    Riguardo al menu, ho visto che c’è una funziona nativa per aggiungere l’elenco delle categorie anche nei blocchi delle pagine: ho sfruttato quella, ovviamente adattandola alle mie esigenze via CSS.

    Mi rimane un’unica necessità: vorrei aggiungere ad codice una frase standard che spunti qualora non ci siano post da mostrare per la categoria selezionata.

    Qualcosa tipo:

    <?php else: ?>
    <p>No posts found. :(</p>
    <?php endif; ?>

    Vorrei capire però esattamente cosa scrivere e dove inserire la relativa porzione di codice nel mio codice.

    Grazie!

    Ciao @ivanisevic82,
    nel codice che ho postato (anche se diverso dal tuo) è riportato cosa indicare nel caso non ci sia nessun articolo per la categoria

    [...]
    } else {
        _e( 'Sorry, no posts matched your criteria.', 'text-domain' );
    }

    Ricorda che else deve essere aperto dopo endif

Stai visualizzando 5 risposte - dal 1 al 5 (di 5 totali)
  • Devi essere collegato per rispondere a questo topic.