Adăugare conținut pe paginile de arhivă și taxonomie pentru tipurile personalizate de postări
Am un tip personalizat de postare numit "Produse" și o taxonomie numită "Utilizare". Pe pagina principală "Produse" aș dori să am conținut personalizat care poate fi editat de client prin WYSIWYG. Același lucru pentru pagina de taxonomie. Ideea mea a fost să creez pagini fictive și să extrag conținutul prin ID în șabloanele archive-products.php și taxonomy-usage.php, dar eram curios dacă există o metodă mai bună de a gestiona acest lucru.

Prima soluție poate fi utilizarea API-ului Settings pentru a crea 2 câmpuri "Descrierea Produselor" și "Descrierea Utilizării", după care afișarea acestor câmpuri în șablonul tău este la fel de simplă ca:
$options = get_option('my_theme_options');
echo $options['prod_description'];
// echo $options['usage_description'];
Cu toate acestea, API-ul Settings nu este cea mai bună parte a nucleului WordPress, iar crearea unei pagini de setări doar pentru aceste câmpuri probabil nu merită efortul.
O altă abordare este utilizarea unei pagini (cu un șablon personalizat) ca arhivă.
Crează o pagină și numește-o "Arhiva Produse"
În interiorul ei, pune ceva de genul:
<?php
/*
Șablon: Arhiva Produse
*/
get_header();
if ( have_posts() ) the_post();
the_content(); // acest lucru va afișa conținutul paginii
$p_query = new WP_Query('post_type=products');
if ( $p_query->have_posts() ) { while( $p_query->have_posts() ) {
$p_query->the_post();
// acest lucru va necesita un fișier 'entry-product.php' unde poți pune toată structura produsului
get_template_part('entry', 'product');
} }
wp_reset_postdata();
get_footer();
După aceea, în backend, creează o pagină și atribuie-i șablonul tocmai creat. Scrie orice dorești în conținutul paginii și când vei deschide pagina, vei vedea conținutul paginii și produsele.
Același lucru poate fi făcut și pentru pagina de taxonomie. Doar schimbă șablonul paginii și interogarea din el.
Dacă, din orice motiv, trebuie să folosești archive-products.php
ca arhivă de produse, o alternativă este crearea unui șablon personalizat, dar folosit doar pentru a prelua conținutul paginii.
Crează un fișier php în tema ta și numește-l 'page-prod-description.php'. În acest fișier pune doar:
<?php
/*
Șablon: Descrierea Produselor
*/
wp_safe_redirect( home_url() );
exit();
Ce face acest fișier este crearea unui șablon de pagină personalizat. Acel șablon poate fi atașat la pagini, dar acele pagini nu pot fi accesate direct, deoarece dacă încerci, vei fi redirecționat către pagina principală.
Acum loghează-te în backend și creează o pagină, numește-o "Descrierea Produselor" și atribuie-i șablonul de pagină tocmai creat. Dacă încerci să accesezi pagina http://example.com/product-description
vei fi redirecționat către pagina principală.
În șablonul tău de arhivă de produse, archive-products.php
, poți folosi conținutul introdus în acea pagină astfel:
$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 );
}
Acum clienții tăi se pot loga în backend și pot edita pagina "Descrierea Produselor", iar tot ce este scris în conținutul paginii va fi afișat în pagina de arhivă.
Același lucru, desigur, poate fi făcut și pentru arhiva de taxonomii.

Dar făcând asta va afecta obiectul main_query
, $wp_query
și va determina să nu afișeze corect post_type
pentru interogarea care are loc pe paginile de arhivă. Acest lucru va face ca apelurile către filtre precum pre_get_posts
pentru o pagină de arhivă să fie inutile. Aceasta este problema principală. WordPress trebuie să ofere o metodă pentru a GESTIONA Conținutul Arhivelor pentru Tipuri de Postări și Arhivele de Taxonomii.

Puteți crea pagini normale, apoi aplicați șabloane personalizate care conțin bucla personalizată adecvată pentru a afișa CPT-ul. Sau puteți crea o pagină de opțiuni (sau adăugați o opțiune în Personalizatorul de Temă), unde clientul poate adăuga conținut prin intermediul WYSIWYG, și apoi afișa acest conținut în șablonul de arhivă corespunzător.
