问题描述

我有一个名为”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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。