Menambahkan konten ke halaman arsip dan taksonomi pada tipe posting khusus?

8

Saya memiliki jenis pos kustom bernama "Produk" dan taksonomi yang disebut "Penggunaan". Di laman landas "Produk" saya, saya ingin memiliki konten khusus yang dapat diedit melalui WYSIWYG oleh klien. Hal yang sama berlaku untuk halaman arahan taksonomi. Pikiran saya adalah membuat Halaman palsu dan hanya menarik konten melalui ID ke templat arsip-products.php dan taxonomy-use.php saya, tetapi saya ingin tahu apakah ada cara yang lebih baik untuk menanganinya.

paper_robots
sumber

Jawaban:

12

Solusi pertama dapat menggunakan API Pengaturan dan membuat 2 bidang "Deskripsi Produk" dan "Deskripsi Penggunaan" , setelah itu ditampilkan di templat Anda bahwa bidang itu mudah seperti:

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

Namun, pengaturan API bukan bagian terbaik dari WP core, dan mungkin membuat halaman pengaturan hanya untuk bidang yang tidak layak.

Pendekatan lain adalah menggunakan halaman (dengan templat halaman khusus ) sebagai arsip.

Buat halaman dan sebut "Arsip Produk"

Di dalamnya letakkan sesuatu seperti itu:

<?php
/*
Template Name: Products Archive
*/

 get_header();

 if ( have_posts() ) the post();

 the_content(); // this will output the page content     

 $p_query = new WP_Query('post_type=products');
 if ( $p_query->have_posts() ) { while( $p_query->have_posts() ) {
   $p_query->the_post();
   // this will require a 'entry-product.php' where you can put all your product markup
   get_template_part('entry', 'product');
 } }
 wp_reset_postdata();

 get_footer();

Setelah itu, di backend Anda, buat halaman dan tetapkan ke template yang baru saja dibuat. Tulis apa pun yang Anda inginkan di konten halaman dan ketika Anda akan membuka halaman, Anda akan melihat konten halaman dan produk.

Hal yang sama dapat dilakukan untuk halaman taksonomi. Cukup ganti templat halaman dan kueri di dalamnya.

Jika, karena alasan apa pun, Anda perlu menggunakan archive-products.phpsebagai arsip produk, alternatifnya adalah membuat templat kustom, tetapi gunakan hanya untuk mengambil konten halaman.

Buat file php dalam tema Anda, dan beri nama 'page-prod-description.php' . Dalam file ini cantumkan:

<?php
/*
Template Name: Products Description
*/
wp_safe_redirect( home_url() );
exit();

Apa yang dilakukan file ini, adalah membuat templat halaman khusus. Template itu dapat dilampirkan ke halaman, tetapi halaman tersebut tidak dapat dipanggil secara langsung , karena jika Anda mencobanya Anda akan diarahkan ke halaman utama.

Sekarang login di backend Anda dan buat halaman, beri judul "Deskripsi Produk" dan tetapkan template halaman yang baru saja dibuat. Jika Anda mencoba mengakses halaman, http://example.com/product-descriptionAnda akan diarahkan ke halaman utama.

Di template arsip produk archive-products.phpAnda,, Anda dapat menggunakan konten yang disisipkan di halaman itu seperti:

$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 );
}

Sekarang klien Anda dapat login di backend dan mengedit halaman "Deskripsi Produk" dan semuanya ditulis dalam konten halaman akan ditampilkan di halaman arsip.

Hal yang sama, tentunya, dapat dilakukan untuk arsip taksonomi.

gmazzap
sumber
Tetapi melakukan ini akan memengaruhi main_queryobjek $wp_querydan menyebabkannya tidak menampilkan hak post_typeuntuk kueri yang terjadi pada halaman arsip. Yang akan membuat panggilan Anda ke filter seperti pre_get_postsuntuk halaman arsip tidak berharga. Ini adalah masalah utama. Wordpress perlu menyediakan sarana untuk MENGELOLA juga Konten Jenis Arsip dan Arsip taksonomi.
Solomon Closson
Kedua metode yang Anda berikan adalah Sloppycara menangani hal ini. Namun sayangnya tidak ada cara yang bersih untuk melakukan ini. Wordpress perlu menyediakan cara yang bersih di sini, IMO!
Solomon Closson
0

Anda dapat membuat halaman normal, lalu menerapkan template khusus yang berisi loop kustom yang sesuai untuk menghasilkan CPT. Atau Anda bisa membuat halaman opsi (atau menambahkan opsi ke Theme Customizer), di mana klien dapat menambahkan konten melalui WYSIWYG, dan kemudian menampilkan konten ini dalam templat arsip yang sesuai.

markcbain
sumber
Adakah contoh kode dasar yang akan Anda gunakan untuk melakukan itu?
Brad Dalton