我不是一个很好的程序员,但我可以稍微调整一下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;
}
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;