问题描述
我有一个名为”Products” 的自定义帖子类型和名为”Usage” 的分类。在我的”Products” 着陆页上,我想要通过客户端通过所见即所得编辑的自定义内容。分类学着陆页也是一样。我的想法是创建假页面,只需将内容通过 ID 拖入我的 archive-products.php 和 taxonomy-usage.php 模板,但我很好奇,如果有一个更好的方法来处理它。
最佳解决方案
第一个解决方案可以使用 Settings API 并创建 2 个字段”Products Description” 和”Usage Description”,之后在模板中显示字段很容易像:
$options = get_option('my_theme_options');
echo $options['prod_description'];
// echo $options['usage_description'];
但是,设置 API 不是 WP 核心的最好的部分,并且可能创建一个设置页面,只有这些字段不值得。
另一种方法是使用页面 (使用 custom page template) 作为存档。
创建页面并调用它”Product Archive”
在它里面就是这样的:
<?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();
该文件的作用是创建自定义页面模板。该模板可以附加到页面,但是这些页面无法直接调用,因为如果您尝试,那么您将被重定向到主页。
现在登录您的后端并创建一个页面,标题为”Products Description” 并分配刚创建的页面模板。如果您尝试访问 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 );
}
现在您的客户端可以登录后端并编辑页面”Products Description”,并且页面内容中的所有内容都将显示在存档页面中。
相同的,当然可以做分类归档。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。