WP电子商务集团按类别划分的产品

时间:2012-02-27 作者:Tsybulsky Serg

对不起,我的英语不好
我有WP 3.3.1和;wp-电子商务。3.8.7.6.2。在产品页面(使用wpsc-products\\u page.php模板)上,我有产品列表。我想按类别将此产品分组。例如:

**Cat1产品1产品2

*第二类产品1产品2产品

*第三类产品1类产品2类产品

我尝试使用这种方法,但它不起作用

add_filter(\'posts_join\', create_function(\'$a\', \'global $wpdb; return $a . " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id) INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id) ";\'));
add_filter(\'posts_where\', create_function(\'$a\', \'global $wpdb; return $a . " AND $wpdb->term_taxonomy.taxonomy = \\\'wpsc_product_category\\\'";\'));
add_filter(\'posts_orderby\', create_function(\'$a\',\'global $wpdb; return "$wpdb->term_taxonomy.term_id DESC";\'));
query_posts(\'\');
提前感谢您的回复!

2 个回复
SO网友:webaware

你非常接近。不久前我也有同样的问题blogged about it. 您的联接缺少另一个联接表wp\\u terms,该表包含要排序的术语。

以下是我使用的代码:

class OrderWpscProducts {

    // flag for when a shop products post query is being created
    private $isProductQuery = false;

    public function __construct() {
        // hooks for altering order of product pages
        add_filter(\'parse_query\', array($this, \'filterProductQueryMark\'), 20);
        add_filter(\'posts_join\', array($this, \'filterProductQueryJoins\'), 20);
        add_filter(\'posts_orderby\', array($this, \'filterProductQueryOrderBy\'), 20);
    }

    /**
    * detect a posts query that should return a list of shop products, 
    * and mark it for later filters
    * @param WP_Query $query
    * @return WP_Query
    */
    public function filterProductQueryMark($query) {
        $this->isProductQuery = false;

        if (!is_admin() && (wpsc_is_in_category() || !empty($query->query_vars[\'wpsc_wine_style\']))) {
            $this->isProductQuery = true;
        }
    }

    /**
    * if the posts query is for a list of shop products, 
    * then add some tables to the join so that we can sort by category name
    * @param string $joins
    * @return string
    */
    public function filterProductQueryJoins($joins) {
        global $wpdb;

        if ($this->isProductQuery) {
            $joins .= "
 INNER JOIN $wpdb->term_relationships wpsc_cat_rel ON wp_posts.ID = wpsc_cat_rel.object_id
 INNER JOIN $wpdb->term_taxonomy wpsc_cat_tax ON wpsc_cat_tax.term_taxonomy_id = wpsc_cat_rel.term_taxonomy_id
   and wpsc_cat_tax.taxonomy = \'wpsc_product_category\'
 INNER JOIN $wpdb->terms wpsc_cat ON wpsc_cat.term_id = wpsc_cat_tax.term_id
";
        }

        return $joins;
    }

    /**
    * if the posts query is for a list of shop products, then sort by category name and product title
    * @param string $orderby
    * @return string
    */
    public function filterProductQueryOrderBy($orderby) {
        if ($this->isProductQuery) {
            $orderby = \'wpsc_cat.name ASC, wp_posts.post_title ASC\';
        }

        return $orderby;
    }
}

// create instance, will be kept alive by hooks
new OrderWpscProducts();

SO网友:Subharanjan

您可以在这里找到解决方案:http://subharanjan.in/category-wise-products-display-in-wp-e-commerce/

我不确定这是否能解决你的问题。

谢谢

结束