想要按元值排序(调整邮购小工具)

时间:2015-02-04 作者:mikiekwoods

我不是一个很好的程序员,但我可以稍微调整一下PHP。基本上,我想按一个称为“价格”的自定义元值排序。这个plugin 按标题订购,这就是我要更改的价格,如图所示。我看到了其他一些关于按元值整数排序的帖子,但代码逻辑太不同了,我糟糕的编码技巧无法与插件中的代码协调。有什么帮助吗?

case \'title\':
                $orderby = "price";
                $order = "ASC";

                break;
以下是整个功能:

    public function frontend_initialiser($vars){

    //Requête modifiable uniquement pour la toute première requête SQL.
    if(is_main_query() && $this->firstQuery){
        $this->firstQuery = FALSE;

        //On récupère la sélection de l\'utilisateur
        $this->selection = isset($_GET[\'pow\']) ? $_GET[\'pow\'] : "";

        //Calcul du type (uniquement ceux gérés par l\'extension) de taxonomie en cours.
        if(is_category()){
            $this->type = "category";
        }elseif(is_tag()){
            $this->type = "post_tag";
        }

        //Si le type est géré par l\'extension, on récupère le slug courant.
        if($this->type != \'\')$this->slug = $vars->query_vars[$this->type . "_name"];

        //Le visiteur n\'a pas demandé à changer le tri.
        if($this->selection == \'\'){

            //Par défaut, on garde le tri par défaut.
            $this->selection = self::POW_DEFAUT;

            //Maintenant, on va regarder si le tri par défaut ne serait pas différent de celui définit nativement
            if($this->slug != \'\'){
                //Recovering the conf different for different type of taxonomy
                $terms = $this->select_term($this->type);

                //If you look at the admin changed the default sort .
                if(array_key_exists($this->type, $terms) && array_key_exists($this->slug, $terms[$this->type]))$this->selection = $terms[$this->type][$this->slug];
            }

        }

        // We end up modifying the ORDER BY clause of the query.
        switch ($this->selection) {

            //Sélection par défaut : Tri du plus récent au plus ancien
            case \'dated\':
                $orderby = "date";
                $order = "DESC";

                break;

            //Tri du plus ancien au plus récent
            case \'datea\':
                $orderby = "date";
                $order = "ASC";

                break;

            //TRYING TO CHANGE CODE TO ORDER BY PRICE METAKEY VALUE
            case \'title\':
                $orderby = "price";
                $order = "ASC";

                break;

            //for simple cases , the value of the item of the combo is what will be used in the " order by " of the SQL query .
            default:
                $orderby = $this->selection;
                $order = "DESC";

        }

        //On applique le filtre
        $vars->set(\'orderby\', $orderby);
        $vars->set(\'order\', $order);
    }

    return $vars;
}

1 个回复
SO网友:TheDeadMedic

因为price 不是post表列(我假设它是post元字段),您需要扩展查询;订购人meta_value_num 而是:

case \'title\':
    if ( ! $meta_query = $vars->get( \'meta_query\' ) )
        $meta_query = array();

    $meta_query[] = array(
        \'compare\' => \'!=\',
        \'value\' => \'\',
        \'key\' => \'price\', /* This should be the name of your meta field that stores price */
    );

    $vars->set( \'meta_query\', $meta_query );

    $orderby = \'meta_value_num\';
    $order = \'ASC\';

    break;

结束

相关推荐

Pre_Get_Posts操作中的多个orderby

我过去能够按2个条件对查询结果进行排序(“先按状态=未售出的ASC,然后按日期描述排序结果”),如下所示:add_action( \'pre_get_posts\', \'my_get_posts\' ); function my_get_posts( $query ) { if (is_admin()){ return; } if (is_post_type_archive(\'objet\')){