我有两种自定义分类法。
我想过滤我的产品,获得与此wp_query相同的结果。
$args = array(
'posts_per_page' => -1,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'auto',
'field' => 'ID',
'terms' => $auto_id
),
array(
'taxonomy' => 'ricambio',
'field' => 'ID',
'terms' => $ricambi_id
)
),
'post_type' => 'product',
'orderby' => 'title',
);
$query = new WP_Query( $args );
我如何显示此过滤结果? 我必须创建一个像taxonomy-auto-ricambio.php这样的模板? archive-auto-ricambio?
如果我在我的网址中写的是这样的:
http://www.myshop.com/?auto=my_auto&ricambio=my_ricambio
它有效。
如何在带有漂亮网址的模板中显示它?
感谢。
答案 0 :(得分:0)
在advanced taxonomies with pretty urls上的这篇优秀文章中直接提到这一点。
首先创建一些新的重写规则。这应该是在特定于站点的片段插件中,而不是在您的主题中。然后转到固定链接并重新保存永久链接。
function so_25722819_add_rewrite_rules() {
global $wp_rewrite;
$new_rules = array(
'event/(industry|location)/(.+?)/(industry|location)/(.+?)/?$' => 'index.php?post_type=eg_event&' . $wp_rewrite->preg_index(1) . '=' . $wp_rewrite->preg_index(2) . '&' . $wp_rewrite->preg_index(3) . '=' . $wp_rewrite->preg_index(4),
'event/(industry|location)/(.+)/?$' => 'index.php?post_type=eg_event&' . $wp_rewrite->preg_index(1) . '=' . $wp_rewrite->preg_index(2)
);
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action( 'generate_rewrite_rules', 'so_25722819_add_rewrite_rules' );
现在,如果您使用网址访问您的网站:
www.example.com/auto/my_auto/ricambio/my_ricambio
您应该转到分类法归档页面,其中显示的结果与:
相同www.example.com/?auto=my_auto&ricambio=my_ricambio
为了回应这些非常永久的链接,您可以使用文章作者提供的插件,只需稍加调整即可从其eg_events
帖子类型切换到您的product
帖子类型。
function eg_get_filter_permalink( $taxonomy_slug, $term ) {
global $wp_query;
// If there is already a filter running for this taxonomy
if( isset( $wp_query->query_vars[$taxonomy_slug] ) ){
// And the term for this URL is not already being used to filter the taxonomy
if( strpos( $wp_query->query_vars[$taxonomy_slug], $term ) === false ) {
// Append the term
$filter_query = $taxonomy_slug . '/' . $wp_query->query_vars[$taxonomy_slug] . '+' . $term;
} else {
// Otherwise, remove the term
if( $wp_query->query_vars[$taxonomy_slug] == $term ) {
$filter_query = '';
} else {
$filter = str_replace( $term, '', $wp_query->query_vars[$taxonomy_slug] );
// Remove any residual + symbols left behind
$filter = str_replace( '++', '+', $filter );
$filter = preg_replace( '/(^\+|\+$)/', '', $filter );
$filter_query = $taxonomy_slug . '/' . $filter;
}
}
} else {
$filter_query = $taxonomy_slug . '/' . $term;
}
// Maintain the filters for other taxonomies
if( isset( $wp_query->tax_query ) ) {
foreach( $wp_query->tax_query->queries as $query ) {
$tax = get_taxonomy( $query['taxonomy'] );
// Have we already handled this taxonomy?
if( $tax->query_var == $taxonomy_slug )
continue;
// Make sure taxonomy hasn't already been added to query string
if( strpos( $existing_query, $tax->query_var ) === false )
$existing_query .= $tax->query_var . '/' . $wp_query->query_vars[$tax->query_var] . '/';
}
}
if( isset( $existing_query ) )
$filter_query = $existing_query . $filter_query;
return trailingslashit( get_post_type_archive_link( 'product' ) . $filter_query );
}
然后在任何模板中,您可以使用上述功能为您的多个分类档案生成一个非常固定的链接:
// Link to page with only my_ricambio in my_auto
echo eg_get_filter_permalink( 'my_auto', 'my_ricambio' );