it-swarm.asia

WordPress 3.0'da Gezinme Menüsüne Bir Yazı Arşivi Ekleme

Herkese, WordPress 3.0 ve iki yeni özellik (2) ile birlikte oynuyorum, Özel Mesaj Türleri ve Menü Editörü .

Bu listedeki ürünleri tahmin ettiğiniz gibi "products" adında yeni bir gönderi türü oluşturarak başladım.

Bog standart şablonunu kullanıyorum ve en iyi nav'un ​​yerini alacak yeni bir menü oluşturuyorum. Görebildiğim kadarıyla sadece "ürünler" ekleyebilirim, "arşiv" ürün ekleyemiyorum. Yapmaya çalıştığım, TÜM ürünleri listeleyen bir sayfaya gitmek için menüye bir bağlantı eklemek.

Bunun nasıl yapılacağı hakkında bir fikrin var mı?

10
dotty

@dotty Bu trac biletinde görebileceğiniz gibi: özel yazı tipleri için indeks sayfaları olmalı bu nedenle ihtiyaç henüz gerçekleşmedi WordPress çekirdeğinde ele alındı.

@John P Bloch ve @Chris_O, size iyi alternatifler sunar; Sana bir 3 vereceğim.

A "Ürünler" Sayfa

Öncelikle Özel Mesaj Türünüz için birSayfaoluşturun ve bunu "Ürünler" olarak adlandırın. Bu, aşağıdaki URL'yi verecektir:

http: //example.php/products/

A "Ürün Listesi" Kısa Kod

Daha sonra "Ürünler" sayfanıza ekleyebileceğiniz bir Kısa Kod oluşturun. Örneğimde [product-list] olarak adlandırdım. İşte nasıl kullanacağını gösteren bir ekran görüntüsü:

 A Product's Page that uses a Shortcode to display a list of Products in WordPress 
(kaynak: mikeschinkel.com )

Böyle bir kısa kodun, çok sayıda isteğe bağlı işlevsellik eklemek ve birçok farklı yazı tipi için çalışmasını sağlamak için harika bir aday olacağını unutmayın, ancak açıklık sağlamak için her şeyi hemen hemen kodladım. Elbette onu kendi kısa kodunuz için bir başlangıç ​​noktası olarak kullanabilirsiniz:

<?php
add_shortcode('product-list', 'my_product_list');
function my_product_list($args) {
  $save_post = $GLOBALS['post'];  // Save state so you can restore later
  $post_type = 'product';
  $template_file = get_stylesheet_directory() . "/post-{$post_type}.php";
  if (!file_exists($template_file)) {
    return "<p>Missing template [$template_file].</p>";
  } else {
    global $post;
    $q = new WP_Query("showposts=10&post_type={$post_type}&orderby=title&order=ASC");
    $rows = array();
    $rows[] = '<div class="post-list ' . $post_type . '-post-list">';
    global $post_list_data;
    $post_list_data = array();
    $post_list_data['post_count'] = $post_count = count($q->posts);
    foreach ($q->posts as $post) {
      $q->the_post();
      ob_start();
      include($template_file);
      $rows[] = ob_get_clean();
    }
    $rows[] = '</div>';
    $GLOBALS['post'] = $save_post;
    return implode("\n",$rows);
  }
}

Bir post-product.php Tema Şablonu Dosyası

Daha sonra, yalnızca bir ürünü görüntüleyen bir tema şablonu dosyası oluşturmanız gerekir. Kısa kodu uygulayan işlev, post-product.php şablon dosyasını adlandırır ve işte iyi bir başlangıç ​​noktası:

<?php
/**
 * post-product.php - File to display only one product within a list of products.
 */
?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
  <h2 class="entry-title"><?php the_title(); ?></h2>
  <div class="entry-content">
    <?php the_content(); ?>
  </div>
</div>

Menü Seçeneğini Ekleyin

