it-swarm-id.com

Data Jenis Pos Ubahsuaian di widget Bilah Samping?

(catatan: pertanyaan ini awalnya tentang Bidang Kustom, tetapi @MikeSchinkel memiliki solusi yang lebih baik yang melibatkan Jenis Pos Kustom)

Di situs saya, saya memiliki beberapa halaman yang ingin saya tampilkan data yang sama di sidebar. Misalnya, dalam struktur seperti ini:

-Home
-Cars 
 -Volvo 850 overview 
 -Volvo 850 tech spec 
 -Volvo 850 pictures
 -Porsche 911 overview
 -Porsche 911 tech spec
 -Porsche 911 pictures
-Roads 
 -Route 66 overview 
 -Route 66 history 
 -Route 66 pictures
 -Pan-American Highway overview
 -Pan-American Highway history
 -Pan-American Highway pictures

Saya ingin semua halaman Volvo 850 untuk menampilkan data yang sama di sidebar, semua halaman Porsche untuk menunjukkan kumpulan data yang berbeda (misalnya Kecepatan, Pembuat, dll).

Halaman Road akan memiliki set data sendiri untuk setiap jalan. Mobil dan Jalan juga akan memiliki templat laman di sana, dan cara saya mengira akan mendapatkan bilah sisi kanan adalah sesuatu seperti ini di dalam sidebar.php:

if ( is_page_template('car-profile-template.php') ) :
// show car widgets

Berikut ini contoh halaman, halaman Volvo 850 Pictures. Bilah samping (kiri) yang sama akan muncul di halaman Volvo 850 lainnya, sementara yang di sebelah kanan hanyalah konten halaman.

|  Home   •Cars   Roads                                |
--------------------------------------------------------
|   Overview     |     Volvo 840 Pictures              |
|   Tech Spec    |    (some pics)                      |
|  •Pictures     |                                     |
------------------                                     |
| -Specs-        |                                     |
| Volvo 850      |                                     |
| Speed:150mph   |                                     |
| Maker:Volvo    |                                     |  
| Download PDF   |                                     |
------------------                                     |
| -Rating-       |                                     |
| Style:3        |                                     |
| Safety:5       |                                     |
| Reliablity:4   |                                     |
------------------                                     |

Dalam contoh ini, dua widget bilah sisi, Spesifikasi dan Peringkat harus mendapatkan informasinya dari Jenis Posting Kustom. Apakah ada metode, yang akan mudah bagi pengguna akhir untuk mengedit, yang berarti bahwa mereka harus memasukkan data khusus ini hanya sekali? Mungkin tidak perlu untuk masing-masing bidang dipisahkan (yaitu semua Spec dapat dimasukkan dalam bidang Editor, dan semua Peringkat bisa dimasukkan ke dalam bidang Kutipan .. mungkin)

10
cannyboy

MEMPERBARUI:

Berdasarkan pembaruan pertanyaan, saya pikir saya perlu secara eksplisit menyatakan bahwa apa yang ditanyakan dalam pertanyaan dapat dilakukan dengan jawaban di bawah ini, hanya menggunakan bidang khusus di "Mobil" jenis pos kustom untuk setiap item Anda ingin ditampilkan di semua halaman untuk mobil tertentu.

Jika Anda ingin melakukannya cukup hardcode sidebar ke file template single-car.php yang saya sertakan di bawah ini dan kemudian gunakan pernyataan if Anda untuk menentukan konten mana yang akan ditampilkan untuk URL yang berbeda. Anda dapat melakukan upaya untuk membuat widget bilah sisi dan mengembangkan widget khusus tempat widget akan menarik informasi untuk ID posting saat ini, tetapi mengapa keduanya kecuali Anda membuat ini sebagai tema untuk digunakan orang lain?

Sebenarnya ada banyak cara yang agak berbeda untuk mencapai hal ini, tetapi yang saya sarankan haruslah luar biasa untuk kebutuhan Anda.


Hai @cannyboy:

