WP PLUGIN ソート対象拡張

・通常、検索、タクソノミーにソート用カスタムフィールドの設定入力欄を追加
・通常と検索にカスタムフィールド検索処理を実装
・タクソノミーに通常+カスタムフィールドのメニューを追加
・タクソノミーに通常+カスタムフィールドとドラッグソートの切り替え用ラジオボタンを追加
This commit is contained in:
2021-05-09 18:38:56 +09:00
parent 3dc1fc30fa
commit f07c318f93
9 changed files with 317 additions and 178 deletions
+21 -3
View File
@@ -1,8 +1,13 @@
<?php
/*
* Todo: タクソノミーの通常+カスタムフィールドソート処理の追加
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
} // Exit if accessed directly
if ( ! trait_exists( 'APOP_ORDER_SETTING' ) ) {
trait APOP_ORDER_SETTING {
@@ -51,7 +56,7 @@ if ( ! trait_exists( 'APOP_ORDER_SETTING' ) ) {
if ( is_null( $id ) ) {
$per_page_option_data = $per_page_option[ $target ];
} else {
$per_page_target = $target == 'tax' ? 'taxonomy' : $target;
$per_page_target = $target == 'tax' ? 'taxonomy' : $target;
$per_page_option_data = $per_page_option[ $per_page_target ][ $id ];
}
@@ -81,7 +86,11 @@ if ( ! trait_exists( 'APOP_ORDER_SETTING' ) ) {
}
foreach ( $apop_order_param as $order_col => $orders ) {
if ( $orders['use'] == 1 ) {
$orderby[ $order_col ] = $sort_param[ $orders['sort'] ];
if ( $order_col == 'custom_field' ) {
$this->set_custom_filed_sort( $orderby, $query, $order_col, $orders, $sort_param );
} else {
$orderby[ $order_col ] = $sort_param[ $orders['sort'] ];
}
}
}
if ( isset( $orderby ) ) {
@@ -93,11 +102,20 @@ if ( ! trait_exists( 'APOP_ORDER_SETTING' ) ) {
$this->set_per_page( $query, 'search' );
}
private function set_custom_filed_sort( &$orderby, $query, $order_col, $orders, $sort_param ) {
if ( $order_col == 'custom_field' ) {
$meta_key = $orders['field']['meta_key'];
$orderby_key = $orders['field']['value_type'];
$orderby_sort = $orders['sort'];
$orderby[ $orderby_key ] = $sort_param[ $orderby_sort ];
$query->set( 'meta_query', self::get_all_post_args( $meta_key ) );
}
}
private function set_orderby( $query, $id, $target, $order_key ) {
$order_settings = get_option( '_apop_' . $order_key . '_order' );
if ( isset( $order_settings['target_cat'][ $id ] ) && $order_settings['target_cat'][ $id ] == 1 ) {
$sort_meta_key = '_apop_post_' . $target . '_' . $id;
//$query->set( 'meta_key', $sort_meta_key );
$query->set( 'meta_query', self::get_all_post_args( $sort_meta_key ) );
$query->set( 'orderby', array( 'meta_value_num' => 'ASC' ) );
$this->set_per_page( $query, self::get_per_page_tag( $target ), $id );