it-swarm-ja.com

ウコマズマカスタム共有分類法

私はwoocommerceからのseason型と私のカスタム型productにカスタム共有分類法careを追加しました。私のカスタムテーマのfunctions.phpファイルにCare型と分類法が作成されています。

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=product および http://example.com/?season=helloworld&post_type=care は、woocommerce製品アーカイブと同じページにアクセスします。

ウーコマースに分類法を正しく共有させる方法は?

P.S WordPress 3.8.1とWoocommerce 2.0.20を使用する。明示的な書き換え規則は追加されていません。

2
rpeshkov

この問題に対する解決策が見つかりました。

別のpost_typeが要求されたことを確認せずに、woocommerceが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_queryメソッドの最初にproduct投稿タイプが実際に要求されていることを確認するだけです。

// Check that product post type has been requested
if ($q->get('post_type') != 'product')
    return;

その後はすべてうまくいきます。

更新:修正はwoocommerceマスターブランチにマージされました: https://github.com/woothemes/woocommerce/pull/4582 .

2
rpeshkov