Saya sebenarnya tidak tahu apa cara terbaik untuk membagikan bidang khusus di seluruh posting. Tapi itu mungkin saja bendera merah yang Anda butuhkan. Jika sesuatu tampak terlalu sulit mungkin ...

Pendekatan Alternatif?

... Anda dapat mempertimbangkan merancangnya secara berbeda? Saya pikir Anda akan jauh lebih baik membuat Jenis Tulisan Kustomdari "Mobil" dan kemudian Anda dapat menyimpan semuanya untuk masing-masing "halaman" ke dalam satu jenis posting Mobil. Berikut adalah beberapa contoh URL:

http://example.com/cars/volvo850/  <-- overview
http://example.com/cars/volvo850/tech-specs/
http://example.com/cars/volvo850/pictures/

Belajar tentang Jenis Pos Kustom

Anda dapat mempelajari lebih lanjut tentang Jenis Posting Kustom di jawaban atas pertanyaan-pertanyaan ini:

Jenis Posting Kustom dan Aturan Menulis Ulang

Untuk menerapkan Jenis Posting Kustom dan beberapa halaman Anda akan menggunakan kode seperti berikut ini yang mendaftarkan Anda "Mobil" Jenis Posting Kustomdan kemudian menetapkan aturan penulisan ulang untuk halaman mobil Anda. Masukan kode ini di file functions.php tema Anda atau dalam plugin, mana yang Anda inginkan:

<?php
add_action('init','car_init');
function car_init() {
  register_post_type('car',
    array(
      'label'           => 'Cars',
      'public'          => true,
      'show_ui'         => true,
      'query_var'       => 'car',
      'rewrite'         => array('slug' => 'cars'),
      'hierarchical'    => true,
      //'supports'        => array('title','editor','custom-fields'),
    )
  );
  global $wp,$wp_rewrite;
  $wp->add_query_var('car-page');
  $wp_rewrite->add_rule('cars/([^/]+)/(tech-specs|pictures)','index.php?car=$matches[1]&car-page=$matches[2]', 'top');
  $wp_rewrite->flush_rules(false);  // This should really be done in a plugin activation
}

A Mobil File Template Tema khusus

Maka Anda akan perlu a Mobil file templat khusus dalam tema Anda; nama default untuk ini adalah single-car.php. Saya telah memberi kode templat starter untuk Anda yang merender ketiga URL ( (ikhtisar), 'spesifikasi-teknologi' dan 'gambar') dalam satu template dengan menggunakan pernyataan jika untuk menentukan konten mana yang akan di-render:

<?php get_header(); ?>
<div id="container">
  <div id="content">
  <?php if ( have_posts() ): the_post(); ?>
    <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    <h1 class="entry-title"><?php the_title(); ?></h1>
    <div class="entry-content">
<?php if(is_car_techspecs()): ?>
  <a href="..">Back</a>
  <h1>Tech Specs</h1>
  The tech specs go here!
  <?php get_post_meta($post->ID,'_car_tech_specs'); ?>
<?php elseif (is_car_pictures()): ?>
  <a href="..">Back</a>
  <h1>Pictures</h1>
  Car Pictures go here!
  <?php get_post_meta($post->ID,'_car_pictures'); ?>
<?php else: ?>
  <ul>
    <h1>Overview</h1>
    <li><a href="tech-specs/">Tech Specs</a></li>
    <li><a href="pictures/">Pictures</a></li>
  </ul>
  <?php the_content(); ?>
<?php endif; ?>
      <?php the_content(); ?>
    </div>
  <?php endif; ?>
  </div>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Catatan dalam contoh di atas saya menjadi sangat sederhana dengan penggunaan get_post_meta(); situs nyata perlu memiliki lebih banyak kerumitan di sana.

Tag Templat a.k.a. Fungsi Helper

Tentu saja saya menggunakan beberapa tag templat fungsi penolong a.k.a. untuk meminimalkan kompleksitas dalam file templat dalam kondisi pernyataan jika. Ini mereka dan Anda dapat meletakkan ini di file functions.php tema Anda juga:

