通常の方法でカスタム化されたカスタム列をタクソノミでソートしようとしましたが、値がシリアライズされた配列として格納され、もの。シリアライズされた配列として保存されたカスタムタクソノミー列を並べ替える
私はknowledgebase_category
タクソノミーのknowledgebase
カスタムポストタイプを作成しました。
私はknowledgebase_category_edit_form_fields
とknowledgebase_category_add_form_fields
フックを使用して、カテゴリの順序フィールドを追加し、これがシリアル化された配列として値を格納する
add_action ('edited_knowledgebase_category', 'mytheme_save_extra_knowledgebase_category_fileds');
add_action ('created_knowledgebase_category', 'mytheme_save_extra_knowledgebase_category_fileds');
if (! function_exists('mytheme_save_extra_knowledgebase_category_fileds')){
function mytheme_save_extra_knowledgebase_category_fileds($term_id) {
if (isset($_POST['Cat_meta'])) {
$t_id = $term_id;
$cat_meta = get_option("category_$t_id");
$cat_keys = array_keys($_POST['Cat_meta']);
foreach ($cat_keys as $key){
if(isset($_POST['Cat_meta'][$key])){
$cat_meta[$key] = $_POST['Cat_meta'][$key];
}
}
update_option("category_$t_id", $cat_meta);
}
}
}
を使用してそれらを保存しました。 options
の値は次のようになります
a:1:{s:9:"cat_order";s:1:"3";}
a:1:{s:9:"cat_order";s:2:"34";}
a:1:{s:9:"cat_order";s:1:"8";}
a:1:{s:9:"cat_order";s:2:"21";}
a:1:{s:9:"cat_order";s:2:"67";}
a:1:{s:9:"cat_order";s:1:"6";}
ソートは難しいです。
私は私の列を作り、
add_filter('manage_edit-knowledgebase_category_columns', 'mytheme_cat_order_column', 10, 2);
if (!function_exists('mytheme_cat_order_column')) {
function mytheme_cat_order_column($cat_columns){
$cat_columns['cat_order'] = esc_attr__('Category Order', 'mytheme');
return $cat_columns;
}
}
add_filter ('manage_knowledgebase_category_custom_column', 'mytheme_manage_knowledgebase_category_custom_fields', 10,3);
if (!function_exists('mytheme_manage_knowledgebase_category_custom_fields')) {
function mytheme_manage_knowledgebase_category_custom_fields($deprecated, $column_name, $term_id){
if ($column_name == 'cat_order') {
$cat_meta = get_option("category_$term_id");
if (isset($cat_meta['cat_order']) && $cat_meta['cat_order'] != '') {
echo intval($cat_meta['cat_order']);
}
}
}
}
add_filter('manage_edit-knowledgebase_category_sortable_columns', 'mytheme_manage_knowledgebase_category_sortable_columns');
if(!function_exists('mytheme_manage_knowledgebase_category_sortable_columns')){
function mytheme_manage_knowledgebase_category_sortable_columns($columns){
$columns['cat_order'] = esc_attr__('Category Order', 'mytheme');
return $columns;
}
}
それはソート可能そして私は今、私は、クエリが
をキャストせずに返すべきであるかを確認しようとしたこのadd_filter('terms_clauses', 'mytheme_cat_order_orderby', 10, 3);
if (!function_exists('mytheme_cat_order_orderby')) {
function mytheme_cat_order_orderby($pieces, $taxonomies, $args) {
$orderby = isset($_REQUEST['orderby']) ? trim(wp_unslash($_REQUEST['orderby'])) : 'Category Order';
$order = isset($_REQUEST['order']) ? trim(wp_unslash($_REQUEST['order'])) : 'DESC';
$trm = '"';
if($orderby == 'Category Order') {
$pieces['join'] .= " INNER JOIN wp_options AS opt ON opt.option_name = concat('category_',t.term_id)";
$pieces['orderby'] = "ORDER BY CAST((SUBSTRING_INDEX(SUBSTRING_INDEX(opt.option_value,';',2),':',-1)) AS UNSIGNED)";
$pieces['order'] = $order;
}
return $pieces;
}
}
を使用して、それを並べ替えてみました
SUBSTRING_INDEX(SUBSTRING_INDEX(opt.option_value,';',2),':',-1)
部分ですが、エラーが発生しました。おそらく、私の周りに""
number(私はthis questionを参考にして、PHPでテストしています)。だから私はCAST
を使って値を整数にしようとしました。
ここで列をクリックしてソートすると、何も起こりません。
この混乱(シリアル化された配列)をソートすることは可能ですか?