Adicionando conteúdo a páginas de arquivo e taxonomia em tipos de postagem personalizados?

8

Eu tenho um tipo de postagem personalizado chamado "Produtos" e uma taxonomia chamada "Uso". Na minha página de destino "Produtos", eu gostaria de ter um conteúdo personalizado que possa ser editado pelo WYSIWYG pelo cliente. O mesmo vale para a página de destino da taxonomia. Meu pensamento era criar páginas falsas e apenas inserir o conteúdo via ID nos meus modelos archive-products.php e taxonomy-use.php, mas fiquei curioso para saber se havia uma maneira melhor de lidar com isso.

paper_robots
fonte

Respostas:

12

A primeira solução pode ser usar a API de configurações e criar 2 campos "Descrição dos produtos" e "Descrição do uso" , depois mostrar no seu modelo que os campos são fáceis como:

$options = get_option('my_theme_options');
echo $options['prod_description'];
// echo $options['usage_description'];

No entanto, a API de configurações não é a melhor parte do núcleo do WP e provavelmente cria uma página de configurações apenas para os campos que não valem a pena.

Outra abordagem é usar a página (com um modelo de página personalizado ) como arquivo morto.

Crie uma página e chame-a de "Arquivo do produto"

Nele coloque algo assim:

<?php
/*
Template Name: Products Archive
*/

 get_header();

 if ( have_posts() ) the post();

 the_content(); // this will output the page content     

 $p_query = new WP_Query('post_type=products');
 if ( $p_query->have_posts() ) { while( $p_query->have_posts() ) {
   $p_query->the_post();
   // this will require a 'entry-product.php' where you can put all your product markup
   get_template_part('entry', 'product');
 } }
 wp_reset_postdata();

 get_footer();

Depois disso, no seu back-end, crie uma página e atribua-a ao modelo recém-criado. Escreva o que quiser no conteúdo da página e, quando abrir a página, verá o conteúdo da página e os produtos.

O mesmo pode ser feito para a página de taxonomia. Basta alterar o modelo da página e a consulta.

Se, por qualquer motivo, você precisar usar archive-products.phpcomo arquivo do produto, uma alternativa é criar um modelo personalizado, mas use-o apenas para recuperar o conteúdo da página.

Crie um arquivo php no seu tema e denomine 'page-prod-description.php' . Neste arquivo, coloque apenas:

<?php
/*
Template Name: Products Description
*/
wp_safe_redirect( home_url() );
exit();

O que esse arquivo faz é criar um modelo de página personalizado. Esse modelo pode ser anexado às páginas, mas essas páginas não podem ser chamadas diretamente , porque, se você tentar, será redirecionado para a página inicial.

Agora, faça login no seu back-end e crie uma página, intitule-a "Descrição dos produtos" e atribua o modelo de página recém-criado. Se você tentar acessar a página, http://example.com/product-descriptionserá redirecionado para a página inicial.

No modelo de arquivo do produto archive-products.php, você pode usar o conteúdo inserido nessa página da seguinte maneira:

$desc = get_pages('meta_key=_wp_page_template&meta_value=page-prod-description.php');
if ( ! empty($desc) ) {
   $page = array_shift($desc);
   echo apply_filters('the_content', $page->post_content );
}

Agora seus clientes podem fazer login no back-end e editar a página "Descrição dos produtos" e tudo o que estiver escrito no conteúdo da página será mostrado na página do arquivo.

O mesmo, é claro, pode ser feito para o arquivo de taxonomia.

gmazzap
fonte
Mas fazer isso afetará o main_queryobjeto $wp_querye fará com que ele não produza o direito post_typepara a consulta que ocorre nas páginas de arquivamento. O que tornará suas chamadas para filtros semelhantes pre_get_postsa uma página de arquivo inútil. Esse é o principal problema. O Wordpress também precisa fornecer um meio para GERENCIAR Arquivos de Tipo de Post e Conteúdo de Arquivos de Taxonomia.
Solomon Closson
Os dois métodos que você forneceu são uma Sloppymaneira de lidar com isso. Mas, infelizmente, não há uma maneira limpa de fazer isso. Wordpress precisa fornecer uma maneira limpa aqui, IMO!
Solomon Closson
0

Você pode criar páginas normais e aplicar modelos personalizados que contêm o loop personalizado apropriado para gerar o CPT. Ou você pode criar uma página de opções (ou adicionar uma opção ao Theme Customizer), onde o cliente pode adicionar conteúdo via WYSIWYG e, em seguida, gerar esse conteúdo no modelo de arquivo apropriado.

markcbain
fonte
Algum exemplo do código básico que você usaria para fazer isso?
Brad Dalton