我有一个自定义 postmeta
字段,以序列化方式存储post / product_id . 示例 _related_ids
=> a:4:{i:0;i:2462;i:1;i:2466;i:2;i:2469;i:3;i:2472;}
我在WooCommerce产品列表屏幕(支持)中显示 _related_ids
的product_id计数,该工作正常 . 现在我想让该列可排序 . 所以我写了一个挂在 manage_edit-product_sortable_columns
中的函数 related_product_col_sort
. 列短路不起作用 . (不工作意味着它没有正确地订购product_id计数) .
这是我的完整代码
//_related_ids => a:4:{i:0;i:2462;i:1;i:2466;i:2;i:2469;i:3;i:2472;}
//manage_product_posts_custom_column
add_filter('manage_edit-product_columns', 'related_product_col');
function related_product_col($columns) {
$new_columns = (is_array($columns)) ? $columns : array();
$new_columns['RELATED'] = 'Related Product';
return $new_columns;
}
add_action('manage_product_posts_custom_column', 'related_product_col_data', 2);
function related_product_col_data($column) {
global $post;
$related_product_ids = get_post_meta($post->ID, '_related_ids', true);
if ($column == 'RELATED') {
if (isset($related_product_ids) && !empty($related_product_ids)) {
echo count($related_product_ids);
} else {
echo "--";
}
}
}
add_filter("manage_edit-product_sortable_columns", 'related_product_col_sort');
function related_product_col_sort($columns) {
$custom = array(
'RELATED' => '_related_ids'
);
return wp_parse_args($custom, $columns);
}
任何人都可以使用 related_product_col_sort
函数帮助我使用正确的逻辑/代码 .
谢谢 .
1 回答
Long Answer short - 基本上,如果您需要对meta_value进行排序,则无法将其序列化存储 . 检查https://wordpress.stackexchange.com/questions/87265/order-by-meta-value-serialized-array .
我认为最适合您的解决方案是将相关产品的数量存储在新的meta_key中,并使用它来对列进行排序 .
如果列包含普通数据而不是序列化数组,则下面是对数据进行排序的步骤 .
实际上有两个步骤可以使自定义列可排序
将列注册为可排序
实现排序逻辑
要将列注册为可排序,请使用
manage_{YOUR_SCREEN_ID}_sortable_columns
过滤器并添加列您已使用
related_product_col_sort
函数注册了列,以根据数据类型实现排序功能 .如果数据是数字或简单字母,您可以使用
pre_get_posts
操作并设置meta_key
和orderby
值如果您的排序值比日期更复杂