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 505fc8e..efd8f6e 100644
Binary files a/languages/ArchivePostOrderPlus-ja.mo and b/languages/ArchivePostOrderPlus-ja.mo differ
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' );
+
\ 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 @@
+
+
+
+
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 @@
+
+
+
+ -
+
+
+
+ $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