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 personalizadas y el Editor de menús .

Comencé creando un nuevo tipo de publicación llamado " products", como habrás adivinado, esta lista de productos.

Estoy usando la plantilla estándar de bog y estoy creando un nuevo menú para reemplazar el navegador superior. Hasta donde puedo ver, solo puedo agregarle ciertos "productos" , no puedo agregar un "archivo" de productos. Lo que intento hacer es agregar un enlace al menú para ir a una página que enumere TODOS los productos.

¿Alguna idea de cómo hacer esto?

Respuestas:


12

@dotty Como puede ver en este ticket de seguimiento: debe haber páginas de índice para los 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 te dan buenas alternativas; Te voy a dar un 3er.

Un "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:

http: //example.php/products/

Un shortcode "Lista de productos"

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

La página de un producto que usa un código corto para mostrar una lista de productos en WordPress
(fuente: mikeschinkel.com )

Tenga en cuenta que un código tan corto sería un gran candidato para agregar muchas funciones opcionales y permitir que funcione para muchos tipos de publicaciones diferentes, pero en aras de la claridad, prácticamente codifiqué todo. Por supuesto, puede usarlo como punto de partida para su propio 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.phparchivo de plantilla de tema

A continuación, deberá crear un archivo de plantilla de tema que solo muestre un producto. La función que implementa el shortcode nombra el archivo de plantilla post-product.phpy 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>

Agregar 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 antes con los menús de WordPress 3.0 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. Haga 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 de "Productos ".
  7. Haga clic en "Agregar al menú"
  8. Haga clic en "Guardar menú"

Agregar una opción de menú de página de productos a un sitio de WordPress
(fuente: mikeschinkel.com )

Finalmente, la salida

Y así es como se vería una lista básica de productos:

Una lista de productos que utilizan un tipo de publicación personalizada en WordPress
(fuente: mikeschinkel.com )


La pregunta que queda fuera es cómo modificar la entrada del menú de productos para que proporcione un submenú con todos los productos.
Hakre

@harke Actualizado.
MikeSchinkel

bueno eso no fue una solicitud :). Me preguntaba cómo se crea automáticamente el menú desplegable y creo que todavía no está disponible. Pero como está escrito, eso no es una solicitud.
Hakre

Hola, tengo un problema con esto y espero que puedas ayudar. El problema es que la current-menu-itemclase no se aplica a los productos 'li
Reigel

Faltan imágenes. : /
fuxia

4

Esto no es compatible de forma nativa con 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 archivo verdadero (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 ser), puede usar mi complemento:

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

Eso le brinda campos adicionales para personalizar sus enlaces permanentes (como puede hacerlo con publicaciones de 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.


Gracias por una gran información aquí. Estoy buscando lo mismo, pero aunque todo funciona bien con la reescritura, estoy atascado porque cuando agrego el enlace personalizado al menú, el sitio web público no parece cambiar el CSS que indica que un visitante está en esa página. ¿Podría decirme cómo se hace esto para que pueda mostrar el elemento del menú en el estado "activado" si está dentro del archivo de "productos"?
NetConstructor.com

0
Hasta donde puedo ver, solo puedo agregarle ciertos "productos", no puedo agregar un "archivo" de productos. Lo que intento hacer es agregar un enlace al menú para ir a una página que enumere TODOS los productos. ¿Alguna idea de cómo hacer esto?

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

Ejemplo Tengo un tipo de publicación personalizado llamado "Empleos" con una taxonomía etiquetada como "posiciones" texto alternativo

Si quisiera todos los trabajos con el término de taxonomía "Aperturas actuales", lo seleccionaría y lo agregaría al menú. texto alternativo

Si necesita tener todos sus tipos de publicación de "productos" en la página de archivo, puede asignar una taxonomía principal a todos ellos para que todos puedan figurar en la página de archivo.


@Chris_O : esta es una forma, pero no la única, y también requiere un esfuerzo considerable para mantener la categorización por parte del usuario. JMTCW de todos modos.
MikeSchinkel

Tiene sentido. Esperemos que la página de índice de tipo de publicación personalizada se aborde en el núcleo.
Chris_O

0

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.