我有一个自定义的播客文章类型,但我不能得到类别过滤器的工作.我创建了自定义分类称为播客类别.当我点击其中一个类别,他们都仍然显示.每个播客添加有不同的类别.我不知道如何使它工作,所以任何帮助将不胜感激!!
这是我的functions.php文件-
//Podcasts
function podcast_custom_post_type () {
$labels = array (
'name' => 'Podcasts',
'singular_name' => 'Podcast',
'add_new' => 'Add New Podcast',
'all_items' => 'All Podcasts',
'add_new_item' => 'Add A Podcast',
'edit_item' => 'Edit Podcast',
'new_item' => 'New Podcast',
'view_item' => 'View Podcast',
'parent_item_colon' => 'Parent Item',
'rewrite' => array( 'slug' => 'podcast' )
);
$args = array(
'labels' => $labels,
'public' => true,
'show_in_rest' => true,
'has_archive' => true,
'publicly_queryable' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_icon' => 'dashicons-admin-users',
'supports' => array(
'title',
'editor',
'excerpt',
'thumbnail',
'custom-fields',
'revisions',
'page-attributes'
),
//'taxonomies' => array('category', 'post_tag'),
'menu_position' => 10,
'exclude_from_search' => false
);
register_post_type('podcast', $args);
}
add_action('init', 'podcast_custom_post_type');
function podcast_custom_taxonomies() {
$labels = array(
'name' => 'Podcast Categories',
'singular_name' => 'Podcast Category',
'search_items' => 'Search Podcast Categories',
'all_items' => 'All Podcast Category',
'parent_item' => 'Parent Podcast Category',
'parent_item_colon' => 'Parent Podcast Category:',
'edit_item' => 'Edit Podcast Category',
'update_item' => 'Update Podcast Category',
'add_new_item' => 'Add New Podcast Category',
'new_item_name' => 'New Podcast Category',
'menu_name' => 'Podcast Categories'
);
$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'podcast_category' )
);
register_taxonomy('podcast_category', array('podcast'), $args);
}
add_action( 'init' , 'podcast_custom_taxonomies' );
add_action('pre_get_posts', 'altering_podcast_archive_query', 99);
function altering_podcast_archive_query($query)
{
if (
is_post_type_archive('podcast')
&&
get_query_var('orderby')
)
{
$tax_query = array(
array(
'taxonomy' => 'podcast_category',
'field' => 'slug',
'terms' => sanitize_text_field(get_query_var('orderby')),
)
);
$query->set('tax_query', $tax_query);
};
};
字符串
这是我创建的主题页面-
<?php
/*Template Name: News & Media */
get_header();
?>
<div class="singlewidth">
<div id="primary">
<form method='GET'>
<select name='orderby' id='orderby'>
<?php
$terms = get_terms([
'taxonomy' => 'podcast_category',
'hide_empty' => 'false'
]);
foreach ($terms as $term) :
?>
<option value='<?php echo $term->slug; ?>' <?php echo selected(sanitize_text_field($_GET['orderby']), $term->slug); ?>><?php echo $term->name; ?></option>
<?php endforeach; ?>
</select>
<button type='submit'>Filter</button>
</form>
<div class="podcasts">
<ul>
<?php
query_posts(array(
'post_type' => 'podcast'
)); ?>
<?php
while (have_posts()) : the_post(); ?>
<li>
<?php if ( has_post_thumbnail() ) { /* loades the post's featured thumbnail, requires Wordpress 3.0+ */ echo '<div class="featured-thumb clearfix">'; the_post_thumbnail(); echo '</div>'; } ?>
<div class="podcasttext">
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'azurebasic' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
<?php if( get_field('podcast_text') ): ?>
<?php the_field('podcast_text'); ?>
<?php endif; ?>
</div>
<div class="podcastplayer">
<?php if( get_field('add_podcast') ): ?>
<?php the_field('add_podcast'); ?>
<?php endif; ?>
</div>
</li>
<?php
endwhile;
?>
</ul>
</div>
</div>
</div>
<?php get_footer(); ?>
型
这是它的网页-https://baptist.tfm-dev.com/resources/news-resources
2条答案
按热度按时间ztmd8pv51#
一些建议:
podcast_category
连接到自定义文章类型podcast
orderby
的选择表单字段名称(如果可能)orderby
参数添加到WP_Query以用作筛选器query_posts()
下面是说明和更新的代码示例。
将分类
podcast_category
连接到自定义post类型podcast
WP Docs for register_post_type说:
任何分类连接都应该通过$taxonomies参数注册
当调用
register_taxonomy()
时,将$object_type
参数设置为null
(请参阅wordpress.stackexchange.com answer here),并在对register_post_type()
的调用中使用'taxonomies'
属性将podcast_category
分类连接到podcast
自定义post类型。虽然还有其他方法可以完成相同的事情,但这种方法很容易理解。podcast_custom_taxonomies()
函数中的代码需要从以下内容更改:字符串
...这个...
型
podcast_custom_post_type()
函数中的代码需要从以下内容更改:型
...这个...
型
修改
orderby
的选择表单字段名(如果可能)在
get_query_var()
中使用orderby
作为参数可能会导致问题。orderby是用于对帖子列表进行排序的现有WP_Query public query variable。您的代码似乎没有将orderby
用作排序键,而是用作筛选器。当您的代码调用get_query_var('orderby')
时,它正在检索orderby的现有WP_Query参数值,而不是HTML表单提交的orderby
的值。HTML表单的选择选项是 podcast categories,用作 filter。为了减少混淆,我建议将HTML表单的选择标记名称和ID更改为
podcast_category_filter
。将(新命名的)
orderby
参数添加到WP_Query中作为过滤器使用假设
orderby
已更改为podcast_category_filter
,则只有在将字段podcast_category_filter
添加到WP_Query公共查询变量列表中后,才可以调用get_query_var()
函数来获取HTML表单提交的值。一旦添加到列表中,WordPress将知道当它在URL中看到podcast_category_filter
时(例如https://example.com/podcast?podcast_category_filter=sports
),podcast_category_filter
及其值应添加到WP_Query。然后可以使用get_query_var('podcast_category_filter')
检索podcast_category_filter
的值。要将
podcast_category_filter
添加到WP_Query公共查询变量列表中,请在主题或插件中使用query_vars过滤器钩子:型
避免
query_posts()
请注意WordPress Docs关于使用
query_posts()
函数的警告:注意事项:此函数将完全覆盖主查询,并且不适用于插件或主题。其过于简单的修改主查询的方法可能会有问题,应该尽可能避免。[...]这不能在WordPress循环中使用。
WordPress建议在WP_Query中使用pre_get_posts操作。
为了避免
query_posts()
,对代码的更改可能如下所示:从主题页面中删除此内容:
型
移除
pre_get_posts
动作钩子:为了生成由
podcast_category
过滤的帖子列表,不需要pre_get_posts
。pre_get_posts
修改主循环(主)查询。过滤后的帖子列表不是从主循环生成的,而是从辅助循环生成的。辅助循环来自下面更新的代码示例中的$podcast_query
。代码更新
添加到functions.php
型
<child_theme_root_folder>/page-template/template-podcast-newsandmedia. php
型
xpcnnkqh2#
字符串
如果我明白你的意思的话,就这样吧。
我相信有数百个这样的职位来解决这个问题。