在自定义帖子类型上向存档和分类页面添加内容?


8

我有一个名为“产品”的自定义帖子类型和一个名为“用法”的分类法。在我的“产品”着陆页上,我希望有可以由客户通过所见即所得进行编辑的自定义内容。分类登陆页面也是如此。我的想法是创建伪造的Pages,然后通过ID将内容提取到我的archive-products.php和taxonomy-usage.php模板中,但是我很好奇是否有更好的处理方法。

Answers:


12

第一个解决方案可以使用Settings API并创建2个字段“ Products Description”“ Usage Description”,然后在模板中显示该字段很容易,例如:

$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,WordPress需要在这里提供一种干净的方法!
所罗门·克洛森

0

您可以创建普通页面,然后应用包含适当的自定义循环的自定义模板来输出CPT。或者,您可以创建一个选项页面(或向主题定制器添加一个选项),客户端可以在其中通过所见即所得添加内容,然后在适当的存档模板中输出此内容。


您会使用基本代码的任何示例吗?
布拉德·道尔顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.