Hay tudo, eu estou brincando com o WordPress 3.0 e dois (2) dos novos recursos, Custom Post Types e Menu Editor .
Comecei criando um novo tipo de post chamado "products
", como você adivinhou, esta lista de produtos.
Estou usando o modelo padrão do bog e estou criando um novo menu para substituir a navegação superior. Tanto quanto eu posso ver, eu só posso adicionar certos "produtos" para isso, eu não posso adicionar um "arquivo" de produtos. O que eu estou tentando fazer é adicionar um link para o menu para ir para uma página que lista todos os produtos.
Alguma idéia de como fazer isso?
@dotty Como você pode ver por este ticket do trac: deve haver páginas de índice para tipos de posts customizados então obviamente a necessidade ainda não foi endereçada no núcleo do WordPress.
Tanto @John P Bloch quanto @Chris_O oferecem boas alternativas; Eu vou te dar um terceiro.
Primeiro Crie umPagepara seu tipo de postagem personalizado e chame-o de "Produtos". Isso fornecerá o seguinte URL:
Em seguida, crie um Shortcode que você pode incorporar em sua página "Produtos". No meu exemplo, chamei de [product-list]
. Aqui está uma captura de tela de como seria:
(fonte: mikeschinkel.com )
Observe que esse shortcode seria um ótimo candidato para adicionar muitas funcionalidades opcionais e permitir que ele funcionasse para muitos tipos diferentes de postagens, mas no interesse da clareza, praticamente codifiquei tudo. Você pode, obviamente, usá-lo como ponto de partida para seu próprio 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);
}
}
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>
Por último você vai querer 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 o Twenty Ten):
(fonte: mikeschinkel.com )
E aqui está uma lista básica de produtos:
(fonte: mikeschinkel.com )
Isso não é suportado nativamente pelo WordPress. No entanto, você poderia adicionar isso ao seu arquivo functions.php e ele 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:
http://www.wordpress.org/extend/plugins/custom-post-permalinks/
Isso lhe dá campos extras para personalizar seus permalinks (como você pode fazer com postagens de blog), e lhe dará a capacidade de personalizar permalinks com base na categoria, autor, mês, ano, tipo de postagem, etc.
Eu acho que é uma solução melhor para criar através de post personalizado digite um tipo de arquivo de post e mover as mensagens arquivadas neste 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 .
Tanto quanto eu posso ver eu só posso adicionar certos "produtos" para ele, eu não posso adicionar um "arquivo" de produtos. O que eu estou tentando fazer é adicionar um link para o menu para ir para 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, incluir o termo de taxonomia em um de seus menus personalizados, o 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"
Se eu quisesse todos os trabalhos com o termo de taxonomia "Aberturas Atuais", eu selecionaria e adicionaria ao menu.
Se você precisar ter todos os tipos de postagem de "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.