我有一个自定义的帖子类型,叫做product
. 它有两种分类法product_category
(哪个更优)和product_group
.
我希望单个产品的永久链接显示为:
products/%product_category%/%product_group%/%postname/
和;“档案”;,事实上,产品类别中的产品概述如下:
products/%product_category%/
.
这是我的方法:
add_filter(\'rewrite_rules_array\', \'rewrite_rules\');
function rewrite_rules($rules)
{
$newRules = array();
$newRules[\'products/(.+)/(.+)/(.+)/?$\'] = \'index.php?product_category=$matches[1]&product_group=$matches[2]&product=$matches[3]\';
$newRules[\'products/(.+)/(.+)/?$\'] = \'index.php?product_category=$matches[1]&product_group=$matches[2]\';
$newRules[\'products/(.+)/?$\'] = \'index.php?product_category=$matches[1]\';
return array_merge($newRules, $rules);
}
现在似乎出现了两个问题:
1。存档(已解决):
无论我在permalink中插入哪个产品类别的slug,查询都会得到所有类别的帖子。为什么?
2。单个帖子/产品:
这很有效”;“太好了”:即使永久链接中存在错误的类别,也会返回正确的帖子。我希望WordPress将这些错误的永久链接重定向到正确的永久链接。
有什么想法吗?
编辑:我解决了归档问题。我只是忘了正确评估我的查询。我在中的功能taxonomy-product_category
现在首先得到product_group
对于每个术语,它会获取属于当前产品组和当前产品类别的所有帖子。如果现在有帖子,循环将继续。
<?php $terms = get_terms( \'product_group\', \'hide_empty=0\' ); ?>
<?php foreach ($terms as $child) { ?>
<?php
$args = array(
\'post_type\' => \'product\',
\'status\' => \'publish\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'product_category\',
\'field\' => \'slug\',
\'terms\' => get_query_var(\'product_category\')
),
array(
\'taxonomy\' => \'product_group\',
\'field\' => \'term_id\',
\'terms\' => $child->term_id
)
)
);
$current_issue_posts = get_posts($args);
if(is_wp_error($current_issue_posts) || count($current_issue_posts)<1){
continue; //will terminate the loop if posts found
}
/* Do stuff / output the term */
}
?>
但我还是遇到了重定向问题。