Первым решением может быть использование 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 );
}
Теперь ваши клиенты могут войти в бэкэнд и отредактировать страницу «Описание продуктов», и все написанное в контенте страницы будет показано на странице архива.
То же самое, конечно, можно сделать для архива таксономии.
main_query
объект$wp_query
и приведет к тому, что он не выведет праваpost_type
на запрос, выполняемый на страницах архива. Который сделает ваши звонки на фильтры какpre_get_posts
для архивной страницы бесполезной. Это главная проблема. Wordpress также должен предоставить средства для управления архивами типов записей и таксономическими архивами.Sloppy
способом решения этой проблемы. Но, к сожалению, нет чистого способа сделать это. Wordpress должен обеспечить чистый путь, IMO!Вы можете создать обычные страницы, а затем применить пользовательские шаблоны, которые содержат соответствующий пользовательский цикл для вывода CPT. Или вы можете создать страницу параметров (или добавить параметр в Theme Customizer), где клиент может добавить содержимое через WYSIWYG, а затем вывести это содержимое в соответствующий шаблон архива.
источник