function is_car_techspecs() {
  global $wp_query;
  return is_car_page('tech-specs');
}
function is_car_pictures() {
  global $wp_query;
  return is_car_page('pictures');
}

function is_car_page($page) {
  global $wp_query;
  return (isset($wp_query->query['car-page']) && $wp_query->query['car-page']==$page);
}

Cuplikan layar diisi dengan Love Post Type Love

Setelah Anda memiliki semua kode itu dan Anda telah menambahkan Mobil pos seperti Volvo 850 Anda dapat membuatnya berfungsi seperti tangkapan layar berikut:

Halaman Tinjauan

 http://example.com/cars/volvo850/ 
(sumber: mikeschinkel.com )

Halaman Spesifikasi Teknis

http://example.com/cars/volvo850/tech-specs/

Halaman Gambar

http://example.com/cars/volvo850/pictures/

14
MikeSchinkel

Saya pikir seseorang mungkin sudah menjawab pertanyaan ini pada pertanyaan lain yang Anda posting (tentang halaman induk/halaman perantara), tetapi inilah yang saya pikir cara terbaik untuk menyusun data Anda, berdasarkan apa yang telah Anda jelaskan:

 - Home
 - Volvo 850 (overview)
   - Volvo 850 tech spec
   - Volvo 850 pictures
 - Porsche 911 (overview)
   - Porsche 911 tech spec
   - Porsche 911 pictures

Dengan begitu Anda hanya perlu memasukkan bidang meta satu kali - pada halaman induk - dan pada halaman anak-anak Anda dapat menarik data meta itu dari induk:

<?php echo 'Top speed: '.get_post_meta($post->post_parent,'Top Speed',true); ?>

Tentu saja, cara yang lebih baik untuk mengatur ini adalah dengan memiliki satu jenis pos kustom untuk setiap model mobil yang menyimpan semua informasi mobil, dan menampilkan berbagai subhalaman berdasarkan permintaan GET yang diteruskan ke halaman dan digunakan dalam templat halaman sebagai sakelar untuk menentukan templat mana yang akan ditampilkan. Dengan begitu Anda benar-benar dapat menghindari duplikasi data, dan membuatnya lebih mudah untuk menambahkan lebih banyak informasi ke templat nanti ...

Lebih detail ...

Saya telah melakukannya dengan beberapa cara berbeda. Di satu situs di mana saya memiliki agen (perwakilan perusahaan) sebagai jenis posting khusus, saya menggunakan posting mereka untuk menyimpan semua data yang terkait dengan orang itu, tetapi tidak pernah benar-benar menampilkan halaman itu. Alih-alih, saya memiliki halaman "Daftar Agen", halaman "Catatan Kinerja Agen", dan halaman "Hubungi Agen ini", yang selalu dipanggil dengan variabel GET dan menampilkan informasi dari pos yang sesuai. Jadi permalink akan terlihat seperti site.com/agent-listing/?agent=john-smith .

Di situs lain, saya mengatur semua informasi pada satu halaman dan membangun ketiga tampilan untuk halaman tersebut ke dalam templat halaman. Dalam kasus Anda, itu akan terlihat seperti site.com/cars/volvo-850/?pictures .

Dan di templat halaman Anda akan menyertakan cek untuk variabel itu di dekat bagian atas konten:

if ($_GET['pictures']) {

 // template for pictures page

} else if ($_GET['tech-spec']) {

 // template for tech specs page 

} else {

 // overview template

}
1
goldenapples

Jika Anda tidak ingin membuat jenis posting khusus, dan Anda hanya ingin menyertakan sidebar khusus untuk setiap halaman atau posting, Anda bisa menggunakan Plugin Sidebar Anggun. Ini memungkinkan membuat konten sidebar khusus langsung dari dalam layar edit halaman atau halaman menggunakan bidang tambahan yang disebut judul anggun dan konten anggun. Ini kemudian ditampilkan di area sidebar sebagai widget ketika posting atau halaman ini ditampilkan di blog Anda. Informasi lebih lanjut tentang plugin ini tersedia di http://www.mlynn.org/graceful-sidebar-plugin

0
Michael Lynn