Ajout d'une archive de publications au menu de navigation dans WordPress 3.0

10

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

.

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

J'utilise le modèle standard 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 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.

Avez-vous une idée de comment faire cela?

    
posée dotty 23.08.2010 - 16:04

4 réponses

12

@dotty Comme vous pouvez le constater sur ce ticket de traçage: Il doit s'agir de pages d'index pour les types d'articles personnalisés , de sorte que le besoin n'a pas encore été traité dans le noyau de WordPress.

@John P Bloch et @Chris_O vous offrent de bonnes alternatives; Je vais vous en donner une troisième.

Une page "Produits"

Créez tout d'abord une page pour votre type de message personnalisé et appelez-le "Produits" . Cela lui donnera l'URL suivante:

  

enlace

Un "Liste de produits" Shortcode

Créez ensuite un code court que vous pouvez intégrer à vos "produits" page. Dans mon exemple, je l'appelais [product-list] . Voici une capture d'écran de ce à quoi cela ressemblerait:

Notezqu'untelshortcodeseraitunexcellentcandidatpourajouterdenombreusesfonctionnalitésoptionnellesetluipermettredefonctionnerpourdenombreuxtypesdepostsdifférents,maisdansunsoucideclarté,j'aitoutcodéendur.Vouspouvezbiensûrl’utilisercommepointdedépartpourvotrepropreshortcode:

<?phpadd_shortcode('product-list','my_product_list');functionmy_product_list($args){$save_post=$GLOBALS['post'];//Savestatesoyoucanrestorelater$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 (vous supposez 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 administrateur.
  2. Cliquez sur " + " pour ajouter un nouveau menu.
  3. Saisissez le nom de votre menu, celui que vous préférez.
  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 "Navigation principale" .
  6. Sélectionnez votre page "Produits ".
  7. Cliquez sur "Ajouter au menu" .
  8. Cliquez sur "Enregistrer le menu" .

Enfin,lasortie

Etvoiciàquoipourraitressemblerunelistedeproduitsdebase:

    
réponse donnée MikeSchinkel 23.08.2010 - 22:26
4

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.

Toutefois, si vous souhaitez 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:

enlace

Cela vous donne des champs supplémentaires pour personnaliser vos liens permanents (comme avec les articles de blog) et vous donne 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.

    
réponse donnée John P Bloch 23.08.2010 - 16:53
0
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 de comment faire cela?

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 alors redirigé vers une page d'archive de tous les produits de la taxonomie utilisée.

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

Sijevoulaistouslesemploisavecletermedetaxonomie"Ouvertures actuelles", je le sélectionnerais et l'ajouterais au menu.

Sitousvostypesdepublication"produits" doivent figurer 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.

    
réponse donnée Chris_O 23.08.2010 - 18:21
0

Je pense que la meilleure solution est de créer via un type de message personnalisé un type de message Archive et de 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 .

    
réponse donnée bueltge 18.05.2011 - 16:30

Lire d'autres questions sur les étiquettes