Agregar un archivo de publicaciones al menú de navegación en WordPress 3.0

10

Hay todo, estoy jugando con WordPress 3.0 y dos (2) de las nuevas funciones, Tipos de publicaciones personalizados y Editor de menú .

Comencé por crear un nuevo tipo de publicación llamada " products ", como ha adivinado, esta lista de productos.

Estoy usando la plantilla estándar de bog y estoy creando un nuevo menú para reemplazar la barra de navegación superior. Por lo que puedo ver, solo puedo agregarle "productos" , no puedo agregar un "archivo" de productos. Lo que estoy tratando de hacer es agregar un enlace al menú para ir a una página que enumera TODOS los productos.

¿Alguna idea de cómo hacer esto?

    
pregunta dotty 23.08.2010 - 16:04

4 respuestas

12

@dotty Como puede ver en este ticket de trac: Allí deben ser páginas de índice para tipos de publicaciones personalizadas , por lo que obviamente la necesidad aún no se ha abordado en el núcleo de WordPress.

Tanto @John P Bloch como @Chris_O le ofrecen buenas alternativas; Te voy a dar una tercera.

Una "Productos" Página

Primero cree una Página para su tipo de publicación personalizada y llámela "Productos" . Eso le dará la siguiente URL:

  

enlace

Un "Lista de productos" Código corto

A continuación, cree un Shortcode que puede incrustar en sus "Productos" página. En mi ejemplo lo llamé [product-list] . Aquí hay una captura de pantalla de cómo se vería su uso:

Tengaencuentaquedichocódigoabreviadoseríaungrancandidatoparaagregarmuchasfuncionalidadesopcionalesypermitirquefuncioneparamuchostiposdepublicacionesdiferentes,peroenarasdelaclaridad,lohecodificadotodo.Porsupuesto,puedeusarlocomopuntodepartidaparasupropiocódigoabreviado:

<?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 archivo de plantilla de tema post-product.php

A continuación, deberá crear un archivo de plantilla de tema que solo muestre un producto. La función que implementa el código abreviado nombra el archivo de plantilla post-product.php y aquí hay un buen punto de partida:

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

Añadir la opción de menú

Por último, querrás agregar la opción de menú. Esto es muy sencillo, como puede ver en esta captura de pantalla (lo siguiente supone que no ha hecho nada con los menús de WordPress 3.0 anteriormente y que está utilizando un tema que admite menús de WordPress 3.0 como Twenty Ten):

  1. Seleccione la opción de menú en el menú de administración.
  2. Haz clic en " + " para agregar un nuevo menú.
  3. Escriba el nombre de su menú, lo que quiera.
  4. Haga clic en el botón "Crear menú" (la captura de pantalla muestra "Guardar menú" , pero será "Crear menú" al agregar .)
  5. Seleccione su nuevo menú como su "Navegación principal" .
  6. Seleccione su página "Productos ".
  7. Haz clic en "Agregar al menú"
  8. Haz clic en "Guardar menú"

Finalmente,lasalida

Yestoesloquepodríaparecerunalistadeproductosbásicos:

    
respondido por el MikeSchinkel 23.08.2010 - 22:26
4

Esto no es soportado de forma nativa por WordPress. Sin embargo, podría agregar esto a su archivo functions.php y funcionaría:

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

Eso le dará example.com/products/ como una lista de productos. A partir de ahí, solo agrega un enlace personalizado a su menú.

Sin embargo, si desea un verdadero archivo (por mes, año, etc.) con feeds, necesita un código más detallado. Si sus 'productos' son un tipo de publicación no jerárquica (parece que deberían serlo), puede usar mi complemento:

enlace

Eso le brinda campos adicionales para personalizar sus enlaces permanentes (como puede hacer con las publicaciones del blog), y le dará la posibilidad de personalizar enlaces permanentes según la categoría, el autor, el mes, el año, el tipo de publicación, etc.     

respondido por el John P Bloch 23.08.2010 - 16:53
0
Por lo que puedo ver, solo puedo agregarle ciertos "productos", no puedo agregar un "archivo" de productos. Lo que estoy tratando de hacer es agregar un enlace al menú para ir a una página que enumera TODOS los productos. ¿Alguna idea de cómo hacer esto?

Deberá asignar una taxonomía al tipo de publicación de "productos" y luego agregar el término de taxonomía a uno de sus menús personalizados, que luego llevará al usuario a una página de archivo de todos los productos bajo la taxonomía utilizada.

Ejemplo Tengo un tipo de publicación personalizada llamada "Trabajos" con una taxonomía denominada "posiciones"

Siquisieratodoslostrabajosconeltérminodetaxonomía"Aperturas actuales", lo seleccionaría y lo agregaría al menú.

Sinecesitatenertodoslostiposdepublicacionesdesus"productos" en la página de archivo, puede asignarles una taxonomía principal a todos ellos para que todos puedan aparecer en la página de archivo.

    
respondido por el Chris_O 23.08.2010 - 18:21
0

Creo que es una mejor solución para crear a través de una publicación personalizada escriba un tipo de publicación Archivar y mueva las publicaciones archivadas en este archivo. También agregue el post_type actual al postmeta de este nuevo post_type para deshacer esto. He escrito un complemento para esto y, actualmente, puede ver esto, sin hojas de estilo, imágenes ni archivo de idioma, en gist.github / 978690 .

    
respondido por el bueltge 18.05.2011 - 16:30

Lea otras preguntas en las etiquetas