$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_custom_posts(): array { $custom_posts = array_values(get_post_types(array('public' => true, '_builtin' => false))); $custom_post_data = array(); foreach ($custom_posts as $custom_post) { $label = get_post_type_object($custom_post)->label; $custom_post_data[$custom_post] = $label; } return $custom_post_data; } 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_tax = $key == 'post_tag' ? 'tag' : $key; echo '' . esc_html($title) . ''; if (isset($tax_data, $order_name, $order_tax)) { include APOP_PLUGIN_PATH . 'template/setting_parts_taxonomy.php'; } echo ''; } } public static function disp_customposts_setting($key, $title, $order_name) { $custom_post_data = APOP_UI::get_all_custom_posts(); if (count($custom_post_data) > 0) { echo '' . esc_html($title) . ''; if (isset($custom_post_data, $order_name, $key)) { include APOP_PLUGIN_PATH . 'template/setting_parts_customposts.php'; } echo ''; } } public static function create_custom_posts_per_page($opt_per_page, $type, $slug): array { $cat_per_page = $opt_per_page[$type][$slug] ?? 'default'; $checked = ''; $cat_per_page_num = ''; if (isset($opt_per_page[$type][$slug])) { if ($opt_per_page[$type][$slug] != 'default' && $opt_per_page[$type][$slug] != '-1' && $opt_per_page[$type][$slug] != '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_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]; } self::create_normal_sort_list($name_key, $order_param); } 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']; $custom_field_type = $cnv_order_params[$target_key]['custom_field_type']; $name_meta_key = '_' . $name_key . '[' . $target_key . '][field][meta_key]'; $name_value_type = '_' . $name_key . '[' . $target_key . '][field][value_type]'; $name_custom_field_type = '_' . $name_key . '[' . $target_key . '][field][custom_field_type]'; $custom_field_val_1 = $custom_field_type == '1' ? $meta_key : ''; $custom_field_val_2 = $custom_field_type == '2' ? $meta_key : ''; echo '
    '; echo '
    ' . __('Type', APOP_DOMAIN) . ':
    '; } 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', 'custom_field_type' => '1', ); } 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', 'custom_field_type' => $order_param[$target_key]['field']['custom_field_type'] ?? '1', ); } } 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): array { $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); } return ''; } public static function create_normal_sort_list($name_key, $order_param) { $target_keys = self::set_search_normal_target_keys($order_param); $target_values = array( 'date' => __('Published', APOP_DOMAIN), 'title' => __('Post Title', APOP_DOMAIN), 'ID' => 'ID', 'modified' => __('Modified', APOP_DOMAIN), 'custom_field' => __('Custom filed 1', APOP_DOMAIN), 'custom_field_2' => __('Custom filed 2', APOP_DOMAIN), 'custom_field_3' => __('Custom filed 3', APOP_DOMAIN), 'custom_field_4' => __('Custom filed 4', APOP_DOMAIN), ); 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']; $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 '
  • '; } } } }