web-dev-qa-db-fra.com

Ajouter une archive d'articles au menu de navigation dans WordPress 3.0

Tout le monde, je joue avec WordPress 3.0 et deux (2) des nouvelles fonctionnalités, Types de messages personnalisés et le Éditeur de menus.

J'ai commencé par créer un nouveau type d'article appelé "products", comme vous l'avez deviné, cette liste de produits.

J'utilise le modèle standard de bog et je crée un nouveau menu pour remplacer le menu principal. Autant que je sache, je ne peux ajouter que certains "produits", je ne peux pas ajouter de "archive" de produits. Ce que j'essaie de faire est d'ajouter un lien au menu pour accéder à une page répertoriant TOUS les produits.

Une idée comment faire ça?

10
dotty

@dotty Comme vous pouvez le constater avec ce ticket de traçage: il devrait y avoir des pages d'index pour les types de posts personnalisés _ si bien que le besoin ne soit pas encore apparu abordé dans le noyau WordPress.

@John P Bloch et @Chris_O vous offrent une bonne alternative. Je vais vous en donner une troisième.

A "Produits" Page

Commencez par créer unpagepour votre type de message personnalisé et appelez-le "Produits". Cela lui donnera l'URL suivante:

http: //example.php/products/

A "Liste de produits" Shortcode

Créez ensuite un Shortcode que vous pourrez intégrer à votre page "Produits". Dans mon exemple, je l'ai appelé [product-list]. Voici une capture d'écran de ce à quoi cela ressemblerait:

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

Notez qu'un tel shortcode serait un excellent candidat pour ajouter de nombreuses fonctionnalités optionnelles et lui permettre de fonctionner pour différents types de publications, mais dans un souci de clarté, j'ai tout codé en dur. Vous pouvez bien sûr l'utiliser comme point de départ pour votre propre shortcode:

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

Un fichier de modèle de thème post-product.php

Ensuite, vous devrez créer un fichier de modèle de thème qui n’affiche qu’un seul produit. La fonction qui implémente le shortcode nomme le fichier modèle post-product.php et constitue un bon point de départ:

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

Ajouter l'option de menu

Enfin, vous voudrez ajouter l'option de menu. C’est très simple, comme vous pouvez le voir sur cette capture d’écran (les personnes suivantes supposent que vous n’avez rien fait auparavant avec les menus WordPress 3.0 et que vous utilisez un thème prenant en charge les menus WordPress 3.0 tels que Twenty Ten):

  1. Sélectionnez l'option de menu dans le menu admin.
  2. Cliquez sur le "+" pour ajouter un nouveau menu.
  3. Tapez votre nom de menu, celui que vous aimez.
  4. Cliquez sur le bouton "Créer un menu" (la capture d'écran montre "Enregistrer le menu" mais ce sera "Créer un menu" lors de l'ajout.)
  5. Sélectionnez votre nouveau menu comme votre "Navigation principale".
  6. Sélectionnez votre "Produits _".
  7. Cliquez sur "Ajouter au menu"
  8. Cliquez sur "Enregistrer le menu"

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

Enfin, la sortie

Et voici à quoi pourrait ressembler une liste de produits de base:

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

12
MikeSchinkel

Ceci n'est pas supporté nativement par WordPress. Cependant, vous pouvez ajouter ceci à votre fichier functions.php et cela fonctionnera:

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

Cela vous donnera example.com/products/ sous forme de liste de produits. A partir de là, il vous suffit d'ajouter un lien personnalisé à votre menu.

Cependant, si vous voulez un véritable archivage (par mois, année, etc.) avec des flux, vous avez besoin d'un code plus détaillé. Si vos 'produits' sont de type publication non hiérarchique (vous semblez devoir l'être), vous pouvez utiliser mon plugin:

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

Cela vous donne des champs supplémentaires pour personnaliser vos liens permanents (comme vous le pouvez avec les articles de blog), et vous donnera la possibilité de les personnaliser en fonction de la catégorie, de l'auteur, du mois, de l'année, du type de message, etc.

4
John P Bloch

Je pense que c’est une meilleure solution pour créer via un type de message personnalisé un type de message Archive et déplacer les messages archivés dans ces archives. Ajoutez également le post_type actuel au postmeta de ce nouveau post_type pour annuler cela. J'ai écrit un plugin pour cela et vous pouvez le voir, sans feuilles de style, images et fichier de langue, sur Gist.github/978690 .

0
bueltge
Autant que je sache, je ne peux ajouter que certains "produits", je ne peux pas ajouter une "archive" de produits. Ce que j'essaie de faire est d'ajouter un lien au menu pour accéder à une page répertoriant TOUS les produits. Une idée comment faire ça?

Vous devez attribuer une taxonomie au type de publication "produits", puis ajouter le terme de taxonomie à l'un de vos menus personnalisés. L'utilisateur sera ensuite redirigé vers une page d'archive de tous les produits de la taxonomie utilisée.

Exemple J'ai un type de publication personnalisé appelé "Emplois" avec une taxonomie intitulée "positions" alt text

Si je voulais tous les emplois avec le terme de taxonomie "Ouvertures actuelles", je le sélectionnerais et l'ajouterais au menu. alt text

Si vous avez besoin que tous vos types de produits "produits" figurent sur la page d'archivage, vous pouvez leur attribuer une taxonomie parent afin qu'ils puissent tous être répertoriés sur la page d'archivage.

0
Chris_O