Come creare tag.php

23 ago 2014, 12:35:58
Visualizzazioni: 29.6K
Voti: 4

Come posso creare un template tag.php che funzioni per ogni post che contiene tag?

Ho creato alcuni Tag come = Cibo, Bevande e Frutta

il post 1 ha i tag Cibo e Bevande

il post 2 ha i tag Cibo e Frutta

Come posso creare una singola pagina per quei post con i tag?

Il mio codice è così, ma non mostra nulla.

function get_tags_post($tag_name){
    $original_query = $wp_query;
    $wp_query = null;
    $brand_name= $tag_name;
    $args=array(
        'posts_per_page'=>5, 
        'tag' => $brand_name
    );
    $wp_query = new WP_Query( $args );
    if ( have_posts() ) : while (have_posts()) : the_post();
        echo '<li>';
        single_tag_title();
        echo '</li>';
    endwhile; endif;
    $wp_query = null;
    $wp_query = $original_query;
    wp_reset_postdata();
}

Per favore, se qualcuno sa quale parte del codice è sbagliata, me lo dica.

0
Tutte le risposte alla domanda 2
0

Sfortunatamente tutto il tuo codice è sbagliato. Quello che stai facendo è lo stesso di query_posts, che non dovrebbe mai essere usato. Inoltre, non sostituire mai la query principale su nessun tipo di pagina di archivio o sulla home page con una query personalizzata.

Per creare una pagina di tag, basta semplicemente fare una copia del tuo index.php e rinominarlo tag.php. Ecco una copia del tema predefinito, il tag.php di Twenty Fourteen, per darti un'idea.

<?php
/**
 * Template per visualizzare le pagine di Tag
 *
 * Utilizzato per visualizzare pagine di archivio per post in un tag.
 *
 * @link http://codex.wordpress.org/Template_Hierarchy
 *
 * @package WordPress
 * @subpackage Twenty_Fourteen
 * @since Twenty Fourteen 1.0
 */

get_header(); ?>

    <section id="primary" class="content-area">
        <div id="content" class="site-content" role="main">

            <?php if ( have_posts() ) : ?>

            <header class="archive-header">
                <h1 class="archive-title"><?php printf( __( 'Archivi Tag: %s', 'pietergoosen' ), single_tag_title( '', false ) ); ?></h1>

                <?php
                    // Mostra una descrizione opzionale del termine.
                    $term_description = term_description();
                    if ( ! empty( $term_description ) ) :
                        printf( '<div class="taxonomy-description">%s</div>', $term_description );
                    endif;
                ?>
            </header><!-- .archive-header -->

            <?php
                $counter = 1; //Inizia il contatore per il layout a colonne dei post

                // Inizia il Loop.
                while ( have_posts() ) : the_post();

        ?>
                <div class="entry-column<?php echo ( $counter%2  ? ' left' : ' right' ); ?>">

                    <?php get_template_part( 'content', get_post_format() ); ?>

                </div>  

        <?php   

            $counter++; //Aggiorna il contatore

            endwhile;

        pietergoosen_pagination();

        else :
                    // Se non ci sono contenuti, include il template "Nessun post trovato".
                get_template_part( 'content', 'none' );

                endif;
            ?>
        </div><!-- #content -->
    </section><!-- #primary -->

<?php
get_sidebar( 'content' );
get_footer();

Vai a controllare anche questi link

MODIFICA

Solo per commentare il tuo codice, dovresti indentare correttamente il tuo codice. Così com'è, il tuo codice è difficile da leggere. È anche difficile da debuggare.

Leggi coding-standards/php/#indentation per maggiori informazioni

23 ago 2014 13:04:44
1

se vuoi usare il tuo specifico wp_query (che tra l'altro non è assolutamente sbagliato e può essere utilizzato se sai cosa stai facendo e adotti misure di sicurezza - come cercare di non usare $_GET così spesso e se lo fai prova a usare strip_tags() oppure usa (int) prima se vuoi passare solo un numero).

Puoi interrogare l'archivio con i tag in index.php (se vuoi avere un unico template universale per i post standard di wp) oppure creando tags.php nella cartella principale del template (dove si trovano index.php e gli altri file template) che è esattamente uguale a index.php ma viene attivato quando cerchi pagine come: www.webage.com/tag/nome-del-tag

Per prima cosa, usa get_queried_object(); per ottenere l'oggetto effettivo. È buona norma assegnarlo a una variabile per risparmiare trasferimento:

$qObject = get_queried_object();

Se lavori su index.php è buona pratica creare una variabile per distinguere se si tratta di un archivio tag o meno, così puoi usarla in seguito:

$isArchiveTag = (($qObject->taxonomy == 'post_tag')?true:false);

Non è necessario crearla se stai lavorando su tag.php.

Ora, se stai usando wp_query dovrebbe apparire così:

$postArgs = array(      
    'post_type'    => 'post',
    'showposts'    => -1,
    'post_status'  => 'publish',
    'parent' => 0,
    'hide_empty' => true,
    'orderby'   => 'date',
    'order' => 'DESC',
    'tag' => (($isArchiveTag)?$qObject->slug:'')            
);
    
$query = new WP_Query($postArgs);
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $currentPost = get_post(); // se vuoi dichiarare una variabile per contenere i dati del post
            //inserisci qui il tuo codice
    }
}
wp_reset_postdata();

Per ottenere il titolo del tag attivo puoi usare

single_tag_title( '', false );

oppure

$qObject->name;

Per ottenere tutti i tag come wp_object e assegnarli a una variabile usa

$tags = get_terms('post_tag');

Divertiti :)

1 feb 2022 15:23:15
Commenti

Immagino che questa sia una risposta alla domanda più generica "come creare tag.php" piuttosto che alla domanda specifica qui?

Rup Rup
4 feb 2022 15:12:50