diff --git a/archive-post-order-plus.php b/archive-post-order-plus.php index 6f2d85e..41619d0 100644 --- a/archive-post-order-plus.php +++ b/archive-post-order-plus.php @@ -5,7 +5,7 @@ Plugin URI: https://www.n-k-y.net/wp_plugin_apop/ Author: Nobuhiro Kimura Author URI: https://www.n-k-y.net Description: 通常表示、検索表示、タクソノミー毎に投稿の表示順を設定するプラグイン -Version: 1.0.0 +Version: 1.0.1 License: GPLv2 */ diff --git a/class/class.apop.apop_ui.php b/class/class.apop.apop_ui.php deleted file mode 100644 index 99e910c..0000000 --- a/class/class.apop.apop_ui.php +++ /dev/null @@ -1,449 +0,0 @@ - $post_data ) { - $order = $i + 1; - $no_order = self::is_sort_post_registered( $post_data->ID, $meta_key ) ? '' : ' no-order'; - echo '
  • ' - . '' . esc_html( $order ) . '' . esc_html( $post_data->post_title ) - . ' -
  • '; - } - } - - private static function create_search_normal_args( $meta_key, $key = 'normal' ): array { - $post_type = array( 'post' ); - if ( $key == 'search' ) { - $add_post_type = array_values( get_post_types( array( - 'public' => true, - '_builtin' => false, - ) - ) - ); - $post_type = array_merge( $post_type, $add_post_type ); - } - - return array( - 'post_type' => $post_type, - 'post_status' => array( 'publish', 'draft' ), - 'posts_per_page' => - 1, - 'orderby' => 'meta_value_num', - 'order' => 'ASC', - 'meta_query' => array( - 'relation' => 'OR', - array( - 'key' => $meta_key, - 'compare' => 'EXISTS', - ), - array( - 'key' => $meta_key, - 'compare' => 'NOT EXISTS', - ), - ), - ); - } - - private static function get_all_taxonomies( $key ) { - if ( $key !== 'taxonomy' ) { - return get_terms( array( 'taxonomy' => $key, 'get' => 'all' ) ); - } - $all_custom_tax = get_taxonomies( array( 'public' => true, '_builtin' => false ) ); - $custom_tax_list = array(); - foreach ( $all_custom_tax as $custom_tax ) { - $custom_tax_list = array_merge( $custom_tax_list, get_terms( array( - 'taxonomy' => $custom_tax, - 'get' => 'all' - ) ) ); - } - - return $custom_tax_list; - } - - public static function get_cat_tag_list( $target, $key ): array { - $opt = get_option( '_apop_' . $target . '_order' ); - - if ( ! isset( $opt['target_cat'] ) ) { - return array(); - } - - if ( $key == 'taxonomy' ) { - return self::create_custom_tax_term( $opt ); - } else { - return self::create_tax_term( $opt, $key ); - } - } - - private static function create_custom_tax_term( $opt ): array { - $tax_data = array(); - foreach ( $opt['target_cat'] as $tax_id => $status ) { - //フラグが立っているカスタムタクソノミーは情報を取得する - if ( $status ) { - $args = array( - 'taxonomy' => get_term( $tax_id )->taxonomy, - 'hide_empty' => 0, - 'include' => $tax_id, - ); - $tax_data = array_merge( $tax_data, get_terms( $args ) ); - - } - } - if ( count( $tax_data ) > 0 ) { - return $tax_data; - } - - return array(); - } - - private static function create_tax_term( $opt, $key ) { - $include = array(); - foreach ( $opt['target_cat'] as $tax_id => $status ) { - //フラグが立っているタクソノミーIDを取得 - if ( $status ) { - $include[] = $tax_id; - } - } - $include_tax = implode( ',', $include ); - if ( ! empty( $include_tax ) ) { - $args = array( - 'taxonomy' => $key, - 'hide_empty' => 0, - 'include' => $include_tax, - ); - - return get_terms( $args ); - } - - return array(); - } - - public static function create_order_list( $tax_data, $tax_key ): string { - $return_data = self::get_sort_post_list( $tax_data->term_id, $tax_key, $tax_data->taxonomy ); - $list = array(); - foreach ( $return_data['data'] as $key => $target_post ) { - $sort_num = $key + 1; - $no_order = self::is_sort_post_registered( $target_post->ID, $return_data['meta_key'] ) ? '' : ' no-order'; - $list[] = ' -
  • ' . '' . esc_html( $sort_num ) . '' . get_the_title( $target_post->ID ) . ' - -
  • '; - } - - return implode( PHP_EOL, $list ); - } - - private static function is_sort_post_registered( $id, $key ): bool { - if ( get_post_meta( $id, $key, true ) ) { - return true; - } - - return false; - } - - private static function get_sort_post_list( $tax_id, $search_param, $tax_name ): array { - $post_types = array( 'post' ); - $custom_post_types = array_values( get_post_types( array( 'public' => true, '_builtin' => false ) ) ); - $args = array( - 'post_type' => array_merge( $post_types, $custom_post_types ), - 'post_status' => array( 'publish', 'draft' ), - 'posts_per_page' => - 1, - 'orderby' => 'meta_value_num', - 'order' => 'ASC', - ); - $meta_key = '_apop_post_' . self::create_post_sort_key( $tax_name, $search_param ) . '_' . $tax_id; - self::create_sort_post_list_meta_query( $args, $meta_key ); - self::create_post_tax_query( $args, $search_param, $tax_name, $tax_id ); - - return array( - 'meta_key' => $meta_key, - 'data' => get_posts( $args ) - ); - } - - private static function create_sort_post_list_meta_query( &$args, $meta_key ) { - - $args['meta_query'] = array( - 'relation' => 'OR', - array( - 'key' => $meta_key, - 'compare' => 'EXISTS', - ), - array( - 'key' => $meta_key, - 'compare' => 'NOT EXISTS', - ), - ); - } - - public static function create_post_sort_key( $tax_name, $tax_key ) { - if ( $tax_key == 'taxonomy' ) { - return 'tax'; - } - - return $tax_name; - } - - private static function create_post_tax_query( &$args, $key, $tax_name, $tax_id ) { - if ( $key == 'taxonomy' ) { - $args['tax_query'] = array( - array( - 'taxonomy' => $tax_name, - 'field' => 'term_id', - 'terms' => $tax_id, - 'include_children' => false - ) - ); - } else { - $args[ $key ] = $tax_id; - } - } - - public static function create_cat_per_page( $opt_per_page, $type ): array { - $cat_per_page = $opt_per_page[ $type ] ?? 'default'; - $checked = ''; - $cat_per_page_num = ''; - if ( isset( $opt_per_page[ $type ] ) ) { - if ( $opt_per_page[ $type ] != 'default' - && $opt_per_page[ $type ] != '-1' - && $opt_per_page[ $type ] != 'all' ) { - $checked = ' checked="checked"'; - $cat_per_page_num = $cat_per_page; - } - } - - return array( - '_per_page' => $cat_per_page, - '_checked' => $checked, - '_per_page_num' => $cat_per_page_num, - ); - } - - public static function disp_tax_setting( $key, $title, $order_name ) { - $tax_data = APOP_UI::get_all_taxonomies( $key ); - if ( count( $tax_data ) > 0 ) { - $order_name = $order_name; - $order_tax = $key == 'post_tag' ? 'tag' : $key; - echo '' . esc_html( $title ) . '設定'; - include APOP_PLUGIN_PATH . 'template/setting_parts_taxonomy.php'; - echo ''; - } - } - - public static function create_tax_per_page( $opt_per_page, $type, $id ): array { - $cat_per_page = $opt_per_page[ $type ][ $id ] ?? 'default'; - $checked = ''; - $cat_per_page_num = ''; - if ( isset( $opt_per_page[ $type ][ $id ] ) ) { - if ( $opt_per_page[ $type ][ $id ] != 'default' - && $opt_per_page[ $type ][ $id ] != '-1' - && $opt_per_page[ $type ][ $id ] != 'all' ) { - $checked = ' checked="checked"'; - $cat_per_page_num = $cat_per_page; - } - } - - return array( - '_per_page' => $cat_per_page, - '_checked' => $checked, - '_per_page_num' => $cat_per_page_num, - ); - } - - public static function create_search_normal_list( $type, $id = null ) { - $name_keys = self::create_name_keys( $id, $type ); - $name_key = $name_keys['name_key']; - $get_option_key = $name_keys['get_option_key']; - $order_param_base = get_option( $get_option_key ); - $order_param = ''; - if ( is_null( $id ) ) { - $order_param = $order_param_base; - } - if ( isset( $order_param_base[ $id ] ) ) { - $order_param = $order_param_base[ $id ]; - } - $target_keys = self::set_search_normal_target_keys( $order_param ); - $target_values = array( - 'date' => '登録日', - 'title' => 'タイトル', - 'ID' => 'ID', - 'modified' => '更新日', - 'custom_field' => 'カスタムフィールド1', - 'custom_field_2' => 'カスタムフィールド2', - 'custom_field_3' => 'カスタムフィールド3', - 'custom_field_4' => 'カスタムフィールド4', - ); - $list = array(); - foreach ( $target_keys as $target_key ) { - $cnv_order_params = self::set_order_list_param( $order_param, $target_key ); - $use = $cnv_order_params['use']; - $sort = $cnv_order_params['sort']; - $no_order_class = $cnv_order_params['no_order_class']; - $field_metakey_input = ''; - $name_use_key = '_' . $name_key . '[' . $target_key . '][use]'; - $name_sort_key = '_' . $name_key . '[' . $target_key . '][sort]'; - if ( strpos( $target_key, 'custom_field' ) !== false ) { - $target_key_check_class = 'custom_field_check'; - } else { - $target_key_check_class = 'sort_' . $target_key . '_check'; - } - - echo '
  • -
    ' . esc_attr( $target_values[ $target_key ] ) . '
    -
    - - - '; - - if ( strpos( $target_key, 'custom_field' ) !== false ) { - self::create_custom_field_sort_type( $name_key, $target_key, $cnv_order_params ); - } - - echo '
    -
  • '; - } - } - - private static function create_custom_field_sort_type( $name_key, $target_key, $cnv_order_params ) { - $meta_key = $cnv_order_params[ $target_key ]['meta_key']; - $value_type = $cnv_order_params[ $target_key ]['value_type']; - $name_meta_key = '_' . $name_key . '[' . $target_key . '][field][meta_key]'; - $name_value_type = '_' . $name_key . '[' . $target_key . '][field][value_type]'; - echo '
    -
    カスタムフィールドキー:
    - -
    -
    -
    値タイプ:
    - - -
    -
    '; - } - - private static function set_order_list_param( $order_param, $target_key ): array { - - $param = array( - 'use' => 0, - 'sort' => 2, - 'no_order_class' => ' no-order', - ); - - if ( strpos( $target_key, 'custom_field' ) !== false ) { - $param[ $target_key ] = array( - 'meta_key' => '', - 'value_type' => 'meta_value', - ); - } - - if ( isset( $order_param[ $target_key ] ) ) { - $param = array( - 'use' => $order_param[ $target_key ]['use'] ?? 0, - 'sort' => $order_param[ $target_key ]['sort'] ?? 2, - 'no_order_class' => ! $order_param[ $target_key ]['use'] ? ' no-order' : '', - ); - if ( strpos( $target_key, 'custom_field' ) !== false ) { - $param[ $target_key ] = array( - 'meta_key' => $order_param[ $target_key ]['field']['meta_key'] ?? '', - 'value_type' => $order_param[ $target_key ]['field']['value_type'] ?? 'meta_value', - ); - } - } - - return $param; - - } - - private static function create_name_keys( $id, $type ): array { - if ( is_null( $id ) ) { - return array( - 'name_key' => 'apop_' . $type . '_order_param', - 'get_option_key' => '_' . 'apop_' . $type . '_order_param', - ); - } else { - return array( - 'name_key' => 'apop_tax_order_param[' . $id . ']', - 'get_option_key' => '_apop_tax_order_param', - ); - } - } - - private static function set_search_normal_target_keys( $post_apop_search_order_param ) { - - $set_keys = array( - 'date', - 'title', - 'ID', - 'modified', - 'custom_field', - 'custom_field_2', - 'custom_field_3', - 'custom_field_4', - ); - - if ( $post_apop_search_order_param ) { - $register_keys = array_keys( $post_apop_search_order_param ); - - return array_unique( array_merge( $register_keys, $set_keys ) ); - } - - return $set_keys; - } - - private static function set_search_normal_checked( $param, $default ): string { - if ( $param == $default ) { - return ' checked="checked"'; - } - - return ''; - } - - public static function input_post_filter( $var_name, $type ) { - if ( $type == 'array' ) { - return filter_input( INPUT_POST, $var_name, FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY ); - } - if ( $type == 'str' ) { - return filter_input( INPUT_POST, $var_name, FILTER_SANITIZE_STRING ); - } - } - - } -} \ No newline at end of file