WooCommerce自定义共享分类

时间:2014-01-27 作者:rpeshkov

我添加了自定义共享分类法season 对于product 来自woocommerce的类型和我的自定义类型care. Care 类型和分类是在中创建的functions.php 自定义主题的文件。

add_action(\'init\', function() {
    register_post_type(\'care\', array(
        \'labels\' => array(
            \'name\' => __(\'Cares\'),
            \'singular_name\' => __(\'Care\'),
        ),
        \'menu_position\' => 4,
        \'public\' => true,
        \'show_ui\' => true,
        \'has_archive\' => true,
        \'publicly_queryable\' => true,
        \'supports\' => array(\'title\')
    ));

    register_taxonomy( \'season\',
        array(\'product\', \'care\'),
        array(
            \'label\' => __(\'Season\'),
            \'show_ui\' => true,
            \'hierarchical\' => true,
        )
    );
});
现在当我访问season 分类学术语post_type 通过后,我始终可以访问woocommerce产品档案,即。http://example.com/?season=helloworld&post_type=producthttp://example.com/?season=helloworld&post_type=care 引导至woocommerce产品档案的同一页面。

如何使woocommerce正确地共享分类法?

P、 使用WordPress 3.8.1和Woocommerce 2.0.20。未添加明确的重写规则。

1 个回复
最合适的回答,由SO网友:rpeshkov 整理而成

已找到此问题的解决方案。

事实证明,woocommerce影响post_type 中的查询变量pre_get_posts 过滤而不检查另一个post_type 已请求。已经完成了WC_Query.product_query 方法:

if ( ! $q->is_tax( \'product_cat\' ) && ! $q->is_tax( \'product_tag\' ) )
    $q->set( \'post_type\', \'product\' );
解决这个问题很简单。你只需要检查一下product 在开始时实际请求了post类型product_query 方法:

// Check that product post type has been requested
if ($q->get(\'post_type\') != \'product\')
    return;
之后一切正常。

Update:修复程序已合并到woocommerce主分支:https://github.com/woothemes/woocommerce/pull/4582.

结束

相关推荐

private functions in plugins

我开发了两个插件,其中一个功能相同(相同的名称,相同的功能)。当试图激活两个插件时,Wordpress会抛出一个错误,因为它不允许我以相同的名称定义函数两次。有没有一种方法可以使这个函数只对插件私有,而不使用面向对象编程,也不简单地重命名函数?我不想使用OOP,因为我首先要学习它。此外,我不想重命名该函数,因为我可能也想在其他插件中使用它,而重命名感觉不太合适。