Добавление контента на страницы архива и таксономии для пользовательских типов записей?

8

У меня есть пользовательский тип записи под названием «Продукты» и таксономия под названием «Использование». На моей целевой странице "Продукты" я хотел бы иметь пользовательский контент, который может редактировать клиент через WYSIWYG. То же самое касается целевой страницы таксономии. Я думал о том, чтобы создать поддельные страницы и просто вставить содержимое с помощью идентификатора в мои шаблоны archive-products.php и taxonomy-Использование.php, но мне было любопытно, есть ли лучший способ справиться с этим.

paper_robots
источник

Ответы:

12

Первым решением может быть использование API настроек и создание 2 полей «Описание продуктов» и «Описание использования» , после чего в вашем шаблоне показывается, что поля выглядят как:

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

Однако API настроек - не самая лучшая часть ядра WP, и, вероятно, создать страницу настроек только для тех полей, которые этого не стоят.

Другой подход - использовать страницу (с пользовательским шаблоном страницы ) в качестве архива.

Создайте страницу и назовите ее «Архив продуктов»

В него положите что-то вроде этого:

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

После этого в вашем бэкэнде создайте страницу и назначьте ее только что созданному шаблону. Напишите все, что вы хотите в содержании страницы, и когда вы откроете страницу, вы увидите содержимое страницы и продуктов.

То же самое можно сделать для страницы таксономии. Просто измените шаблон страницы и запрос в нем.

Если по какой-либо причине вам необходимо использовать в archive-products.phpкачестве архива продукта, альтернативой является создание пользовательского шаблона, но используйте его только для получения содержимого страницы.

Создайте php-файл в своей теме и назовите его «page-prod-description.php» . В этот файл положено только:

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

Этот файл создает пользовательский шаблон страницы. Этот шаблон можно прикрепить к страницам, но эти страницы нельзя вызвать напрямую , потому что, если вы попробуете его, вы будете перенаправлены на домашнюю страницу.

Теперь войдите в свой бэкэнд и создайте страницу, назовите ее «Описание продукта» и назначьте только что созданный шаблон страницы. Если вы попытаетесь получить доступ к странице, http://example.com/product-descriptionвы будете перенаправлены на домашнюю страницу.

В шаблоне архива вашего продукта archive-products.phpвы можете использовать содержимое, вставленное на эту страницу, следующим образом:

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

Теперь ваши клиенты могут войти в бэкэнд и отредактировать страницу «Описание продуктов», и все написанное в контенте страницы будет показано на странице архива.

То же самое, конечно, можно сделать для архива таксономии.

Gmazzap
источник
Но это повлияет на main_queryобъект $wp_queryи приведет к тому, что он не выведет права post_typeна запрос, выполняемый на страницах архива. Который сделает ваши звонки на фильтры как pre_get_postsдля архивной страницы бесполезной. Это главная проблема. Wordpress также должен предоставить средства для управления архивами типов записей и таксономическими архивами.
Соломон Клоссон
Оба метода, которые вы предоставили, являются Sloppyспособом решения этой проблемы. Но, к сожалению, нет чистого способа сделать это. Wordpress должен обеспечить чистый путь, IMO!
Соломон Клоссон
0

Вы можете создать обычные страницы, а затем применить пользовательские шаблоны, которые содержат соответствующий пользовательский цикл для вывода CPT. Или вы можете создать страницу параметров (или добавить параметр в Theme Customizer), где клиент может добавить содержимое через WYSIWYG, а затем вывести это содержимое в соответствующий шаблон архива.

markcbain
источник
Какой-нибудь пример базового кода, который вы бы использовали для этого?
Брэд Далтон