重写返回错误数据的规则

时间:2014-03-13 作者:luke

我有一个自定义的帖子类型,叫做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 */

}
?>
但我还是遇到了重定向问题。

1 个回复
SO网友:Charla

我快速搜索了一下你想做什么,也许这会帮助你了解一些以及重写是如何获取查询字符串的。

https://stackoverflow.com/questions/3307352/wordpress-custom-url-rewrites

结束

相关推荐

比较META_QUERY的两个查询-一个勾选了复选框,另一个没有

我正在尝试执行以下操作:两个问题1。让所有勾选了“是”的人2。让所有未勾选“是”主管的人员我已经设置好了第一个查询,并且运行良好(“people”是一个CPT,director是一个复选框“yes”的ACF)。<?php $directors = get_posts(array( \'post_type\' => \'people\', \'orderby\' => \'meta_value\', \'meta_key\' => \'