Come creare tag.php
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.
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

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 :)
