我创建了四种自定义帖子类型 - 视频,音频,程序,博客 - 以及各种自定义字段,我设法创建了一个自定义存档页面,根据帖子类型显示某些自定义字段。仅查看特定自定义帖子类型的存档时,存档页面才能正常运行。我遇到的问题是类别的存档页面。
每种自定义帖子类型都可以访问全局“帖子”类别,因此我的所有类别都会显示在每种帖子类型中。我希望能够查询类别并显示相关帖子,无论帖子类型如何。即“商业”类别可以提取两个视频,一个音频帖子和一个博客。问题是我的类别页面现在是空的。
这是我在'archive.php'中的当前循环:
<?php
if ( have_posts() ) : ?>
<div class="container">
<div class="row">
<?php
/* Start the Loop */
while ( have_posts() ) : the_post();
get_template_part( 'template-parts/content-archive', get_post_format() );
endwhile;
the_posts_navigation(); ?>
</div><!-- .row -->
</div><!-- .container -->
<?php endif; ?>
这会抓取存档内容'content-archive.php'的模板:
<?php
/**
* Get featured posts from Archives
*/
if( is_post_type_archive( 'videos' ) ) {
$video_image = get_field( 'video_still_image' );
print_archive_post($video_image);
} elseif( is_post_type_archive( 'programs') ) {
$program_featured_image = get_field('program_featured_image');
print_archive_post($program_featured_image);
} elseif( is_post_type_archive( 'audio') ) {
$audio_featured_image = get_field('audio_featured_image');
print_archive_post($audio_featured_image);
} elseif( is_post_type_archive( 'blogs') ) {
$blog_featured_image = get_field('blog_featured_image');
print_archive_post($blog_featured_image);
}
?>
而且,这是来自'functions.php'的函数来构建帖子的内容:
// Function to print archive type posts
function print_archive_post($image) {
echo '<div class="col-md-4 featured-thumb-container">';
echo '<a href="' . get_the_permalink() . '"><span class="featured-thumb" style="background: url(' . $image . ')"></span></a>';
echo '<h3><a href="' . get_the_permalink() . '">' . get_the_title() . '</a></h3>';
// The category list
$post_cats= array();
$categories = get_the_category();
echo '<p class="category-list">';
foreach($categories as $cat) :
echo '<a class="category-link" href="' . get_home_url() . '/category/' . $cat->slug . '">' . $cat->cat_name . '</a><span>,</span> ';
endforeach;
echo '</p>';
echo '</div>';
}
我知道我错过了检查类别的条件,但我无法在我的研究中找到解决方案。任何帮助将不胜感激。 :)
答案 0 :(得分:1)
我不确定我是否正确理解了您的问题。如果要查询与一个类别相关的所有自定义帖子,可以在存档页面中使用WP_Query
。
//if you're on a category archive, it will return the category object
$category_object = get_queried_object();
$args = array(
'post_type' => 'your-cpt',
'cat' => $category_object->term_id
);
$wp_query = new WP_Query( $args );
if ( $wp_query->have_posts() ) {
while ( $wp_query->have_posts() ) {
$wp_query->the_post();
//echo your posts
}
} else {
// aww, no posts... do other stuff
}
wp_reset_postdata();
答案 1 :(得分:0)
因此,经过一些研究,我找到了解决方案。我需要将自定义帖子类型添加到Wordpress的内置类别和标签中。这是我添加到functions.php文件中的代码:
// Add custom post types to default WP categories and tags
function add_custom_types_to_tax( $query ) {
if( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
// Get all your post types
$post_types = get_post_types();
$query->set( 'post_type', $post_types );
return $query;
}
}
add_filter( 'pre_get_posts', 'add_custom_types_to_tax' );
我在这里找到了代码:https://premium.wpmudev.org/blog/add-custom-post-types-to-tags-and-categories-in-wordpress/
此外,我仅为类别档案创建了category.php文件。我使用了与archive.php文件相同的代码,但我换了一个类别内容的新模板文件:&#39; content-category-archive.php&#39;。这是该模板的代码:
<?php
/**
* Get featured posts from Category Archives
*/
if( get_post_type() == 'videos' ) {
$video_image = get_field( 'video_still_image' );
print_archive_post($video_image);
} elseif( get_post_type() == 'programs' ) {
$program_featured_image = get_field('program_featured_image');
print_archive_post($program_featured_image);
} elseif( get_post_type() == 'audio' ) {
$audio_featured_image = get_field('audio_featured_image');
print_archive_post($audio_featured_image);
} elseif( get_post_type()== 'blogs' ) {
$blog_featured_image = get_field('blog_featured_image');
print_archive_post($blog_featured_image);
}
?>
这与我的其他&#39; content-archive.php&#39;之间存在差异。模板是每种帖子类型的条件。我现在使用is_post_type_archive('my custom post type')
检查当前类别中每个帖子的帖子类型,而非检查get_post_type() == 'my custom post type'
。
我希望这有助于其他可能遇到同样问题的人。 :)