From 4bc96228bd9a78cad1b5ef30a09b8cc8b77857a0 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 19 Jul 2021 19:47:26 +0900 Subject: [PATCH 1/2] =?UTF-8?q?ARCHIVE=20POST=20ORDER=20PLUS=EF=BC=9A?= =?UTF-8?q?=E3=82=AB=E3=82=B9=E3=82=BF=E3=83=A0=E6=8A=95=E7=A8=BF=E3=82=A2?= =?UTF-8?q?=E3=83=BC=E3=82=AB=E3=82=A4=E3=83=96=E3=81=AE=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit カスタム投稿アーカイブ対応 全体設定で「全件」指定時に「全体設定に従う」の設定が反映されないバグの修正 --- archive-post-order-plus.php | 2 +- class/class.apop.apop_post.php | 35 ++- class/class.apop.apop_ui.php | 148 ++++++++----- class/class.apop.order.php | 104 +++++++-- languages/ArchivePostOrderPlus-ja.mo | Bin 3527 -> 3762 bytes languages/ArchivePostOrderPlus-ja.po | 124 ++++++----- readme.txt | 11 +- template/order.php | 24 +- template/order_parts_custom_posts.php | 62 ++++++ template/setting.php | 1 + template/setting_parts_customposts.php | 64 ++++++ uninstall.php | 8 +- util/apop-customposts.php | 144 ++++++++++++ util/apop-order-setting.php | 292 ++++++++----------------- util/apop-output.php | 102 +++++++++ util/apop-tax.php | 65 ++++++ 16 files changed, 848 insertions(+), 338 deletions(-) create mode 100644 template/order_parts_custom_posts.php create mode 100644 template/setting_parts_customposts.php create mode 100644 util/apop-customposts.php create mode 100644 util/apop-output.php create mode 100644 util/apop-tax.php diff --git a/archive-post-order-plus.php b/archive-post-order-plus.php index c691181..6346248 100644 --- a/archive-post-order-plus.php +++ b/archive-post-order-plus.php @@ -5,7 +5,7 @@ Plugin URI: https://develop.n-k-y.net/wordpress/wp_plugin/apop/ Author: NBK45 Author URI: https://develop.n-k-y.net Description: Archive Post Order Plus は「最新の投稿」「検索結果」「カテゴリー」「タグ」「カスタム分類」の投稿記事の表示順をドラッグで並べ替えて設定するプラグインです。 -Version: 1.1.7 +Version: 1.1.8 License: GPLv2 Text Domain: ArchivePostOrderPlus Domain Path: /languages diff --git a/class/class.apop.apop_post.php b/class/class.apop.apop_post.php index 204325d..962cc4f 100644 --- a/class/class.apop.apop_post.php +++ b/class/class.apop.apop_post.php @@ -47,13 +47,17 @@ if ( ! class_exists( 'APOP_POST' ) ) { $this->create_order_field_data( get_option( '_apop_search_order_param' ), 'search' ); } + //カスタム投稿アーカイブソート + $this->create_order_custompost_data( get_option( '_apop_custompost_archive_order_param' ) ); + //カテゴリー、タグ、カスタム分類 $this->create_order_tax_field_data( get_option( '_apop_tax_order_param' ) ); $this->labels = array( - 'normal' => __('Your latest posts', APOP_DOMAIN), - 'search' => __('Search', APOP_DOMAIN), - 'tax' => __('Category, Tag, Custom Taxonomy', APOP_DOMAIN), + 'normal' => __( 'Your latest posts', APOP_DOMAIN ), + 'search' => __( 'Search', APOP_DOMAIN ), + 'tax' => __( 'Category, Tag, Custom Taxonomy', APOP_DOMAIN ), + 'custompost' => __( 'Custom posts archive', APOP_DOMAIN ), ); require_once self::TEMPLATE_DIR . 'setting_post_custom_field.php'; @@ -80,6 +84,29 @@ if ( ! class_exists( 'APOP_POST' ) ) { } } + private function create_order_custompost_data( $param, $update = false ) { + global $post_type; + //カスタム投稿タイプでないときは処理を抜ける + if ( $post_type == 'page' || $post_type == 'post' ) { + return; + } + + $archive_settings = get_option( '_apop_custompost_archive_sort_type' ); + if ( array_key_exists( $post_type, $archive_settings ) && $archive_settings[ $post_type ] == 2 ) { + foreach ( $this->order_param_keys as $order_param_key ) { + if ( isset( $param[ $post_type ][ $order_param_key ]['field']['meta_key'] ) && + ! empty( $param[ $post_type ][ $order_param_key ]['field']['meta_key'] ) ) { + if ( $update ) { + $this->name_keys[] = $param[ $post_type ][ $order_param_key ]['field']['meta_key']; + } else { + $this->custom_field_type['custompost'][] = $param[ $post_type ][ $order_param_key ]['field']['custom_field_type']; + $this->order_field['custompost'][] = $param[ $post_type ][ $order_param_key ]['field']['meta_key']; + } + } + } + } + } + private function create_order_tax_field_data( $param, $update = false ) { $term_ids = $this->create_post_term_ids(); $sort_types = get_option( '_apop_tax_sort_type' ); @@ -144,6 +171,8 @@ if ( ! class_exists( 'APOP_POST' ) ) { $this->create_order_field_data( get_option( '_apop_normal_order_param' ), 'normal', true ); //検索ソート $this->create_order_field_data( get_option( '_apop_search_order_param' ), 'search', true ); + //カスタム投稿アーカイブ + $this->create_order_custompost_data( get_option( '_apop_custompost_archive_order_param' ), true ); //カテゴリー、タグ、カスタム分類 $this->create_order_tax_field_data( get_option( '_apop_tax_order_param' ), true ); } diff --git a/class/class.apop.apop_ui.php b/class/class.apop.apop_ui.php index adf218e..5b00fe6 100644 --- a/class/class.apop.apop_ui.php +++ b/class/class.apop.apop_ui.php @@ -6,10 +6,11 @@ if ( ! defined( 'ABSPATH' ) ) { if ( ! class_exists( 'APOP_UI' ) ) { require_once __DIR__ . '/../util/apop-customfield-select.php'; + require_once __DIR__ . '/../util/apop-customposts.php'; class APOP_UI { - use CUSTOMFIELD_SELECT; + use CUSTOMFIELD_SELECT, CUSTOMPOSTS; public static function get_order_type( $type ) { $type_data = get_option( $type ); @@ -68,6 +69,17 @@ if ( ! class_exists( 'APOP_UI' ) ) { ); } + private static function get_all_custom_posts() { + $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' ) ); @@ -255,6 +267,37 @@ value="' . esc_html( $sort_num ) . '"> } } + 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 ) { + $order_name = $order_name; + $order = $key; + echo '' . esc_html( $title ) . ''; + 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 = ''; @@ -287,56 +330,7 @@ value="' . esc_html( $sort_num ) . '"> 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' => __( '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 ), - ); - $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']; - $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 '
    -
  • '; - } + self::create_normal_sort_list( $name_key, $order_param ); } private static function create_custom_field_sort_type( $name_key, $target_key, $cnv_order_params ) { @@ -469,5 +463,57 @@ value="' . esc_html( $sort_num ) . '"> } } + 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 '
    +
  • '; + } + } + } } \ No newline at end of file diff --git a/class/class.apop.order.php b/class/class.apop.order.php index 2ddd107..57c4f51 100644 --- a/class/class.apop.order.php +++ b/class/class.apop.order.php @@ -7,10 +7,13 @@ if ( ! class_exists( 'APOP' ) ) { require_once __DIR__ . '/../util/apop-order-setting.php'; require_once __DIR__ . '/../util/apop-customfield-select.php'; + require_once __DIR__ . '/../util/apop-customposts.php'; + require_once __DIR__ . '/../util/apop-tax.php'; + require_once __DIR__ . '/../util/apop-output.php'; class APOP { - use APOP_ORDER_SETTING, CUSTOMFIELD_SELECT; + use APOP_ORDER_SETTING, CUSTOMFIELD_SELECT, CUSTOMPOSTS, TAX, APOP_OUTPUT; const TEMPLATE_DIR = __DIR__ . '/../template/'; @@ -55,6 +58,7 @@ if ( ! class_exists( 'APOP' ) ) { '_apop_per_page', //1ページ表示件数 '_apop_tag_order', //タグ設定 '_apop_tax_order', //カスタムタクソノミー設定 + '_apop_custompost_archive_order', //カスタム投稿設定 ); foreach ( $settings as $setting ) { @@ -72,9 +76,26 @@ if ( ! class_exists( 'APOP' ) ) { public function show_option_page() { - //------------------------------------- - // 最新の投稿表示 - // ------------------------------------ + + //最新の投稿表示 + $this->set_new_lists(); + + // 検索表示 + $this->set_search_lists(); + + // カスタム投稿アーカイブ + $this->set_custompost_archive_list(); + + // タクソノミー + $this->set_tax_list(); + + require_once self::TEMPLATE_DIR . 'order.php'; + } + + //--------------------------------------------------------------------------------- + // 最新の投稿表示 + //--------------------------------------------------------------------------------- + private function set_new_lists() { $apop_normal_order = APOP_UI::input_post_filter( '_apop_normal_order', 'str' ); $apop_normal_order_param = APOP_UI::input_post_filter( '_apop_normal_order_param', 'array' ); $apop_post_normal = APOP_UI::input_post_filter( '_apop_post_normal', 'array' ); @@ -98,10 +119,12 @@ if ( ! class_exists( 'APOP' ) ) { $this->update_search_normal_sort( $apop_post_normal, 'normal' ); require_once self::TEMPLATE_DIR . 'success.php'; } + } - //------------------------------------- - // 検索表示 - // ------------------------------------ + //--------------------------------------------------------------------------------- + // 検索結果 + //--------------------------------------------------------------------------------- + private function set_search_lists() { $apop_search_order = APOP_UI::input_post_filter( '_apop_search_order', 'str' ); $apop_search_order_param = APOP_UI::input_post_filter( '_apop_search_order_param', 'array' ); $apop_post_search = APOP_UI::input_post_filter( '_apop_post_search', 'array' ); @@ -125,10 +148,60 @@ if ( ! class_exists( 'APOP' ) ) { $this->update_search_normal_sort( $apop_post_search, 'search' ); require_once self::TEMPLATE_DIR . 'success.php'; } + } - //------------------------------------- - // タクソノミー - // ------------------------------------ + //検索結果と最近の投稿の表示順の保存 + private function update_search_normal_sort( $apop_post_search_normal, $key ) { + $posts_sort = $apop_post_search_normal['post_sort']; + foreach ( $posts_sort as $post_id => $sort ) { + update_post_meta( $post_id, '_apop_post_' . $key, $sort ); + } + } + + //--------------------------------------------------------------------------------- + // カスタム投稿アーカイブ + //--------------------------------------------------------------------------------- + private function set_custompost_archive_list() { + $custompost_archive_sort_type = APOP_UI::input_post_filter( '_apop_custompost_archive_sort_type', 'array' ); + $apop_custompost_archive_order_param = APOP_UI::input_post_filter( '_apop_custompost_archive_order_param', 'array' ); + $apop_custompost_archive = APOP_UI::input_post_filter( '_apop_customposts', 'array' ); + + //カスタム投稿アーカイブのソートタイプ設定 + if ( $custompost_archive_sort_type ) { + check_admin_referer( 'sh_options' ); + update_option( '_apop_custompost_archive_sort_type', $custompost_archive_sort_type ); + require_once self::TEMPLATE_DIR . 'success.php'; + } + + //カスタム投稿アーカイブの標準ソートパラメータ + if ( $apop_custompost_archive_order_param ) { + check_admin_referer( 'sh_options' ); + update_option( '_apop_custompost_archive_order_param', $apop_custompost_archive_order_param ); + require_once self::TEMPLATE_DIR . 'success.php'; + } + + //カスタム投稿アーカイブの投稿表示順設定 + if ( $apop_custompost_archive ) { + check_admin_referer( 'sh_options' ); + $this->update_custom_post_sort( $apop_custompost_archive ); + require_once self::TEMPLATE_DIR . 'success.php'; + } + } + + //カスタム投稿アーカイブ表示順の保存 + private function update_custom_post_sort( $post_value ) { + foreach ( $post_value as $custom_post_type => $posts ) { + foreach ( $posts as $post_id => $sort ) { + $sort_key = '_apop_customposts_' . $custom_post_type; + update_post_meta( $post_id, $sort_key, $sort ); + } + } + } + + //--------------------------------------------------------------------------------- + // タクソノミー + //--------------------------------------------------------------------------------- + private function set_tax_list() { $tax_sort_type = APOP_UI::input_post_filter( '_apop_tax_sort_type', 'array' ); $apop_tax_order_param = APOP_UI::input_post_filter( '_apop_tax_order_param', 'array' ); $apop_post_category = APOP_UI::input_post_filter( '_apop_post_category', 'array' ); @@ -169,11 +242,9 @@ if ( ! class_exists( 'APOP' ) ) { $this->update_post_sort( 'tax', $apop_post_tax ); require_once self::TEMPLATE_DIR . 'success.php'; } - - require_once self::TEMPLATE_DIR . 'order.php'; } - //投稿表示順の設定 + //タクソノミーの表示順の保存 private function update_post_sort( $target, $post_value ) { $posts_sort = $post_value['post_sort']; foreach ( $posts_sort as $cat_id => $posts ) { @@ -184,13 +255,6 @@ if ( ! class_exists( 'APOP' ) ) { } } - private function update_search_normal_sort( $apop_post_search_normal, $key ) { - $posts_sort = $apop_post_search_normal['post_sort']; - foreach ( $posts_sort as $post_id => $sort ) { - update_post_meta( $post_id, '_apop_post_' . $key, $sort ); - } - } - } } diff --git a/languages/ArchivePostOrderPlus-ja.mo b/languages/ArchivePostOrderPlus-ja.mo index 505fc8ed79a3d173f500d76ebee4dd40939ec2fb..efd8f6e7860aaa4123c7def2db5f423128cd10f1 100644 GIT binary patch delta 1311 zcmZwHO-PhM9LMp=R@;2Z)w0yhdbAhK+U$kcOAujDU}SWX3d3T3fmUO8lY(MnjR>Pl zW|VXg^RN_JXcR&sL{U^!5LBlw4`q-Z>efa2{+^wnz+vb4%seyB{GWOLk1v8_70EBf zzJ5d5PF+cTxWJgbxPKuRO1saPa_qn$UPKKI;$j@O{ZTBYKZbsMj;ru3*5WK`{nBh> z%5VoRF(zpmGY!*hjatuPJ`=CtGQ5d}ID)KYCQ%zb#nt#46~GTvU~{+#{W-?0zyL1C z8q_+w(9iy+kwz9bnvkD4!X+1vBWsu_YQZ=vpz~OSy~xkpw%$PndKVSg6e@t1s3(7q zI=NZYIzKhe{$`Gbo+yXeG7q&u0PC;{^#_MgPk0PJ6LAc8(r+MIoxo*eDU-I|w?4uW z?oXng`~!y2#pGccMR~?l<4G*V>!^rFtgo!oRv*z+GG1w|M+Fu^1#rfiMCHsS)X@*2 z0-3Pm@A5f+-S}t+W{{uBD##ppA=c6_LoK`qHQswsQK5dx9s?! z?LR=R^SFTX57BsL2Y%Us-?pDaifUqkwH&okHSWW(y?+7M(!Yv)KwepD6*bf~RENr` zdwHd=qgwC3in@`ijZ`*K*HJ5|N+_L>igH7Fp(j_+#ONii0t!%7wr23IoBwHVpskZq zQK0LoI;rFqE=nF1edqc%b#y9qRQ+GzwR@kCviff!_q=zy4V4Qj$^j0*E6O9~kY3+^ zrPir$Z|Q7{IIXd+sM8nrrArQW#S?L7ckD!aM|Z@DM-qvS&bGc!zUJ~%8Zq^!;|b<^ z9j7HTZ9J6yCOi18w|_c4<)((*o+obVo|_tWdv1JBk9-{+=$pwM2+uoiyqObjYRc^y NoOj0f*}MZ;e*pX(rH23j delta 1096 zcmYk*O-NKx7{>8;Y(~==&9RTE#&J@oaPJ@?#uKHhWAYGxxH>^4OgjnqSK zCND+I`t^K)8>u5|b`$fM#sO5-1lD5N%QM(Sc@8h)Q*6Ok*omL;25w;ko`eP#iG?p3 z-7H?>gCg>c^`aW=$1Dz`I+{WaAix@YjwxKgYxoh>&Ue)Rzpx6ou^M-<&H}T29=Pn7 zn;QI!3H*mijPtdA$hbMYLb(goa35*_L#POjpdvJbYG=;t1Js0`xi2wE|F*zGH@-*x z@EbM5J=|i*f3QS(lhG*xwRPcu@@|iNAFop1i<vs2@JKD_;M_%j?Kxo7^?)$%H7G8)Kb@-1>o>#vzBELz(FSxM`p zq%bSBlH15SrsvZg3fg>1I;L924ziA(QZeLg<7r8i?vb_OHNk?y#w5>nvd*Q}QxW-} fbY^dRAz7J>eyfyXqidgIKVp^T`25;z;z89ZS~g4* diff --git a/languages/ArchivePostOrderPlus-ja.po b/languages/ArchivePostOrderPlus-ja.po index acf7cc8..56ea334 100644 --- a/languages/ArchivePostOrderPlus-ja.po +++ b/languages/ArchivePostOrderPlus-ja.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Archive Post Order Plus\n" "Report-Msgid-Bugs-To: Translator Name \n" -"POT-Creation-Date: 2021-07-11 17:11+0900\n" +"POT-Creation-Date: 2021-07-23 16:59+0900\n" "PO-Revision-Date: \n" "Last-Translator: NBK45 \n" "Language-Team: NBK45 \n" @@ -27,84 +27,89 @@ msgstr "" msgid "APO + custom field settings" msgstr "APO+カスタムフィールド" -#: class/class.apop.apop_post.php:54 template/order.php:8 +#: class/class.apop.apop_post.php:57 template/order.php:8 msgid "Your latest posts" msgstr "最新の投稿" -#: class/class.apop.apop_post.php:55 template/order.php:9 template/order.php:54 +#: class/class.apop.apop_post.php:58 template/order.php:9 template/order.php:55 msgid "Search" msgstr "検索" -#: class/class.apop.apop_post.php:56 +#: class/class.apop.apop_post.php:59 msgid "Category, Tag, Custom Taxonomy" msgstr "カテゴリー、タグ、カスタム分類" -#: class/class.apop.apop_ui.php:292 +#: class/class.apop.apop_post.php:60 +msgid "Custom posts archive" +msgstr "カスタム投稿アーカイブ" + +#: class/class.apop.apop_ui.php:352 +msgid "Select" +msgstr "選択" + +#: class/class.apop.apop_ui.php:357 +msgid "Add" +msgstr "追加" + +#: class/class.apop.apop_ui.php:364 +msgid "Type" +msgstr "値タイプ" + +#: class/class.apop.apop_ui.php:369 +msgid "Text" +msgstr "テキスト" + +#: class/class.apop.apop_ui.php:373 +msgid "Number" +msgstr "数値" + +#: class/class.apop.apop_ui.php:469 msgid "Published" msgstr "投稿日" -#: class/class.apop.apop_ui.php:293 +#: class/class.apop.apop_ui.php:470 msgid "Post Title" msgstr "タイトル" -#: class/class.apop.apop_ui.php:295 +#: class/class.apop.apop_ui.php:472 msgid "Modified" msgstr "更新日" -#: class/class.apop.apop_ui.php:296 +#: class/class.apop.apop_ui.php:473 msgid "Custom filed 1" msgstr "カスタムフィールド1" -#: class/class.apop.apop_ui.php:297 +#: class/class.apop.apop_ui.php:474 msgid "Custom filed 2" msgstr "カスタムフィールド2" -#: class/class.apop.apop_ui.php:298 +#: class/class.apop.apop_ui.php:475 msgid "Custom filed 3" msgstr "カスタムフィールド3" -#: class/class.apop.apop_ui.php:299 +#: class/class.apop.apop_ui.php:476 msgid "Custom filed 4" msgstr "カスタムフィールド4" -#: class/class.apop.apop_ui.php:321 template/order.php:33 template/order.php:64 +#: class/class.apop.apop_ui.php:497 template/order.php:34 template/order.php:65 +#: template/order_parts_custom_posts.php:46 #: template/order_parts_taxonomy.php:46 msgid "Enabled" msgstr "有効" -#: class/class.apop.apop_ui.php:327 +#: class/class.apop.apop_ui.php:503 msgid "Asc" msgstr "昇順" -#: class/class.apop.apop_ui.php:331 +#: class/class.apop.apop_ui.php:507 msgid "Desc" msgstr "降順" -#: class/class.apop.apop_ui.php:358 -msgid "Select" -msgstr "選択" - -#: class/class.apop.apop_ui.php:363 -msgid "Add" -msgstr "追加" - -#: class/class.apop.apop_ui.php:370 -msgid "Type" -msgstr "値タイプ" - -#: class/class.apop.apop_ui.php:375 -msgid "Text" -msgstr "テキスト" - -#: class/class.apop.apop_ui.php:379 -msgid "Number" -msgstr "数値" - -#: class/class.apop.order.php:36 +#: class/class.apop.order.php:39 msgid "Display number / target setting" msgstr "表示件数・対象設定" -#: class/class.apop.order.php:44 template/order.php:5 +#: class/class.apop.order.php:47 template/order.php:5 msgid "Sorting" msgstr "並べ替え" @@ -112,48 +117,59 @@ msgstr "並べ替え" msgid "apop-lang-en" msgstr "apop-lang-ja" -#: template/order.php:10 template/order.php:86 +#: template/order.php:10 template/order.php:87 msgid "Category" msgstr "カテゴリー" -#: template/order.php:11 template/order.php:95 +#: template/order.php:11 template/order.php:96 msgid "Tag" msgstr "タグ" -#: template/order.php:12 template/order.php:104 +#: template/order.php:12 template/order.php:105 msgid "Custom taxonomy" msgstr "カスタム分類" -#: template/order.php:23 +#: template/order.php:13 template/order.php:113 +msgid "Custom posts" +msgstr "カスタム投稿アーカイブ" + +#: template/order.php:24 msgid "Your latest posts / Settings - Reading Settings" msgstr "最新の投稿(設定-表示設定ーホームページの表示)" -#: template/order.php:30 template/order.php:61 +#: template/order.php:31 template/order.php:62 +#: template/order_parts_custom_posts.php:36 +#: template/order_parts_custom_posts.php:44 #: template/order_parts_taxonomy.php:36 template/order_parts_taxonomy.php:44 msgid "Click \"Save Changes\" to register the sort." msgstr "並べ替えを登録するには「変更を保存」をクリックしてください。" -#: template/order.php:39 template/order.php:70 +#: template/order.php:40 template/order.php:71 +#: template/order_parts_custom_posts.php:52 #: template/order_parts_taxonomy.php:52 msgid "Disabled" msgstr "無効" -#: template/order.php:110 template/setting.php:45 +#: template/order.php:120 template/setting.php:46 msgid "Save changes" msgstr "変更を保存" -#: template/order_parts_menu.php:6 template/order_parts_taxonomy.php:22 +#: template/order_parts_custom_posts.php:22 template/order_parts_menu.php:6 +#: template/order_parts_taxonomy.php:22 msgid "Standard + custom field sort" msgstr "標準+カスタムフィールドソート" -#: template/order_parts_menu.php:9 template/order_parts_taxonomy.php:29 +#: template/order_parts_custom_posts.php:29 template/order_parts_menu.php:9 +#: template/order_parts_taxonomy.php:29 msgid "Drag sort" msgstr "ドラッグソート" +#: template/order_parts_custom_posts.php:60 #: template/order_parts_taxonomy.php:59 msgid "No" msgstr "並べ替えをカスタマイズする「" +#: template/order_parts_custom_posts.php:60 #: template/order_parts_taxonomy.php:59 msgid "has been selected." msgstr "」は選択されていません。" @@ -170,19 +186,23 @@ msgstr "全体設定" msgid "Displayed per page" msgstr "1ページ表示件数" -#: template/setting.php:16 template/setting_parts_taxonomy.php:31 +#: template/setting.php:16 template/setting_parts_customposts.php:31 +#: template/setting_parts_taxonomy.php:31 msgid "Follow display settings" msgstr "表示設定に従う" -#: template/setting.php:18 template/setting_parts_taxonomy.php:32 +#: template/setting.php:18 template/setting_parts_customposts.php:33 +#: template/setting_parts_taxonomy.php:32 msgid "Posts" msgstr "件" -#: template/setting.php:22 template/setting_parts_taxonomy.php:42 +#: template/setting.php:22 template/setting_parts_customposts.php:44 +#: template/setting_parts_taxonomy.php:42 msgid "All posts" msgstr "全件" -#: template/setting.php:28 template/setting_parts_taxonomy.php:47 +#: template/setting.php:28 template/setting_parts_customposts.php:50 +#: template/setting_parts_taxonomy.php:47 msgid "Set the number posts" msgstr "表示数設定" @@ -198,10 +218,16 @@ msgstr "タグ設定" msgid "Custom Taxonomies setting" msgstr "カスタム分類設定" +#: template/setting.php:43 +msgid "Custom Posts Archive setting" +msgstr "カスタム投稿アーカイブ設定" + +#: template/setting_parts_customposts.php:3 #: template/setting_parts_taxonomy.php:3 msgid "Targets" msgstr "対象" +#: template/setting_parts_customposts.php:38 #: template/setting_parts_taxonomy.php:37 msgid "Follow global settings" msgstr "全体設定に従う" diff --git a/readme.txt b/readme.txt index b9109ed..2e58e2f 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: latest posts order,categories post order,tags post order,custom taxonomy p Requires at least: 4.9 Tested up to: 5.7.2 Requires PHP: 7.0 -Stable tag: 1.1.7 +Stable tag: 1.1.8 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -18,6 +18,7 @@ This plugin is a plugin that customizes the posting order below. - Category - Tag - Custom Taxonomy +- Custom Posts Archive このプラグインは、下記の投稿表示順をカスタマイズするプラグインです。 ・[設定]-[表示設定]の「最新の投稿」 @@ -25,6 +26,7 @@ This plugin is a plugin that customizes the posting order below. ・カテゴリー ・タグ ・カスタム分類 +・カスタム投稿アーカイブ = Specification = Select either 1) standard + custom field sort or 2) drag sort for the display order. @@ -69,7 +71,6 @@ In the list of posts displayed in the list, drag the posts to set the display or == Frequently Asked Questions == - == Screenshots == screenshot-1.png screenshot-2.png @@ -81,6 +82,12 @@ screenshot-7.png screenshot-8.png == Changelog == += 1.1.8 = +Supports sort settings for custom post archives +Bug fixed: "Follow global settings" of category, tag, and custom classification does not work properly when all items are selected in global settings. + +カスタム投稿アーカイブのソート設定対応 +全体設定で全件を選択している時にカテゴリー、タグ、カスタム分類の「全体設定に従う」が正常機能しないバグの修正 = 1.1.7 = Supports translation. diff --git a/template/order.php b/template/order.php index bb7cea7..76d1b7a 100644 --- a/template/order.php +++ b/template/order.php @@ -10,6 +10,7 @@ $submit_type = APOP_UI::input_post_filter( 'apop_submit_type', 'str' );
  • +
  • @@ -83,30 +84,39 @@ $submit_type = APOP_UI::input_post_filter( 'apop_submit_type', 'str' );
    APOP_UI::get_cat_tag_list( 'cat', 'category' ) ); - $tax_title_text = __('Category', APOP_DOMAIN); + $tax_title_text = __( 'Category', APOP_DOMAIN ); + include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?> -
    APOP_UI::get_cat_tag_list( 'tag', 'post_tag' ) ); - $tax_title_text = __('Tag', APOP_DOMAIN); + $tax_title_text = __( 'Tag', APOP_DOMAIN ); + include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?> -
    APOP_UI::get_cat_tag_list( 'tax', 'taxonomy' ) ); - $tax_title_text = __('Custom taxonomy', APOP_DOMAIN); + $tax_title_text = __( 'Custom taxonomy', APOP_DOMAIN ); + include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?> +
    +
    +
    +
    + -
    -

    +

    \ No newline at end of file diff --git a/template/order_parts_custom_posts.php b/template/order_parts_custom_posts.php new file mode 100644 index 0000000..dc02ca0 --- /dev/null +++ b/template/order_parts_custom_posts.php @@ -0,0 +1,62 @@ + +
    + 0 ): ?> + +
    +

    + + +
      +
    • + +
    • +
    • + +
    • +
    + +
    +
    +

    +
      + +
    +
    + +
    +
    +

    +
    +

    +
      + +
    +
    +
    +

    +
      +
      +
      +
      + + +

      + +
      + +

      diff --git a/template/setting_parts_customposts.php b/template/setting_parts_customposts.php new file mode 100644 index 0000000..ae9e383 --- /dev/null +++ b/template/setting_parts_customposts.php @@ -0,0 +1,64 @@ + +

      +
      +
      +
        + $label ): ?> + +
      • +
        + +
        + +
        +
          +
        • + +
        • +
        • +
        • +
        • +
        • +
        • + +
        • +
        +
        +
      • + +
      +
      +
      + $check ) { + if ( $check == '1' ) { + $custom_post_list[] = [ + 'label' => get_post_type_object( $target )->label, + 'slug' => $target, + ]; + } + } + + return $custom_post_list; + } + + public static function create_custompost_archive_order_list( $slug ): string { + $args = array( + 'posts_per_page' => - 1, + 'post_type' => array( $slug ), + 'orderby' => 'meta_value_num', + 'order' => 'ASC', + ); + self::create_sort_post_list_meta_query( $args, '_apop_customposts_' . $slug ); + $return_data = get_posts( $args ); + $list = array(); + foreach ( $return_data as $key => $target_post ) { + $sort_num = $key + 1; + $no_order = self::is_sort_custompost_archive_registered( $target_post->ID, $slug ) ? '' : ' no-order'; + $list[] = ' +
    • ' . '' . esc_attr( $sort_num ) . '' . get_the_title( $target_post->ID ) . ' + +
    • '; + } + + return implode( PHP_EOL, $list ); + } + + + private static function is_sort_custompost_archive_registered( $id, $slug ): bool { + $post_meta = get_post_meta( $id, '_apop_customposts_' . $slug, true ); + if ( ! empty( $post_meta ) ) { + return true; + } + + return false; + } + + public static function create_custompost_archive_normal_list( $slug ) { + $name_keys = array( + 'name_key' => 'apop_custompost_archive_order_param[' . $slug . ']', + 'get_option_key' => '_apop_custompost_archive_order_param', + ); + $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 ( isset( $order_param_base[ $slug ] ) ) { + $order_param = $order_param_base[ $slug ]; + } + self::create_normal_sort_list( $name_key, $order_param ); + } + + private function set_custompost_orderby( $query, $post_type ) { + $sort_type = get_option( '_apop_custompost_archive_sort_type' )[ $post_type ]; + if ( $sort_type == 1 ) { + $sort_meta_key = self::set_custompost_sort_meta_key( $post_type ); + if ( is_null( $sort_meta_key ) ) { + $this->set_search_normal_orderby( $query, 'custompost_archive' ); + } else { + $query->set( 'meta_query', self::get_all_post_args( $sort_meta_key ) ); + $query->set( 'orderby', array( 'meta_value' => 'ASC', ) ); + } + } else { + $meta_orderby = self::set_custompost_custom_field_orderby( $post_type ); + if ( isset( $meta_orderby['meta_query'] ) ) { + $query->set( 'meta_query', $meta_orderby['meta_query'] ); + } + if ( isset( $meta_orderby['orderby'] ) ) { + $query->set( 'orderby', $meta_orderby['orderby'] ); + } + } + $per_page_option_data = self::set_custompost_per_page( $post_type ); + $query->set( 'posts_per_page', $per_page_option_data ); + } + + private static function set_custompost_sort_meta_key( $post_type ) { + $order_settings = get_option( '_apop_custompost_archive_order' ); + if ( isset( $order_settings['target_post'][ $post_type ] ) && $order_settings['target_post'][ $post_type ] == 1 ) { + return '_apop_customposts_' . $post_type; + } + + return null; + } + + private static function set_custompost_custom_field_orderby( $post_type ): array { + $order_param = get_option( '_apop_custompost_archive_order_param' ); + if ( isset( $order_param[ $post_type ] ) ) { + return self::set_custom_field_orderby( $order_param[ $post_type ] ); + } + } + + private static function set_custompost_per_page( $post_type ) { + $per_page_option = get_option( '_apop_per_page' ); + if ( ! $per_page_option ) { + return; + } + + $per_page_option_data = $per_page_option['custompost_archive'][ $post_type ]; + if ( ! isset( $per_page_option_data ) ) { + return; + } + + if ( $per_page_option_data == 'default' ) { + return; + } + + if ( $per_page_option_data == 'all' ) { + if ( $per_page_option['search'] == 'default' ) { + return; + } + $per_page_option_data = $per_page_option['search']; + } + + return $per_page_option_data; + } + + } +} \ No newline at end of file diff --git a/util/apop-order-setting.php b/util/apop-order-setting.php index 8dc6c50..ff4958c 100644 --- a/util/apop-order-setting.php +++ b/util/apop-order-setting.php @@ -12,6 +12,11 @@ if ( ! trait_exists( 'APOP_ORDER_SETTING' ) ) { add_action( 'pre_get_posts', array( $this, 'apop_posts_per_page' ), 1 ); } + /** + * ソートのクエリを生成 + * + * @param $query + */ public function apop_posts_per_page( $query ) { if ( is_admin() || ! $query->is_main_query() ) { @@ -26,6 +31,13 @@ if ( ! trait_exists( 'APOP_ORDER_SETTING' ) ) { $this->set_search_normal_orderby( $query, 'search' ); } + if ( is_post_type_archive() ) { + $post_type = get_query_var( 'post_type' ); + if ( $post_type ) { + $this->set_custompost_orderby( $query, $post_type ); + } + } + if ( is_category() ) { $cat = get_category_by_slug( $query->query_vars['category_name'] ); if ( isset( $cat->term_id ) ) { @@ -47,33 +59,9 @@ if ( ! trait_exists( 'APOP_ORDER_SETTING' ) ) { } } - private static function set_per_page( $target, $id = null ) { - $per_page_option = get_option( '_apop_per_page' ); - - if(!$per_page_option){ - return; - } - - if ( is_null( $id ) ) { - $per_page_option_data = $per_page_option[ $target ]; - } else { - $per_page_target = $target == 'tax' ? 'taxonomy' : $target; - $per_page_option_data = $per_page_option[ $per_page_target ][ $id ]; - } - - if ( ! isset( $per_page_option_data ) ) { - return; - } - if ( $per_page_option_data == 'default' ) { - return; - } - if ( $per_page_option_data == 'all' ) { - $per_page_option_data = $per_page_option['search'];; - } - - return $per_page_option_data; - } - + //----------------------------------------------------------- + // 最近の投稿と検索のソートのクエリ生成 + //----------------------------------------------------------- private function set_search_normal_orderby( $query, $type ) { $apop_order = get_option( '_apop_' . $type . '_order' ) ?? 1; if ( $apop_order == 2 ) { @@ -93,98 +81,9 @@ if ( ! trait_exists( 'APOP_ORDER_SETTING' ) ) { $query->set( 'posts_per_page', $per_page_option_data ); } - private static function set_custom_filed_sort( &$orderby, $order_col, $orders, $sort_param ): array { - if ( strpos( $order_col, 'custom_field' ) !== false ) { - if($orders['field']['custom_field_type'] == 2){ - $meta_key = APOP_CUSTOM_FIELD_PREFIX . $orders['field']['meta_key']; - }else{ - $meta_key = $orders['field']['meta_key']; - } - $type = 'CHAR'; - if ( $orders['field']['value_type'] == 'meta_value_num' ) { - $type = 'NUMERIC'; - } elseif ( $orders['field']['value_type'] == 'meta_value' ) { - $type = 'CHAR'; - } elseif ( $orders['field']['value_type'] == 'meta_date' ) { - $type = 'DATE'; - } - if ( isset( $orders['sort'] ) ) { - $orderby[ $meta_key ] = $sort_param[ $orders['sort'] ]; - } - - return array( $meta_key, $type ); - } - } - - private function set_orderby( $query, $id, $target, $order_key ) { - $sort_type = self::get_tax_sort_type( $id ); - if ( $sort_type == 1 ) { - $sort_meta_key = self::set_tax_sort_meta_key( $id, $target, $order_key ); - if ( is_null( $sort_meta_key ) ) { - $this->set_search_normal_orderby( $query, 'normal' ); - } else { - $query->set( 'meta_query', self::get_all_post_args( $sort_meta_key ) ); - $query->set( 'orderby', array( 'meta_value' => 'ASC', ) ); - } - } else { - $meta_orderby = self::set_tax_custom_field_orderby( $id ); - if ( isset( $meta_orderby['meta_query'] ) ) { - $query->set( 'meta_query', $meta_orderby['meta_query'] ); - } - if ( isset( $meta_orderby['orderby'] ) ) { - $query->set( 'orderby', $meta_orderby['orderby'] ); - } - } - $per_page_option_data = self::set_per_page( self::get_per_page_tag( $target ), $id ); - $query->set( 'posts_per_page', $per_page_option_data ); - } - - private static function get_tax_sort_type( $id ) { - $sort_type = get_option( '_apop_tax_sort_type' ); - - return $sort_type[ $id ] ?? 1; - } - - private static function set_tax_sort_meta_key( $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 ) { - return '_apop_post_' . $target . '_' . $id; - } - - return null; - } - - private static function set_tax_custom_field_orderby( $id ): array { - $tax_order_param = get_option( '_apop_tax_order_param' ); - if ( isset( $tax_order_param[ $id ] ) ) { - return self::set_custom_field_orderby( $tax_order_param[ $id ] ); - } - } - - private static function get_per_page_tag( $target ) { - if ( $target == 'post_tag' ) { - return 'tag'; - } - - return $target; - } - - private static function get_all_post_args( $sort_meta_key, $type = 'numeric' ): array { - return array( - 'relation' => 'OR', - array( - 'key' => $sort_meta_key, - 'compare' => 'EXISTS', - 'type' => $type, - ), - array( - 'key' => $sort_meta_key, - 'compare' => 'NOT EXISTS', - 'type' => $type, - ), - ); - } - + //----------------------------------------------------------- + //標準ソート+カスタムフィールドソートのカスタムフィールドデータ取得 + //----------------------------------------------------------- private static function set_custom_field_orderby( $apop_order_param ): array { if ( ! $apop_order_param ) { return array(); @@ -211,94 +110,81 @@ if ( ! trait_exists( 'APOP_ORDER_SETTING' ) ) { ); } - - /** - * - * 1ページ表示件数を取得する - * APOP::per_page(ID, [TARGET]); - * [TARGET] - * cat - * tag - * tax - * - * @param string $target - * @param null $id - * - * @return array - */ - public static function per_page( $id = null, string $target = 'search' ) { - if ( $target == 'cat' ) { - $target = 'category'; - } - - return array( 'posts_per_page' => self::set_per_page( $target, $id ) ); - } - - - /** - * 最新の投稿ページのソートを取得する - * APOP::orderby_normal() - * @return array|null - */ - public static function orderby_normal() { - $apop_order = get_option( '_apop_normal_order' ) ?? 1; - if ( $apop_order == 2 ) { - return array( - 'meta_query' => self::get_all_post_args( '_apop_normal_order' ), - 'orderby' => array( 'meta_value_num' => 'ASC' ), - ); - } else { - $apop_order_param = get_option( '_apop_normal_order_param' ); - $meta_orderby = self::set_custom_field_orderby( $apop_order_param ); - if ( is_null( $meta_orderby['meta_query'] ) ) { - unset( $meta_orderby['meta_query'] ); - } - if ( is_null( $meta_orderby['orderby'] ) ) { - unset( $meta_orderby['orderby'] ); - } - - return $meta_orderby; - } - - return; - } - - /** - * カテゴリー、タグ、カスタム分類のソートを取得する - * APOP::orderby_tax([ID, TARGET], ); - * [TARGET] - * cat - * tag - * tax - * - * @param $id - * @param $target - * - * @return array - */ - public static function orderby_tax( $id, $target ) { - $sort_type = self::get_tax_sort_type( $id ); - if ( $sort_type == 1 ) { - $order_key = $target; - if ( $target == 'tag' ) { - $target == 'post_tag'; - } elseif ( $target = 'cat' ) { - $target == 'category'; - } - $sort_meta_key = self::set_tax_sort_meta_key( $id, $target, $order_key ); - if ( is_null( $sort_meta_key ) ) { - return self::orderby_normal(); + private static function set_custom_filed_sort( &$orderby, $order_col, $orders, $sort_param ): array { + if ( strpos( $order_col, 'custom_field' ) !== false ) { + if ( $orders['field']['custom_field_type'] == 2 ) { + $meta_key = APOP_CUSTOM_FIELD_PREFIX . $orders['field']['meta_key']; } else { - return array( - 'meta_query' => self::get_all_post_args( $sort_meta_key ), - 'orderby' => array( 'meta_value_num' => 'ASC' ), - ); + $meta_key = $orders['field']['meta_key']; } - } else { - return self::set_tax_custom_field_orderby( $id ); + $type = 'CHAR'; + if ( $orders['field']['value_type'] == 'meta_value_num' ) { + $type = 'NUMERIC'; + } elseif ( $orders['field']['value_type'] == 'meta_value' ) { + $type = 'CHAR'; + } elseif ( $orders['field']['value_type'] == 'meta_date' ) { + $type = 'DATE'; + } + if ( isset( $orders['sort'] ) ) { + $orderby[ $meta_key ] = $sort_param[ $orders['sort'] ]; + } + + return array( $meta_key, $type ); + } + } + + //----------------------------------------------------------- + // ソートキーが無くともデータを抽出するようEXISTSとNOT EXISTSをリレーションする + //----------------------------------------------------------- + private static function get_all_post_args( $sort_meta_key, $type = 'numeric' ): array { + return array( + 'relation' => 'OR', + array( + 'key' => $sort_meta_key, + 'compare' => 'EXISTS', + 'type' => $type, + ), + array( + 'key' => $sort_meta_key, + 'compare' => 'NOT EXISTS', + 'type' => $type, + ), + ); + } + + //----------------------------------------------------------- + // 1ページ表示件数の取得 + //----------------------------------------------------------- + private static function set_per_page( $target, $id = null ) { + $per_page_option = get_option( '_apop_per_page' ); + + if ( ! $per_page_option ) { + return; } - return; + if ( is_null( $id ) ) { + $per_page_option_data = $per_page_option[ $target ]; + } else { + $per_page_target = $target == 'tax' ? 'taxonomy' : $target; + $per_page_option_data = $per_page_option[ $per_page_target ][ $id ]; + } + + if ( ! isset( $per_page_option_data ) ) { + return; + } + + if ( $per_page_option_data == 'default' ) { + return; + } + + if ( $per_page_option_data == 'all' ) { + if ( $per_page_option['search'] == 'default' ) { + return; + } + $per_page_option_data = $per_page_option['search']; + } + + return $per_page_option_data; } } diff --git a/util/apop-output.php b/util/apop-output.php new file mode 100644 index 0000000..c075985 --- /dev/null +++ b/util/apop-output.php @@ -0,0 +1,102 @@ + self::set_per_page( $target, $id ) ); + } + + + /** + * 最新の投稿ページのソートを取得する + * APOP::orderby_normal() + * @return array|null + */ + public static function orderby_normal() { + $apop_order = get_option( '_apop_normal_order' ) ?? 1; + if ( $apop_order == 2 ) { + return array( + 'meta_query' => self::get_all_post_args( '_apop_normal_order' ), + 'orderby' => array( 'meta_value_num' => 'ASC' ), + ); + } else { + $apop_order_param = get_option( '_apop_normal_order_param' ); + $meta_orderby = self::set_custom_field_orderby( $apop_order_param ); + if ( is_null( $meta_orderby['meta_query'] ) ) { + unset( $meta_orderby['meta_query'] ); + } + if ( is_null( $meta_orderby['orderby'] ) ) { + unset( $meta_orderby['orderby'] ); + } + + return $meta_orderby; + } + + return; + } + + /** + * カテゴリー、タグ、カスタム分類のソートを取得する + * APOP::orderby_tax([ID, TARGET], ); + * [TARGET] + * cat + * tag + * tax + * + * @param $id + * @param $target + * + * @return array + */ + public static function orderby_tax( $id, $target ) { + $sort_type = self::get_tax_sort_type( $id ); + if ( $sort_type == 1 ) { + $order_key = $target; + if ( $target == 'tag' ) { + $target == 'post_tag'; + } elseif ( $target = 'cat' ) { + $target == 'category'; + } + $sort_meta_key = self::set_tax_sort_meta_key( $id, $target, $order_key ); + if ( is_null( $sort_meta_key ) ) { + return self::orderby_normal(); + } else { + return array( + 'meta_query' => self::get_all_post_args( $sort_meta_key ), + 'orderby' => array( 'meta_value_num' => 'ASC' ), + ); + } + } else { + return self::set_tax_custom_field_orderby( $id ); + } + + return; + } + + } +} \ No newline at end of file diff --git a/util/apop-tax.php b/util/apop-tax.php new file mode 100644 index 0000000..1b3a85d --- /dev/null +++ b/util/apop-tax.php @@ -0,0 +1,65 @@ +set_search_normal_orderby( $query, 'normal' ); + } else { + $query->set( 'meta_query', self::get_all_post_args( $sort_meta_key ) ); + $query->set( 'orderby', array( 'meta_value' => 'ASC', ) ); + } + } else { + $meta_orderby = self::set_tax_custom_field_orderby( $id ); + if ( isset( $meta_orderby['meta_query'] ) ) { + $query->set( 'meta_query', $meta_orderby['meta_query'] ); + } + if ( isset( $meta_orderby['orderby'] ) ) { + $query->set( 'orderby', $meta_orderby['orderby'] ); + } + } + $per_page_option_data = self::set_per_page( self::get_per_page_tag( $target ), $id ); + $query->set( 'posts_per_page', $per_page_option_data ); + } + + private static function get_tax_sort_type( $id ) { + $sort_type = get_option( '_apop_tax_sort_type' ); + + return $sort_type[ $id ] ?? 1; + } + + private static function set_tax_sort_meta_key( $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 ) { + return '_apop_post_' . $target . '_' . $id; + } + + return null; + } + + private static function set_tax_custom_field_orderby( $id ): array { + $tax_order_param = get_option( '_apop_tax_order_param' ); + if ( isset( $tax_order_param[ $id ] ) ) { + return self::set_custom_field_orderby( $tax_order_param[ $id ] ); + } + } + + private static function get_per_page_tag( $target ) { + if ( $target == 'post_tag' ) { + return 'tag'; + } + + return $target; + } + } +} \ No newline at end of file From f9351fc32fbdbf728a7745a4d4fa0dd30e6fdae6 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 23 Jul 2021 17:28:52 +0900 Subject: [PATCH 2/2] =?UTF-8?q?ARCHIVE=20POST=20ORDER=20PLUS=EF=BC=9AReadm?= =?UTF-8?q?e=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.txt | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/readme.txt b/readme.txt index 2e58e2f..4a35e15 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: latest posts order,categories post order,tags post order,custom taxonomy p Requires at least: 4.9 Tested up to: 5.7.2 Requires PHP: 7.0 -Stable tag: 1.1.8 +Stable tag: 1.1.7 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html @@ -18,7 +18,6 @@ This plugin is a plugin that customizes the posting order below. - Category - Tag - Custom Taxonomy -- Custom Posts Archive このプラグインは、下記の投稿表示順をカスタマイズするプラグインです。 ・[設定]-[表示設定]の「最新の投稿」 @@ -26,7 +25,6 @@ This plugin is a plugin that customizes the posting order below. ・カテゴリー ・タグ ・カスタム分類 -・カスタム投稿アーカイブ = Specification = Select either 1) standard + custom field sort or 2) drag sort for the display order. @@ -82,12 +80,6 @@ screenshot-7.png screenshot-8.png == Changelog == -= 1.1.8 = -Supports sort settings for custom post archives -Bug fixed: "Follow global settings" of category, tag, and custom classification does not work properly when all items are selected in global settings. - -カスタム投稿アーカイブのソート設定対応 -全体設定で全件を選択している時にカテゴリー、タグ、カスタム分類の「全体設定に従う」が正常機能しないバグの修正 = 1.1.7 = Supports translation.