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

10

Hay all, estou brincando com o WordPress 3.0 e dois (2) dos novos recursos, Custom Post Types e o Menu Editor .

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

Estou usando o modelo padrão do bog e estou criando um novo menu para substituir a navegação superior. Até onde eu posso ver, eu só posso adicionar certos "produtos" , eu não posso adicionar um "arquivo" de produtos. O que estou tentando fazer é adicionar um link ao menu para ir a uma página que lista TODOS os produtos.

Alguma ideia de como fazer isso?

    
por dotty 23.08.2010 / 16:04

4 respostas

12

@dotty Como você pode ver por este bilhete do trac: Há deve ser páginas de índice para tipos de postagem personalizados então obviamente a necessidade ainda não foi abordada no núcleo do WordPress.

Tanto @John P Bloch quanto @Chris_O oferecem boas alternativas; Eu vou te dar um terceiro.

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:

  

enlace

A "Lista de Produtos" Shortcode

Em seguida, crie um Shortcode que você pode incorporar em "Produtos" página. No meu exemplo eu chamei de [product-list] . Aqui está uma captura de tela de como seria:

Observequeesseshortcodeseriaumótimocandidatoparaadicionarmuitasfuncionalidadesopcionaisepermitirqueelefuncionasseparamuitostiposdiferentesdepostagens,masnointeressedaclareza,praticamentecodifiqueitudo.Vocêpodeusá-locomopontodepartidaparaseupróprioshortcode:

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

Um arquivo de modelo de tema post-product.php

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.php e 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ê desejará 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 tenha feito nada com menus do WordPress 3.0 antes e que esteja usando um tema que suporte menus do WordPress 3.0 como Twenty Ten):

  1. Selecione a opção de menu no menu do administrador.
  2. Clique no " + " para adicionar um novo menu.
  3. Digite o nome do seu menu, o que você quiser.
  4. Clique no botão "Criar menu" (a 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"

Finalmente,oresultado

Eaquiestáumalistabásicadeprodutos:

    
por MikeSchinkel 23.08.2010 / 22:26
4

Isso não é suportado nativamente pelo WordPress. No entanto, você poderia 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 lhe dará example.com/products/ como uma lista de produtos. A partir daí, basta adicionar um link personalizado ao seu menu.

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

enlace

Isso lhe dá campos extras para personalizar seus permalinks (como você pode com postagens de blog), e lhe dará a capacidade de personalizar permalinks com base na categoria, autor, mês, ano, tipo de postagem, etc.

    
por John P Bloch 23.08.2010 / 16:53
0
Tanto quanto eu posso ver só posso adicionar certos "produtos" para ele, não posso adicionar um "arquivo" de produtos. O que estou tentando fazer é adicionar um link ao menu para ir a 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 adicionar o termo de taxonomia a um de seus menus personalizados, que levaria o usuário a uma página de arquivamento de todos os produtos sob a taxonomia usada.

Exemplo Eu tenho um tipo de post personalizado chamado "Jobs" com uma taxonomia rotulada "posições"

Seeuquisessetodosostrabalhoscomotermodetaxonomia"Aberturas atuais", eu os selecionaria e os adicionaria ao menu.

Sevocêprecisartertodosostiposdepostagem"produtos" na página de arquivo, poderá atribuir uma taxonomia pai a todos eles para que todos possam ser listados na página de arquivo.

    
por Chris_O 23.08.2010 / 18:21
0

Acho que é uma solução melhor criar, por meio de postagem personalizada, um tipo de postagem Arquivo e mover as postagens arquivadas nesse arquivo. Adicione também o post_type atual à postmeta deste novo post_type para desfazer isso. Eu tenho escrever um plugin para isso e atual você pode ver isso, sem folhas de estilo, imagens e arquivo de idioma, em gist.github / 978690 .

    
por bueltge 18.05.2011 / 16:30