@dotty Jak widać po tym trac trac: powinny istnieć strony indeksu dla niestandardowych typów postów, więc oczywiście potrzeba nie została jeszcze zaspokojona w rdzeniu WordPress.
Zarówno @John P Bloch, jak i @Chris_O dają dobre alternatywy; Dam ci 3 miejsce.
„Produkty” Page
Najpierw utwórz stronę dla niestandardowego typu postu i nazwij ją „Produkty” . To da mu następujący adres URL:
http: //example.php/products/
Krótki kod „Listy produktów”
Następnie utwórz krótki kod , który możesz osadzić na stronie „Produkty” . W moim przykładzie nazwałem to [product-list]
. Oto zrzut ekranu, jak by to wyglądało:
(źródło: mikeschinkel.com )
Zauważ, że taki krótki kod byłby świetnym kandydatem do dodania wielu opcjonalnych funkcji i umożliwienia jego działania dla wielu różnych typów postów, ale dla zachowania przejrzystości prawie wszystko zakodowałem na stałe. Możesz oczywiście użyć go jako punktu wyjścia dla własnego krótkiego kodu:
<?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);
}
}
post-product.php
Theme Template File
Następnie musisz utworzyć plik szablonu motywu, który wyświetla tylko jeden produkt. Funkcja, która implementuje shortcode, nazywa plik szablonu post-product.php
i jest dobrym punktem wyjścia:
<?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>
Dodaj opcję menu
Na koniec będziesz chciał dodać opcję menu. Jest to bardzo proste, jak widać na tym zrzucie ekranu (poniższe zakładają, że nic nie robiłeś wcześniej z menu WordPress 3.0 i że używasz motywu obsługującego menu WordPress 3.0, takiego jak Dwadzieścia Dziesięć):
- Wybierz opcję menu w menu administratora.
- Kliknij „ + ”, aby dodać nowe menu.
- Wpisz nazwę swojego menu, jak tylko chcesz.
- Kliknij przycisk „Utwórz menu” (zrzut ekranu pokazuje „Zapisz menu”, ale podczas dodawania będzie to „Utwórz menu” ).
- Wybierz nowe menu jako „Podstawową nawigację” .
- Wybierz stronę „Produkty ”.
- Kliknij „Dodaj do menu”
- Kliknij „Zapisz menu”
(źródło: mikeschinkel.com )
Wreszcie wynik
A tak może wyglądać podstawowa lista produktów:
(źródło: mikeschinkel.com )