Son olarak menü seçeneğini eklemek isteyeceksiniz. Bu ekran görüntüsünden görebileceğiniz gibi çok basittir (aşağıda WordPress 3.0 menülerinde hiçbir şey yapmadığınızı ve WordPress 3.0 menülerini yirmi On gibi destekleyen bir tema kullandığınızı varsayarsak):

  1. Yönetici menüsünde menü seçeneğini seçin.
  2. Yeni bir menü eklemek için "+" düğmesini tıklayın.
  3. İstediğiniz ne olursa olsun, menü adınızı yazın.
  4. "Menü Oluştur" düğmesini tıklayın (ekran görüntüsü "Menüyü Kaydet" gösterir ancak eklenirken "Menü Oluştur" olacaktır.)
  5. Yeni Menünüzü "Birincil Gezinme" olarak seçin.
  6. "Ürünler" sayfanızı seçin.
  7. "Menüye Ekle"'i tıklayın
  8. "Menüyü Kaydet" öğesini tıklayın

 Adding a Products Page Menu Option to a WordPress Site 
(kaynak: mikeschinkel.com )

Sonunda, Çıktı

Ve işte temel bir ürün listesi şöyle görünebilir:

 A List of Products using a Custom Post Type in WordPress 
(kaynak: mikeschinkel.com )

12
MikeSchinkel

Bu yerel olarak WordPress tarafından desteklenmiyor. Bununla birlikte, bunu functions.php dosyasına ekleyebilirsiniz ve işe yarayacaktır:

function give_me_a_list_of_products(){
  add_rewrite_rule( 'products/?$', 'index.php?post_type=products', 'top' );
}

add_action( 'init', 'give_me_a_list_of_products' );

Bu size bir ürün listesi olarak example.com/products/ verecektir. Oradan menünüze özel bir bağlantı ekleyin.

Ancak, yayınlarla doğru arşivleme (ay, yıl vb.) İstiyorsanız, daha ayrıntılı bir koda ihtiyacınız vardır. 'Ürünleriniz' hiyerarşik olmayan bir gönderi türüdür (olması gerektiği gibi), eklentimi kullanabilirsiniz:

http://www.wordpress.org/extend/plugins/custom-post-permalinks/

Bu, kalıcı bağlantılarınızı kişiselleştirmek için ekstra alanlar sunar (blog yazılarında olduğu gibi) ve size kategorileri, yazarı, ayı, yılı, posta türünü, vb. Temel alarak kalıcı bağlantıları özelleştirme olanağı sunar.

4
John P Bloch

Özel gönderi türü ile bir gönderi türü Arşivi oluşturmak ve bu arşivdeki arşivlenmiş mesajları taşımak için daha iyi bir çözüm olduğunu düşünüyorum. Ayrıca, geçerli post_type öğesini, bunu geri almak için bu yeni post_type'nin postmeta'ına ekleyin. Bunun için bir eklenti yazdım ve şu an için, - - stilist, resim ve dil dosyası olmadan Gist.github/978690 de görebilirsiniz.

0
bueltge
Görebildiğim kadarıyla ona sadece belirli "ürünler" ekleyebilirim, ürünlerin "arşivlerini" ekleyemiyorum. Yapmaya çalıştığım, TÜM ürünleri listeleyen bir sayfaya gitmek için menüye bir bağlantı eklemek. Bunun nasıl yapılacağı hakkında bir fikrin var mı?

"Ürünler" posta tipine bir taksonomi atamanız ve sonra taksonomi terimini özel menülerinizden birine eklemeniz gerekir; bu durumda kullanıcıyı, kullanılan taksonominin altındaki tüm ürünlerin bir arşiv sayfasına götürür.

Örnek "Pozisyonlar" etiketli bir taksonomi ile "İşler" adı verilen özel bir yazı tipim var alt text

"Mevcut Açıklıklar" taksonomisi ile tüm işleri isteseydim, onu seçer ve menüye eklerdim. alt text

Tüm "ürünler" yazı türlerinizi arşiv sayfasında bulundurmanız gerekiyorsa, hepsine arşiv sayfasında listelenmeleri için bir üst taksonomi atayabilirsiniz.

0
Chris_O