我有一个自定义数据库表,名为views
包含产品ID,总体view
总计和其他一些列。
我编写了以下代码,试图将仪表板中的列添加到products
自定义post类型并显示数据库表中的列值,这很好。但是,我不知道如何允许此列可排序。我知道如何在WordPress中对自定义列进行排序,但因为这是自定义数据库表中的值,所以我看不出如何使用$query->;set()使排序工作正常。这是不可能的,因为它不是post meta?有没有办法按列值排序?
add_action( \'manage_product_posts_custom_column\', array( $this, \'product_columns_values\' ) );
add_action( \'manage_edit-product_sortable_columns\', array( $this, \'product_columns_sortable\' ) );
add_action( \'pre_get_posts\', array( $this, \'product_columns_orderby\' ) );
public function product_columns_values( $name ) {
global $post;
global $wpdb;
switch ( $name ) {
case \'views\':
$views = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(product_id) AS views FROM {$wpdb->prefix}views WHERE product_id = %d", $post->ID ) );
if( !empty( $views ) ) {
echo esc_html( $views );
} else {
echo esc_html( \'0\' );
}
break;
default:
break;
}
}
public function product_columns_sortable( $columns ) {
$columns[\'views\'] = \'views\';
return $columns;
}
public function product_columns_orderby( $query ) {
if ( is_admin() && \'product\' == $query->get( \'post_type\' ) ) {
$orderby = $query->get( \'orderby\');
if ( \'views\' == $query->get( \'orderby\') ) {
// This is where I can\'t seem to do anything further as I can only set meta values, unsure on how to amend the query to take into account my views value that is not meta
}
}
}