it-swarm.dev

Přidání archivu příspěvků do navigační nabídky v aplikaci WordPress 3.0

Hay all, hraju si s WordPress 3.0 a dvěma (2) novými funkcemi, Custom Post Types a Editorem menu .

Začal jsem vytvořením nového typu příspěvku nazvaného "products", jak jste uhodli, tento seznam produktů.

Používám standardní šablonu a vytvářím nové menu, které nahradí horní nav. Pokud vidím, že do něj mohu přidat pouze určité "produkty" , nemohu přidat "archiv" výrobků. To, co se snažím udělat, je přidat odkaz do nabídky a přejít na stránku, která uvádí VŠECHNY produkty.

Nějaký nápad jak to udělat?

10
dotty

@dotty Jak můžete vidět na této trac lístku: Měly by existovat stránky indexu pro vlastní typy příspěvků tak je třeba, že potřeba ještě nebyla adresováno v jádru WordPressu.

Oba @John P Bloch a @Chris_O vám dávají dobré alternativy; Dám vám třetí.

A "Produkty" Stránka

Nejdříve vytvořtePagepro váš vlastní typ příspěvku a zavolejte jej "Produkty". Tím získáte následující adresu URL:

http: //example.php/products/

A "Seznam produktů" Krátký kód

Dále vytvořte Shortcode , který můžete vložit do stránky "Produkty". V mém příkladu jsem to nazval [product-list]. Zde je screenshot toho, jak by to vypadalo:

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

Všimněte si, že takový krátký kód by byl skvělým kandidátem na přidávání spousty volitelných funkcí a umožňoval mu pracovat pro mnoho různých typů příspěvků, ale v zájmu jasnosti jsem si všiml toho všeho. Můžete jej samozřejmě použít jako výchozí bod pro vlastní krátký kód:

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

Soubor post-product.php Soubor šablon motivů

Dále budete muset vytvořit soubor šablony motivu, který zobrazí pouze jeden produkt. Funkce, která implementuje shortcode pojmenuje soubor šablony post-product.php a zde je dobrý výchozí bod:

<?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>

Přidat možnost nabídky

Naposledy budete chtít přidat možnost nabídky. To je velmi jednoduché, jak můžete vidět z tohoto snímku obrazovky (následující předpokládá, že jste neudělali nic s nabídkami WordPress 3.0 dříve a že používáte motiv, který podporuje nabídky WordPress 3.0, například Twenty Ten):

  1. V nabídce admin vyberte možnost nabídky.
  2. Klepnutím na tlačítko "+" přidáte nové menu.
  3. Zadejte název menu, co chcete.
  4. Klikněte na tlačítko "Vytvořit menu" (snímek obrazovky ukazuje "Uložit nabídku", ale při přidávání bude "Vytvořit nabídku".
  5. Vyberte svou novou nabídku jako "Primární navigace".
  6. Vyberte stránku Produkty.
  7. Klikněte na tlačítko Přidat do nabídky
  8. Klikněte na tlačítko "Uložit nabídku"

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

Konečně výstup

Zde by mohl vypadat základní výpis produktů:

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

12
MikeSchinkel

WordPress to nativně nepodporuje. Tento soubor však můžete přidat do svého souboru functions.php a fungovat:

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' );

To vám dá příklad.com/products/ jako seznam produktů. Odtud stačí přidat vlastní odkaz do nabídky.

Pokud však chcete s archivem (podle měsíce, roku atd.) Skutečně archivovat, potřebujete podrobnější kód. Pokud jsou vaše „produkty“ nehierarchickým typem příspěvku (zdá se, že by měly být), můžete použít můj plugin:

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

To vám dává další pole pro přizpůsobení vašich permalinků (jako je tomu u blogů) a umožní vám přizpůsobit permalinks podle kategorie, autora, měsíce, roku, typu příspěvku atd.

4
John P Bloch

Myslím, že je to lepší řešení vytvořit pomocí vlastního typu příspěvku typ příspěvku Archivovat a přesouvat archivované příspěvky v tomto archivu. Do postmetu tohoto nového post_type také přidejte aktuální post_type pro vrácení zpět. Napsal jsem plugin pro tento a aktuální můžete vidět, bez stylů, obrázků a jazykových souborů, na Gist.github/978690 .

0
bueltge
Pokud mohu vidět, že do něj můžu přidat pouze „produkty“, nemohu přidat „archiv“ produktů. To, co se snažím udělat, je přidat odkaz do nabídky a přejít na stránku, která uvádí VŠECHNY produkty. Nějaký nápad jak to udělat?

Chcete-li určit typ příspěvků typu "produkty", je třeba přiřadit taxonomii, poté přidejte termín taxonomie do jednoho ze svých vlastních nabídek, které by potom uživatele přenesly na stránku archivu všech produktů pod použitou taxonomií.

Příklad Mám vlastní typ příspěvku nazvaný "Úlohy" s taxonomií označenými "pozicemi" alt text

Kdybych chtěl všechny práce s termínem "Aktuální otevření" taxonomie, vybral bych ho a přidal by se do menu. alt text

Pokud potřebujete mít na stránce archivu všechny své typy příspěvků, můžete jim přiřadit rodičovskou taxonomii, aby mohly být všechny uvedeny na stránce archivu.

0
Chris_O