Dodawanie archiwum postów do menu nawigacji w WordPress 3.0


10

Hay all, gram z WordPress 3.0 i dwiema (2) nowymi funkcjami, niestandardowymi typami postów i edytorem menu .

Zacząłem od utworzenia nowego typu posta o nazwie „ products”, jak się domyślacie, na tej liście produktów.

Używam standardowego szablonu torfowiska i tworzę nowe menu, aby zastąpić górną nawigację. O ile widzę, mogę do niego dodawać tylko niektóre „produkty” , ale nie mogę dodawać „archiwum” produktów. Staram się dodać link do menu, aby przejść do strony z listą WSZYSTKICH produktów.

Masz pomysł, jak to zrobić?

Odpowiedzi:


12

@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:

Strona produktu, która używa skrótu do wyświetlenia listy produktów w WordPress
(ź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.phpTheme 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.phpi 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ęć):

  1. Wybierz opcję menu w menu administratora.
  2. Kliknij + ”, aby dodać nowe menu.
  3. Wpisz nazwę swojego menu, jak tylko chcesz.
  4. Kliknij przycisk „Utwórz menu” (zrzut ekranu pokazuje „Zapisz menu”, ale podczas dodawania będzie to „Utwórz menu” ).
  5. Wybierz nowe menu jako „Podstawową nawigację” .
  6. Wybierz stronę „Produkty ”.
  7. Kliknij „Dodaj do menu”
  8. Kliknij „Zapisz menu”

Dodawanie opcji menu strony produktów do witryny WordPress
(źródło: mikeschinkel.com )

Wreszcie wynik

A tak może wyglądać podstawowa lista produktów:

Lista produktów wykorzystujących niestandardowy typ postu w WordPress
(źródło: mikeschinkel.com )


Pozostało pytanie, jak zmodyfikować pozycję menu produktów, aby zawierało podmenu ze wszystkimi produktami.
hakre

@harke Zaktualizowano.
MikeSchinkel

to nie była prośba :). Zastanawiałem się tylko, jak rozwijane menu jest tworzone automatycznie i myślę, że to nadal nie działa. Ale jak napisano, to nie jest prośba.
hakre

Cześć, mam z tym problem i mam nadzieję, że możesz pomóc. Problem polega na tym, że current-menu-itemklasa nie jest stosowana na produktachli
Reigel,

Brakujące obrazy. : /
fuxia

4

WordPress nie obsługuje tego natywnie. Możesz jednak dodać to do pliku functions.php i działałoby:

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 da przykład.com/products/ jako listę produktów. Następnie dodajesz niestandardowy link do swojego menu.

Jeśli jednak chcesz prawdziwej archiwizacji (według miesiąca, roku itp.) Z kanałami, potrzebujesz bardziej szczegółowego kodu. Jeśli twoje „produkty” są niehierarchicznymi typami postów (wydaje się, że powinny być), możesz użyć mojej wtyczki:

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

Daje to dodatkowe pola do dostosowywania bezpośrednich linków (tak jak w przypadku postów na blogu) i daje możliwość dostosowywania bezpośrednich linków na podstawie kategorii, autora, miesiąca, roku, typu postu itp.


Dzięki za wspaniałe informacje tutaj. Szukam tego samego, ale chociaż wszystko działa poprawnie z przepisywaniem, utknąłem, ponieważ kiedy dodam niestandardowy link do menu, publiczna strona internetowa nie wydaje się zmieniać css wskazującego, że odwiedzający jest na tej stronie. Czy możesz poinformować mnie, jak to się robi, abym mógł wyświetlić pozycję menu w stanie „włączone”, jeśli jesteś w archiwum „produktów”?
NetConstructor.com,

0
O ile widzę, mogę dodawać do niej tylko „produkty”, ale nie mogę dodawać „archiwum” produktów. Staram się dodać link do menu, aby przejść do strony z listą WSZYSTKICH produktów. Masz pomysł, jak to zrobić?

Trzeba będzie przypisać taksonomię do typu postu „produkty”, a następnie dodać termin taksonomii do jednego z niestandardowych menu, co spowoduje przeniesienie użytkownika do strony archiwum wszystkich produktów objętych stosowaną taksonomią.

Przykład Mam niestandardowy typ postu o nazwie „Praca” z taksonomią oznaczoną jako „pozycje” alternatywny tekst

Gdybym chciał wszystkich zleceń z terminem taksonomicznym „Bieżące otwarcia”, wybrałbym go i dodałbym do menu. alternatywny tekst

Jeśli potrzebujesz wszystkich typów wpisów dotyczących „produktów” na stronie archiwum, możesz przypisać do nich taksonomię nadrzędną, aby wszystkie mogły być wymienione na stronie archiwum.


@Chris_O : To jest jeden sposób, ale nie jedyny, a także wymaga znacznego wysiłku, aby utrzymać kategoryzację przez użytkownika. W każdym razie JMTCW.
MikeSchinkel,

Ma sens. Mamy nadzieję, że strona indeksu niestandardowych typów postów będzie adresowana w rdzeniu.
Chris_O

0

Myślę, że lepszym rozwiązaniem jest utworzenie za pomocą niestandardowego typu postu typu archiwum i przeniesienie zarchiwizowanych postów w tym archiwum. Dodaj również bieżący typ post_meta do postmeta nowego typu post_type, aby cofnąć to. Napisałem wtyczkę do tego i obecnie możesz to zobaczyć, bez arkuszy stylów, obrazów i plików językowych, na gist.github / 978690 .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.