【问题标题】:Sorting Custom Column in Wordpress Admin Pages在 Wordpress 管理页面中对自定义列进行排序
【发布时间】:2018-05-10 06:02:09
【问题描述】:

我正在尝试在管理编辑屏幕中对自定义列进行排序。该列包含一个整数值(投票数)。

要生成列,我使用这个“标准”代码:

add_filter( 'manage_edit-entries_sortable_columns', 'cutify_entries_columns_sortable' );
function cutify_entries_columns_sortable( $columns ) 
{
    $columns['entry_vote_count'] = 'entry_vote_count';
    return $columns;
}

add_filter( 'manage_entries_posts_columns', 'cutify_entries_columns_head' );
function cutify_entries_columns_head($defaults) 
{
    unset( $defaults['date'] );
    $defaults['entry_vote_count'] = 'Votes';
    return $defaults;
}

add_action('manage_entries_posts_custom_column', 'cutify_entries_columns_content', 10, 2);
function cutify_entries_columns_content($column_name, $post_ID) 
{
    if ($column_name == 'entry_vote_count') 
    {
        $number = rand(1,1000);

        print intVal($number);
    }
}

问题是尝试对此列进行排序。我在这里和其他网站上阅读了很多答案,如果值来自 post_meta,我确实知道如何排序,但正如您所见,在这种情况下,值来自函数调用的返回值。

是否有任何方法可以对不基于 post_meta 值的自定义列进行排序?

【问题讨论】:

  • 您能否更新您的问题并包含来自cutify-votes/classes/class.API.php 的代码?或者您可以将其发布在 Pastebin.com 上,并将粘贴到您的问题的链接添加到您的问题中。
  • 感谢 Sally CJ,但类中的代码不相关。相关的是它返回的整数值。我已将上面的代码示例更新为使用随机 int 而不是函数调用。
  • 抱歉,您确定class“不相关”吗?我的意思是,class 中必须有一个方法/function 可以保存/更新特定帖子的投票数,对吧?即使投票数没有保存到帖子元表中。
  • @JohnMcMurray 您正在使用 rand 函数,它每次都会生成新数字,因此当您尝试对列进行排序时,rand 函数会生成新数字,因此它不会给您完美的结果,因此您必须存储唯一的帖子投票post meta 中的值然后它会正常工作。

标签: wordpress customcolumn


【解决方案1】:

注册一个列 首先你需要注册一个列

<?php 
add_action( 'manage_cake_posts_custom_column', 'my_cake_column_content', 10, 2 );
function my_cake_column_content( $column_name, $post_id ) {
    if ( 'slices' != $column_name )
        return;
    //Get number of slices from post meta
    $slices = get_post_meta($post_id, 'slices', true);
    echo intval($slices);
} ?>

使列可排序

<?php 
 add_filter( 'manage_edit-cake_sortable_columns', 
 'my_sortable_cake_column' );
 function my_sortable_cake_column( $columns ) {
 $columns['slices'] = 'slice';

  //To make a column 'un-sortable' remove it from the array
  //unset($columns['date']);

   return $columns;
   } ?>

【讨论】:

【解决方案2】:

当 wp 尝试按您的自定义列获取帖子顺序时,您必须将自定义 query_orderby 添加到 WP_Query。像这样:

add_action( 'pre_get_posts', 'my_entry_vote_orderby' );
function my_entry_vote_orderby( $query ) {
    global $wpdb;

    // Only filter in the admin
    if( ! is_admin() )
        return;

    $orderby = $query->get( 'orderby');

    // Only filter if orderby is set to 'entry_vote_count'
    if( 'entry_vote_count' == $orderby ) {
        // We need the order - default is ASC
        $order = isset( $query->query_vars ) && isset( $query->query_vars[ 'order' ] ) && strcasecmp( $query->query_vars[ 'order' ], 'desc' ) == 0 ? 'DESC' : 'ASC';

        // Order the posts by vote count
        $query->query_orderby = "ORDER BY ( SELECT vote_count FROM {$wpdb->posts} posts WHERE posts.post_type = 'post' AND posts.post_status='publish' ) {$order}";
    }
}

【讨论】:

    【解决方案3】:

    如果您不开发插件,最简单的方法是使用现有的插件,例如 Admin Columns,因为它允许您执行一些高级操作:订单、添加列...

    【讨论】:

    • 谢谢,但我不能为此使用插件。该列不会从元字段中获取其数据,而是从函数调用中获取整数返回值。所有这些插件都依赖于内置的 wordpress 数据(postmeta 等),而这不是我所拥有的
    猜你喜欢
    • 1970-01-01
    • 2014-09-15
    • 2010-12-23
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多