Aggiungere contenuto alle pagine di archivio e tassonomia per i custom post type?

7 feb 2014, 05:19:57
Visualizzazioni: 13.5K
Voti: 9

Ho un custom post type chiamato "Prodotti" e una tassonomia denominata "Utilizzo". Nella pagina di archivio dei "Prodotti" vorrei inserire contenuti personalizzabili che il cliente possa modificare tramite editor WYSIWYG. Lo stesso vale per la pagina della tassonomia. La mia idea era creare pagine fittizie e recuperare il contenuto via ID nei template archive-products.php e taxonomy-usage.php, ma mi chiedevo se esistesse un metodo migliore.

0
Tutte le risposte alla domanda 2
2
13

La prima soluzione può essere utilizzare l'API delle Impostazioni e creare 2 campi "Descrizione Prodotti" e "Descrizione Utilizzo", dopo di che mostrarli nel tuo template è semplice come:

$options = get_option('my_theme_options');
echo $options['prod_description'];
// echo $options['usage_description'];

Tuttavia, l'API delle impostazioni non è la parte migliore del core di WP, e probabilmente creare una pagina di impostazioni solo per questi campi non ne vale la pena.

Un altro approccio è utilizzare una pagina (con un template di pagina personalizzato) come archivio.

Crea una pagina e chiamala "Archivio Prodotti"

Inserisci qualcosa del genere:

<?php
/*
Template Name: Archivio Prodotti
*/

 get_header();

 if ( have_posts() ) the_post();

 the_content(); // questo mostrerà il contenuto della pagina     

 $p_query = new WP_Query('post_type=products');
 if ( $p_query->have_posts() ) { while( $p_query->have_posts() ) {
   $p_query->the_post();
   // questo richiederà un file 'entry-product.php' dove puoi inserire tutto il markup del prodotto
   get_template_part('entry', 'product');
 } }
 wp_reset_postdata();

 get_footer();

Dopo di che, nel tuo backend, crea una pagina e assegnale il template appena creato. Scrivi quello che vuoi nel contenuto della pagina e quando aprirai la pagina, vedrai il contenuto della pagina e i prodotti.

Lo stesso può essere fatto per la pagina della tassonomia. Basta cambiare il template della pagina e la query al suo interno.

Se, per qualsiasi motivo, hai bisogno di usare archive-products.php come archivio prodotti, un'alternativa è creare un template personalizzato, ma usarlo solo per recuperare il contenuto della pagina.

Crea un file php nel tuo tema e chiamalo 'page-prod-description.php'. In questo file inserisci solo:

<?php
/*
Template Name: Descrizione Prodotti
*/
wp_safe_redirect( home_url() );
exit();

Questo file crea un template di pagina personalizzato. Quel template può essere assegnato alle pagine, ma quelle pagine non possono essere chiamate direttamente, perché se ci provi verrai reindirizzato alla home page.

Ora accedi al tuo backend e crea una pagina, intitolala "Descrizione Prodotti" e assegna il template di pagina appena creato. Se provi ad accedere alla pagina http://example.com/product-description verrai reindirizzato alla home page.

Nel tuo template dell'archivio prodotti, archive-products.php, puoi usare il contenuto inserito in quella pagina così:

$desc = get_pages('meta_key=_wp_page_template&meta_value=page-prod-description.php');
if ( ! empty($desc) ) {
   $page = array_shift($desc);
   echo apply_filters('the_content', $page->post_content );
}

Ora i tuoi clienti possono accedere al backend e modificare la pagina "Descrizione Prodotti" e tutto ciò che è scritto nel contenuto della pagina verrà mostrato nella pagina dell'archivio.

Lo stesso, ovviamente, può essere fatto per l'archivio della tassonomia.

7 feb 2014 12:48:51
Commenti

Ma fare questo influenzerà l'oggetto main_query $wp_query e causerà il mancato output del giusto post_type per la query che avviene sulle pagine di archivio. Il che renderà inutili le tue chiamate a filtri come pre_get_posts per una pagina di archivio. Questo è il problema principale. Wordpress deve fornire un mezzo per GESTIRE anche il Contenuto degli Archivi dei Post Type e degli Archivi delle Tassonomie.

Solomon Closson Solomon Closson
11 nov 2017 02:00:02

Entrambi i metodi che hai fornito sono un modo Approximativo di gestire la cosa. Sfortunatamente però non esiste un modo pulito per farlo. Secondo me, Wordpress dovrebbe fornire una soluzione pulita in questo caso!

Solomon Closson Solomon Closson
11 nov 2017 02:01:37
1

Potresti creare pagine normali, quindi applicare template personalizzati che contengano il loop personalizzato appropriato per visualizzare il CPT. Oppure potresti creare una pagina di opzioni (o aggiungere un'opzione al Personalizzatore del Tema), dove il cliente può aggiungere contenuti tramite WYSIWYG, e poi visualizzare questo contenuto nel template di archivio appropriato.

7 feb 2014 08:22:04
Commenti

Hai qualche esempio del codice base che useresti per farlo?

Brad Dalton Brad Dalton
7 feb 2014 11:11:11