如何根据类别在单个 post 中显示自定义字段?
How to display custom fields in single post based on category?
我正在使用 WordPress 在本地开发一个网站,并使用高级自定义字段插件创建了一组字段,这些字段将在 post 类别设置为 'Front Page Events' 时显示。这个类别有 fpe
.
我将下面的代码放在 child 主题的 functions.php
中以创建单个模板文件夹的路径:
/*
* Creates a path to single template folder for Front Page Events to be viewed as single posts
*/
define('SINGLE_PATH', TEMPLATEPATH . '/single');
/**
* Filter the single_template with our custom function
*/
add_filter('single_template', 'my_single_template');
/**
* Single template function which will choose our template
*/
function my_single_template($single) {
global $wp_query, $post;
/**
* Checks for single template by category
* Check by category slug and ID
*/
foreach((array)get_the_category() as $cat) :
if(file_exists('SINGLE_PATH' . '/single-cat-' . $cat->slug . '.php'))
return SINGLE_PATH . '/single-cat-' . $cat->slug . '.php';
elseif(file_exists('SINGLE_PATH' . '/single-cat-' . $cat->term_id . '.php'))
return SINGLE_PATH . '/single-cat-' . $cat->term_id . '.php';
endforeach;
}
然后我在我的主题中手动创建了一个名为 'single' 的文件夹(一个 child of twentyseventeen)。
我从 parent 主题中复制了 single.php
并将其粘贴到 twentyseventeen-child/single
中。然后我将此文件重命名为 single-cat-fpe.php
。然后我添加了一些代码以从 post:
获取自定义字段
<?php
/**
* Template Name: Front Page Events
* Template Post Type: post, page
*
* @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post
*
* @package WordPress
* @subpackage Twenty_Seventeen
* @since Twenty Seventeen 1.0
* @version 1.0
*/
get_header(); ?>
<div class="wrap">
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
// Start the Loop.
while ( have_posts() ) :
the_post(); ?>
<h1>TEST</h1>
<?php
get_template_part( 'template-parts/post/content', get_post_format() ); ?>
<p><?php echo the_field('event_title'); ?></p>
<p><?php echo the_field('event_description'); ?></p>
<p><?php echo the_field('event_link'); ?></p>
// If comments are open or we have at least one comment, load up the comment template.
if ( comments_open() || get_comments_number() ) :
comments_template();
endif;
the_post_navigation(
array(
'prev_text' => '<span class="screen-reader-text">' . __( 'Previous Post', 'twentyseventeen' ) . '</span><span aria-hidden="true" class="nav-subtitle">' . __( 'Previous', 'twentyseventeen' ) . '</span> <span class="nav-title"><span class="nav-title-icon-wrapper">' . twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '</span>%title</span>',
'next_text' => '<span class="screen-reader-text">' . __( 'Next Post', 'twentyseventeen' ) . '</span><span aria-hidden="true" class="nav-subtitle">' . __( 'Next', 'twentyseventeen' ) . '</span> <span class="nav-title">%title<span class="nav-title-icon-wrapper">' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ) . '</span></span>',
)
);
endwhile; // End the loop.
?>
</main><!-- #main -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
</div><!-- .wrap -->
<?php
get_footer();
我能够从自定义字段中获取数据以显示在网站首页的滑块中。但是,当我尝试查看单个 post 时,自定义字段没有显示。 (带有 h1 标签的测试行也没有。)我也看不到我在 post 编辑器中创建的模板。谁能帮我弄清楚在查看此类别中的单个 post 时如何正确显示自定义字段?
实际上这看起来可能是一个 theme-related 问题。因为我使用的是 child 二十七,所以有必要将单个 post 文件放在 template-parts/post/content-php 中。我现在已经解决了。
我正在使用 WordPress 在本地开发一个网站,并使用高级自定义字段插件创建了一组字段,这些字段将在 post 类别设置为 'Front Page Events' 时显示。这个类别有 fpe
.
我将下面的代码放在 child 主题的 functions.php
中以创建单个模板文件夹的路径:
/*
* Creates a path to single template folder for Front Page Events to be viewed as single posts
*/
define('SINGLE_PATH', TEMPLATEPATH . '/single');
/**
* Filter the single_template with our custom function
*/
add_filter('single_template', 'my_single_template');
/**
* Single template function which will choose our template
*/
function my_single_template($single) {
global $wp_query, $post;
/**
* Checks for single template by category
* Check by category slug and ID
*/
foreach((array)get_the_category() as $cat) :
if(file_exists('SINGLE_PATH' . '/single-cat-' . $cat->slug . '.php'))
return SINGLE_PATH . '/single-cat-' . $cat->slug . '.php';
elseif(file_exists('SINGLE_PATH' . '/single-cat-' . $cat->term_id . '.php'))
return SINGLE_PATH . '/single-cat-' . $cat->term_id . '.php';
endforeach;
}
然后我在我的主题中手动创建了一个名为 'single' 的文件夹(一个 child of twentyseventeen)。
我从 parent 主题中复制了 single.php
并将其粘贴到 twentyseventeen-child/single
中。然后我将此文件重命名为 single-cat-fpe.php
。然后我添加了一些代码以从 post:
<?php
/**
* Template Name: Front Page Events
* Template Post Type: post, page
*
* @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post
*
* @package WordPress
* @subpackage Twenty_Seventeen
* @since Twenty Seventeen 1.0
* @version 1.0
*/
get_header(); ?>
<div class="wrap">
<div id="primary" class="content-area">
<main id="main" class="site-main" role="main">
<?php
// Start the Loop.
while ( have_posts() ) :
the_post(); ?>
<h1>TEST</h1>
<?php
get_template_part( 'template-parts/post/content', get_post_format() ); ?>
<p><?php echo the_field('event_title'); ?></p>
<p><?php echo the_field('event_description'); ?></p>
<p><?php echo the_field('event_link'); ?></p>
// If comments are open or we have at least one comment, load up the comment template.
if ( comments_open() || get_comments_number() ) :
comments_template();
endif;
the_post_navigation(
array(
'prev_text' => '<span class="screen-reader-text">' . __( 'Previous Post', 'twentyseventeen' ) . '</span><span aria-hidden="true" class="nav-subtitle">' . __( 'Previous', 'twentyseventeen' ) . '</span> <span class="nav-title"><span class="nav-title-icon-wrapper">' . twentyseventeen_get_svg( array( 'icon' => 'arrow-left' ) ) . '</span>%title</span>',
'next_text' => '<span class="screen-reader-text">' . __( 'Next Post', 'twentyseventeen' ) . '</span><span aria-hidden="true" class="nav-subtitle">' . __( 'Next', 'twentyseventeen' ) . '</span> <span class="nav-title">%title<span class="nav-title-icon-wrapper">' . twentyseventeen_get_svg( array( 'icon' => 'arrow-right' ) ) . '</span></span>',
)
);
endwhile; // End the loop.
?>
</main><!-- #main -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
</div><!-- .wrap -->
<?php
get_footer();
我能够从自定义字段中获取数据以显示在网站首页的滑块中。但是,当我尝试查看单个 post 时,自定义字段没有显示。 (带有 h1 标签的测试行也没有。)我也看不到我在 post 编辑器中创建的模板。谁能帮我弄清楚在查看此类别中的单个 post 时如何正确显示自定义字段?
实际上这看起来可能是一个 theme-related 问题。因为我使用的是 child 二十七,所以有必要将单个 post 文件放在 template-parts/post/content-php 中。我现在已经解决了。