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

10

Hay all, je joue avec WordPress 3.0 et deux (2) des nouvelles fonctionnalités, Custom Post Types et l' éditeur de menu .

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 de tourbière et je crée un nouveau menu pour remplacer la navigation supérieure. Pour autant que je puisse voir, je ne peux y ajouter que certains "produits" , je ne peux pas ajouter une "archive" de produits. Ce que j'essaie de faire, c'est d'ajouter un lien vers le menu pour accéder à une page qui répertorie TOUS les produits.

Une idée de comment faire ça?

dingue
la source

Réponses:

12

@dotty Comme vous pouvez le voir sur ce ticket Trac: il devrait y avoir des pages d'index pour les types de publication personnalisés, de sorte que le besoin n'a pas encore été résolu dans WordPress Core.

@John P Bloch et @Chris_O vous offrent de bonnes alternatives; Je vais te donner un 3e.

A "Produits" page

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

http: //example.php/products/

Un shortcode "Liste des produits"

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

La page d'un produit qui utilise un shortcode pour afficher une liste de produits dans 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 de nombreux types de messages différents, mais dans un souci de clarté, j'ai à peu près 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 post-product.phpfichier de modèle de thème

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.phpet voici 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 (ce qui suit suppose que vous n'avez rien fait avec les menus WordPress 3.0 auparavant et que vous utilisez un thème qui prend 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 le nom de votre menu, comme vous le souhaitez.
  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"

Ajout d'une option de menu de page de produits à un site WordPress
(source: mikeschinkel.com )

Enfin, la sortie

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

Une liste de produits utilisant un type de publication personnalisé dans WordPress
(source: mikeschinkel.com )

MikeSchinkel
la source
La question laissée de côté est de savoir comment modifier l'entrée de menu des produits afin qu'elle fournisse un sous-menu avec tous les produits.
hakre
@harke Mis à jour.
MikeSchinkel
et bien ce n'était pas une demande :). Je me demandais simplement comment le menu déroulant se crée automatiquement et je pense que ce n'est toujours pas le cas. Mais comme écrit, ce n'est pas une demande.
hakre
Salut, j'ai un problème avec cela et j'espère que vous pourrez aider. Le problème est que la current-menu-itemclasse n'est pas appliquée sur les produits »li
Reigel
Images manquantes. : /
fuxia
4

Ce n'est pas pris en charge nativement par WordPress. Cependant, vous pouvez l'ajouter à votre fichier functions.php et cela fonctionnerait:

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/ comme une liste de produits. 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 un type de publication non hiérarchique (il semble qu'ils devraient 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 permaliens (comme vous pouvez le faire avec les articles de blog), et vous donnera la possibilité de personnaliser les permaliens en fonction de la catégorie, de l'auteur, du mois, de l'année, du type de publication, etc.

John P Bloch
la source
Merci pour quelques bonnes informations ici. Je cherche la même chose mais bien que tout fonctionne bien avec la réécriture, je suis coincé parce que lorsque j'ajoute le lien personnalisé au menu, le site Web public ne semble pas changer le CSS indiquant qu'un visiteur est sur cette page. Pourriez-vous s'il vous plaît me faire savoir comment cela est fait afin que je puisse afficher l'élément de menu dans l'état "on" si vous êtes dans l'archive "produits"?
NetConstructor.com
0
Pour autant que je puisse voir, je ne peux y ajouter que certains "produits", je ne peux pas ajouter une "archive" de produits. Ce que j'essaie de faire, c'est d'ajouter un lien vers le menu pour accéder à une page qui répertorie TOUS les produits. Une idée de 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, ce qui amènera l'utilisateur à une page d'archive de tous les produits sous la taxonomie utilisée.

Exemple J'ai un type de publication personnalisé appelé "Jobs" avec une taxonomie intitulée "positions" texte alternatif

Si je voulais tous les emplois avec le terme de taxonomie "Current Openings" je le sélectionnerais et l'ajouterais au menu. texte alternatif

Si vous avez besoin d'avoir tous vos types de publication "produits" sur la page d'archive, vous pouvez attribuer une taxonomie parent à chacun d'eux afin qu'ils puissent tous être répertoriés sur la page d'archive.

Chris_O
la source
@Chris_O : C'est une façon, mais pas la seule, et cela demande également beaucoup d'efforts pour maintenir la catégorisation par l'utilisateur. JMTCW quand même.
MikeSchinkel
Logique. Espérons que la page d'index du type de message personnalisé sera traitée dans le noyau.
Chris_O
0

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

bueltge
la source