当列值来自自定义数据库值时,自定义POST类型可排序列

时间:2021-01-10 作者:bigdaveygeorge

我有一个自定义数据库表,名为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

        }

    }

}

1 个回复
SO网友:nightowl

您可以根据自定义表数据对结果进行排序,方法是使用;posts\\u orderby“发布”;挂钩(未测试的示例代码):

add_filter(\'posts_orderby\', \'edit_posts_orderby\');

function edit_posts_orderby($orderby_statement) {
    $orderby_statement = "views DESC";
    return $orderby_statement;
}
来源:根据用户评论:https://developer.wordpress.org/reference/hooks/posts_orderby/

相关推荐

Make custom column sortable

我在自定义帖子类型中添加了一个自定义列,效果很好。我只想按标题对名字进行排序,所以我尝试了这个,function sortable_custom_columns( $columns ) { $columns[\'custom_column\'] = \'title\'; return $columns; } add_filter( \'manage_edit-custom_sortable_columns\', \'sortable_custom_colum