我有两种自定义帖子类型:产品和品牌。产品段塞为“eproduct”。品牌的鼻涕虫是“品牌列表”。在产品管理页面上,我添加了一个列出品牌名称的自定义列。我正在尝试使“Brand”自定义列可按品牌标题(与该产品关联的品牌自定义帖子类型的post\\u标题)排序。这是我到目前为止使用的代码
posts_clauses
滤器
add_filter(\'posts_clauses\', \'vendia_sort_brand_column\',10,2);
function vendia_sort_brand_column( $clauses, $query ) {
global $wpdb;
if ( ! $query->is_main_query()
|| ! is_admin()
|| ! $query->get(\'post_type\') == \'eproduct\'
){
return $clauses;
}
$clauses[\'orderby\'] = " {$wpdb->posts}.post_title ";
return $clauses;
}
如上所示,我尝试修改
orderby
SQL查询的参数,使用
post_clauses
滤器
$clauses[\'orderby\'] = " {$wpdb->posts}.post_title";
我的绊脚石是“品牌”和“产品”自定义帖子类型都在wp\\u posts表中。所以
{$wpdb->posts}.post_title
返回产品标题,而不是我尝试订购的品牌标题。因此,我的产品管理页面只是按产品标题排序,而不是按品牌标题排序。
我想做的就是这样
$clauses[\'orderby\'] = " {$wpdb->posts}.post_title WHERE {$wpdb->posts}.post_type = \'brand-listing\'";
关键的变化是我添加了
WHERE {$wpdb->posts}.post_type = \'brand-listing\'
到
ORDERBY
条款然而,这显然不是有效的SQL。我的查询返回0篇帖子,因此我的产品管理屏幕没有列出帖子。我想是
WHERE
不允许在
ORDERBY
条款还是这样?
我是SQL的新手,所以我想知道,什么是有效的SQLORDERBY
条款来完成我想做的事情?
我感谢任何回复的人,感谢他们的帮助。我已经在这方面工作了好几光年了。
SO网友:bestprogrammerintheworld
这似乎是你的混合鼻涕虫和邮政类型。Slug用于在一些人将页面/帖子输入浏览器时识别页面/帖子(与permalink非常相关)。post类型用于标识存储在wordpress数据库中的帖子类型。
post_clauses
如果要同时更改查询中的多个内容,则使用。我建议使用pre_get_posts
相反(如果您不想执行比排序更复杂的查询)
根据您所写的内容:
$clauses[\'orderby\'] = " {$wpdb->posts}.post_title WHERE {$wpdb->posts}.post_type = \'brand-listing\'";
似乎您只需要自定义帖子类型的orderby帖子
brand (不是品牌列表,似乎是鼻涕虫?)
/* Sort posts in wplist admin */
function custom_post_order($query){
if ( ! $query->is_main_query() || ! is_admin() {return;}
$post_type = $query->get(\'post_type\');
if ($post_type == \'brand\') {
$query->set( \'orderby\', array(\'title\' => \'ASC\') );
}
}
add_action(\'pre_get_posts\', \'custom_post_order\');
这行不通。。。
$clauses[\'orderby\'] = " {$wpdb->posts}.post_title WHERE {$wpdb->posts}.post_type = \'brand-listing\'";
。。。因为Wordpress使用
orderby-argument 此处包括
orderby only.
(我想WP会创建一个类似这样的查询:
order by wp_posts WHERE wp_posts.post_type = \'brand-listing\'
where wp_posts_type = \'post\' //default created by wordpress
因此sql是不正确的(两个where子句))
如果您仍要使用post_clauses
您应该能够使用此选项:
$clauses[\'orderby\'] = "{$wpdb->posts}.post_title";
$clauses[\'where\'] = "{$wpdb->posts}.post_type = \'brand\'";