Adicionando um arquivo de postagens ao menu de navegação no WordPress 3.0


10

Tudo bem, estou brincando com o WordPress 3.0 e dois (2) dos novos recursos, Tipos de postagem personalizados e o Editor de menus .

Comecei criando um novo tipo de postagem chamado " products", como você adivinhou, nesta lista de produtos.

Estou usando o modelo padrão do pântano e criando um novo menu para substituir a navegação superior. Tanto quanto vejo, posso adicionar apenas certos "produtos" , não consigo adicionar um "arquivo" de produtos. O que estou tentando fazer é adicionar um link ao menu para acessar uma página que lista TODOS os produtos.

Alguma idéia de como fazer isso?

Respostas:


12

@dotty Como você pode ver por este tíquete do trac: Deve haver páginas de índice para tipos de post personalizados, portanto, obviamente, a necessidade ainda não foi abordada no núcleo do WordPress.

@John P Bloch e @Chris_O oferecem boas alternativas; Eu vou te dar uma terceira.

A "Produtos" Página

Primeiro, crie uma página para o seu tipo de postagem personalizada e chame-a de "Produtos" . Isso fornecerá o seguinte URL:

http: //example.php/products/

Um código de acesso "Lista de produtos"

Em seguida, crie um Shortcode que você possa incorporar à sua página "Produtos" . No meu exemplo, eu chamei isso [product-list]. Aqui está uma captura de tela de como usá-lo:

A página de um produto que usa um Shortcode para exibir uma lista de produtos no WordPress
(fonte: mikeschinkel.com )

Observe que esse código curto seria um ótimo candidato para adicionar muitas funcionalidades opcionais e permitir que ele funcionasse para muitos tipos diferentes de postagens, mas por questões de clareza, eu praticamente codifiquei tudo. Obviamente, você pode usá-lo como ponto de partida para seu próprio código de acesso:

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

Um post-product.phparquivo de modelo de tema

Em seguida, você precisará criar um arquivo de modelo de tema que exiba apenas um produto. A função que implementa o shortcode nomeia o arquivo de modelo post-product.phpe aqui está um bom ponto 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>

Adicione a opção de menu

Por último, você deseja adicionar a opção de menu. Isso é muito simples, como você pode ver nesta captura de tela (o seguinte pressupõe que você não fez nada com os menus do WordPress 3.0 antes e que está usando um tema compatível com menus do WordPress 3.0, como o Twenty Ten):

  1. Selecione a opção de menu no menu admin.
  2. Clique no " + " para adicionar um novo menu.
  3. Digite o nome do menu, como quiser.
  4. Clique no botão "Criar menu" (a captura de tela mostra "Salvar menu", mas será "Criar menu" ao adicionar.)
  5. Selecione seu novo menu como sua "Navegação primária" .
  6. Selecione sua página " Produtos ".
  7. Clique em "Adicionar ao menu"
  8. Clique em "Salvar menu"

Adicionando uma opção de menu da página de produtos a um site WordPress
(fonte: mikeschinkel.com )

Finalmente, a saída

E aqui está a aparência de uma lista de produtos básica:

Uma lista de produtos usando um tipo de postagem personalizado no WordPress
(fonte: mikeschinkel.com )


A questão deixada de lado é como modificar a entrada do menu de produtos para fornecer um submenu com todos os produtos.
hakre

@harke Atualizado.
MikeSchinkel

bem, isso não foi um pedido :). Eu só me perguntei como o menu suspenso se torna automaticamente criado e acho que isso ainda não está valendo. Mas, como está escrito, isso não é um pedido.
hakre

Olá, estou com um problema e espero que você possa ajudar. O problema é current-menu-itemclasse não é aplicado em produtos 'li
Reigel

Imagens ausentes. : /
fuxia

4

Isso não é suportado nativamente pelo WordPress. No entanto, você pode adicionar isso ao seu arquivo functions.php e funcionaria:

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

Isso fornecerá example.com/products/ como uma lista de produtos. A partir daí, basta adicionar um link personalizado ao seu menu.

No entanto, se você deseja um verdadeiro arquivamento (por mês, ano etc.) com feeds, precisará de um código mais detalhado. Se seus 'produtos' são um tipo de postagem não hierárquica (parece que deveriam ser), você pode usar meu plugin:

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

Isso fornece campos extras para personalizar seus links permanentes (como você pode com as postagens do blog) e permite personalizar links permanentes com base na categoria, autor, mês, ano, tipo de postagem etc.


Obrigado por algumas ótimas informações aqui. Estou procurando a mesma coisa, mas apesar de tudo estar funcionando bem com a reescrita, estou bloqueado porque, quando adiciono o link personalizado ao menu, o site público parece não alterar o css, indicando que um visitante está nessa página. Você poderia me informar como isso é feito, para que eu possa mostrar o item de menu no estado "ligado", se estiver dentro do arquivo "produtos"?
NetConstructor.com

0
Tanto quanto vejo, posso adicionar apenas certos "produtos", não consigo adicionar um "arquivo" de produtos. O que estou tentando fazer é adicionar um link ao menu para acessar uma página que lista TODOS os produtos. Alguma idéia de como fazer isso?

Você precisaria atribuir uma taxonomia ao tipo de postagem "produtos" e, em seguida, adicionar o termo de taxonomia a um de seus menus personalizados, que levaria o usuário a uma página de arquivo de todos os produtos com a taxonomia utilizada.

Exemplo: Eu tenho um tipo de postagem personalizado chamado "Trabalhos" com uma taxonomia denominada "posições" texto alternativo

Se eu quisesse todos os trabalhos com o termo de taxonomia "Vagas atuais", selecioná-lo e adicioná-lo ao menu. texto alternativo

Se você precisar ter todos os tipos de postagem de "produtos" na página de arquivamento, poderá atribuir uma taxonomia pai a todos eles, para que todos possam ser listados na página de arquivamento.


@ Chris_O : Esta é uma maneira, mas não a única, e também exige bastante esforço para manter a categorização pelo usuário. JMTCW de qualquer maneira.
MikeSchinkel

Faz sentido. Esperamos que a página de índice do tipo de postagem personalizada seja abordada no núcleo.
Chris_O

0

Eu acho que é uma solução melhor criar via postagem personalizada um tipo de postagem Archive e mover as postagens arquivadas nesse arquivo. Adicione também o post_type atual ao postmeta deste novo post_type para desfazer isso. Eu escrevi um plugin para isso e atual, você pode vê-lo, sem folhas de estilo, imagens e arquivo de idioma, em gist.github / 978690 .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.