Compare commits

...

36 Commits

Author SHA1 Message Date
nobu d4e4c772aa ・WordPress6.9動作確認
・PHP8.3対応修正
2025-12-17 09:23:22 +09:00
nobu d8375c5abe Fixed Notice Error 2024-06-08 00:02:54 +09:00
nobu 49f7d3088c Fixed Notice Error 2024-06-07 23:58:28 +09:00
nobu 49d6527486 add WP Confirm Version 2023-09-12 19:12:19 +09:00
nobu 1791cd0ab7 add WP Confirm Version 2023-09-12 17:04:13 +09:00
nobu 7d3fb10582 WordPress6.1 動作確認 2022-11-04 01:02:50 +09:00
nobu 6f064eaafa WP6.0 対応チェック
軽微な修正
・テンプレートのミスタイプの修正
・メソッドの戻り型指定の追加
・不要な変数代入の削除
・ファイルインクルードの条件追加
2022-05-28 19:57:51 +09:00
nobu 7b67bdf5f4 WordPress5.9動作確認
カスタム投稿アーカイブのNoticeエラー修正
2022-02-06 11:25:55 +09:00
nobu 5fd91acb2e バージョン情報を追記 2021-12-12 18:25:43 +09:00
nobu f96800dc9e 並べ替えのレイアウト修正
JSの変数宣言を最適化
2021-12-12 18:07:35 +09:00
nobu bc37f8ac26 ARCHIVE POST ORDER PLUS:Readme修正 2021-07-23 17:36:40 +09:00
nobu 8b2c2e520f ARCHIVE POST ORDER PLUS:Readme修正 2021-07-23 17:30:45 +09:00
nobu fd93eb9a07 Merge pull request 'ARCHIVE POST ORDER PLUS:カスタム投稿アーカイブの追加' (#12) from カスタム投稿対応 into master
Reviewed-on: https://develop.n-k-y.net/repo/WP_PLUGIN/POST_ORDER_BY_ARCHIVE/pulls/12
2021-07-23 17:29:36 +09:00
nobu f9351fc32f ARCHIVE POST ORDER PLUS:Readme修正 2021-07-23 17:28:52 +09:00
nobu 4bc96228bd ARCHIVE POST ORDER PLUS:カスタム投稿アーカイブの追加
カスタム投稿アーカイブ対応
全体設定で「全件」指定時に「全体設定に従う」の設定が反映されないバグの修正
2021-07-23 17:22:42 +09:00
nobu 6051380d2c ARCHIVE POST ORDER PLUS:WordPress5.8動作確認
WordPress5.8の動作確認完了
2021-07-21 19:07:12 +09:00
nobu b8dcf1c44c ARCHIVE POST ORDER PLUS
翻訳対応
検索のカスタムフィールド選択バグ修正
2021-07-11 17:41:03 +09:00
nobu ae93196007 AUTO LOGOUT EXTENDED
初期エラー(notice)修正
2021-07-05 21:01:42 +09:00
nobu 5598be1d0b APOP
delete ignore file
2021-06-30 18:45:03 +09:00
nobu 8c3f79d7a9 WP PLUGIN APOP
add jQuery-Sortable for Touch Device
2021-06-30 11:19:43 +09:00
nobu ada1e0eadf WP PLUGIN APOP
add jQuery-Sortable for Touch Device
2021-06-30 11:01:07 +09:00
nobu 1414f330e8 WP PLUGIN
・ライブラリインクルードが外れていたため修正
2021-06-28 16:56:34 +09:00
nobu a6568404e9 WP PLUGIN
・ライブラリインクルードが外れていたため修正
2021-06-28 16:54:32 +09:00
nobu 8ec3d53bfe WP PLUGIN
・選択カスタムフィールドをオートコンプリートに変更
・ソート対象名:「通常」から「最新の投稿」に変更
2021-06-27 18:57:34 +09:00
nobu 49087f4950 WP PLUGIN
・選択カスタムフィールドのセレクタIDをクラスに修正
2021-06-27 12:15:17 +09:00
nobu 693752d71a WP PLUGIN
・選択カスタムフィールドをオートコンプリートに変更
2021-06-26 16:23:35 +09:00
nobu b69c5fbd88 WP PLUGIN
・選択カスタムフィールドを読み取り専用表示するよう修正
2021-06-26 12:10:11 +09:00
nobu 188966cff5 WP PLUGIN
・バグ修正:カスタムフィールドのselected属性の追加漏れ修正
2021-06-26 03:11:30 +09:00
nobu ff50cbdff8 WP PLUGIN
・バグ修正:カスタムフィールドのselected属性の追加漏れ修正
2021-06-26 03:09:28 +09:00
nobu f6d64404a7 WP PLUGIN
・カスタムフィールドの必須チェック漏れの修正
・既存カスタムフィールド選択も可能なよう修正
・ソートのリストに背景色を設定
・並べ替え設定ページの更新ボタン位置を修正
・カテゴリー、タグ、カスタム分類のソート対象選択のラジオボタン並び順を標準、検索と同一になるよう修正
2021-06-25 20:58:52 +09:00
nobu c7996062fa WP PLUGIN 検索のソート設定修正
・テキスト修正
2021-06-22 18:55:44 +09:00
nobu 2b21a55317 WP PLUGIN 検索のソート設定修正
・誤って削除していたので復旧
2021-06-22 18:19:32 +09:00
nobu b14b9739a7 WP PLUGIN 検索のソート設定修正
・検索のソート対象にカスタム投稿を追加
・バージョン変更漏れ修正
2021-06-22 18:17:52 +09:00
nobu 99593ee863 WP PLUGIN 検索のソート設定修正
・検索のソート対象にカスタム投稿を追加
2021-06-22 14:59:21 +09:00
nobu a76410908b WP PLUGIN CSSセレクタの修正
・アンダーバーからハイフンに変更
2021-06-19 10:18:06 +09:00
nobu ff1dcdc5f4 WP PLUGIN エスケープ処理の修正
・echo時にエスケープするようメソッド修正
・HTMLタグないのエスケープをesc_attr()に変更
2021-06-19 09:18:48 +09:00
32 changed files with 3358 additions and 1038 deletions
+1
View File
@@ -0,0 +1 @@
/.idea/
-31
View File
@@ -1,31 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CakeStormCakeSettings">
<option name="cakeVersionAbsorption">
<map>
<entry key="Controller" value="/controllers/" />
<entry key="View" value="/views/" />
<entry key="Model" value="/models/" />
<entry key="Helper" value="/views/helpers/" />
<entry key="Component" value="/controllers/components/" />
<entry key="Behavior" value="/models/behaviors/" />
<entry key="Plugin" value="plugins/" />
<entry key="Shell" value="/vendors/shell" />
<entry key="Task" value="/vendors/Shell/Task" />
<entry key="ControllerTest" value="/tests/cases/controllers/" />
<entry key="ModelTest" value="/tests/cases/models/" />
<entry key="BehaviorTest" value="/tests/cases/behaviors/" />
<entry key="ComponentTest" value="/tests/cases/components/" />
<entry key="HelperTest" value="/tests/cases/helpers/" />
<entry key="TestFile" value="test" />
<entry key="FileSeparator" value="." />
<entry key="FileWordSeparator" value="_" />
<entry key="Fixture" value="/tests/fixtures/" />
<entry key="Element" value="elements/" />
<entry key="FixtureFile" value="fixture" />
<entry key="Layout" value="layouts/" />
</map>
</option>
<option name="cakeVersion" value="1" />
</component>
</project>
-56
View File
@@ -1,56 +0,0 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<PHPCodeStyleSettings>
<option name="ALIGN_KEY_VALUE_PAIRS" value="true" />
<option name="ALIGN_ASSIGNMENTS" value="true" />
<option name="PHPDOC_BLANK_LINES_AROUND_PARAMETERS" value="true" />
<option name="LOWER_CASE_BOOLEAN_CONST" value="true" />
<option name="LOWER_CASE_NULL_CONST" value="true" />
<option name="GETTERS_SETTERS_NAMING_STYLE" value="SNAKE_CASE" />
<option name="VARIABLE_NAMING_STYLE" value="SNAKE_CASE" />
<option name="BLANK_LINES_BEFORE_RETURN_STATEMENT" value="1" />
<option name="KEEP_RPAREN_AND_LBRACE_ON_ONE_LINE" value="true" />
<option name="SPACES_AROUND_VAR_WITHIN_BRACKETS" value="true" />
<option name="SPACE_BEFORE_UNARY_NOT" value="true" />
<option name="SPACE_AFTER_UNARY_NOT" value="true" />
</PHPCodeStyleSettings>
<codeStyleSettings language="PHP">
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
<option name="CLASS_BRACE_STYLE" value="1" />
<option name="METHOD_BRACE_STYLE" value="1" />
<option name="SPECIAL_ELSE_IF_TREATMENT" value="true" />
<option name="ALIGN_MULTILINE_CHAINED_METHODS" value="true" />
<option name="ALIGN_MULTILINE_PARAMETERS" value="false" />
<option name="ALIGN_MULTILINE_FOR" value="false" />
<option name="ALIGN_MULTILINE_BINARY_OPERATION" value="true" />
<option name="SPACE_AROUND_UNARY_OPERATOR" value="true" />
<option name="SPACE_WITHIN_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_METHOD_CALL_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_METHOD_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_IF_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_WHILE_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_FOR_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_CATCH_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_SWITCH_PARENTHESES" value="true" />
<option name="SPACE_WITHIN_ARRAY_INITIALIZER_BRACES" value="true" />
<option name="SPACE_AFTER_TYPE_CAST" value="true" />
<option name="METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE" value="true" />
<option name="METHOD_PARAMETERS_RPAREN_ON_NEXT_LINE" value="true" />
<option name="PARENTHESES_EXPRESSION_LPAREN_WRAP" value="true" />
<option name="PARENTHESES_EXPRESSION_RPAREN_WRAP" value="true" />
<option name="FOR_STATEMENT_LPAREN_ON_NEXT_LINE" value="true" />
<option name="FOR_STATEMENT_RPAREN_ON_NEXT_LINE" value="true" />
<option name="ARRAY_INITIALIZER_WRAP" value="5" />
<option name="ARRAY_INITIALIZER_LBRACE_ON_NEXT_LINE" value="true" />
<option name="ARRAY_INITIALIZER_RBRACE_ON_NEXT_LINE" value="true" />
<option name="IF_BRACE_FORCE" value="3" />
<option name="DOWHILE_BRACE_FORCE" value="3" />
<option name="WHILE_BRACE_FORCE" value="3" />
<option name="FOR_BRACE_FORCE" value="3" />
<indentOptions>
<option name="USE_TAB_CHARACTER" value="true" />
<option name="SMART_TABS" value="true" />
</indentOptions>
</codeStyleSettings>
</code_scheme>
</component>
-5
View File
@@ -1,5 +0,0 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>
-8
View File
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/archive-post-oder-plus.iml" filepath="$PROJECT_DIR$/.idea/archive-post-oder-plus.iml" />
</modules>
</component>
</project>
Generated
-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PhpProjectSharedConfiguration" php_language_level="7">
<option name="suggestChangeDefaultLanguageLevel" value="false" />
</component>
</project>
+14 -5
View File
@@ -1,12 +1,14 @@
<?php
/*
Plugin Name: Archive Post Order Plus
Plugin URI: https://www.n-k-y.net/wp_plugin_apop/
Author: Nobuhiro Kimura
Author URI: https://www.n-k-y.net
Description: 通常表示、検索表示、タクソノミー毎に投稿の表示順を設定するプラグイン
Version: 1.0.0
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.2.1
License: GPLv2
Text Domain: ArchivePostOrderPlus
Domain Path: /languages
*/
/* Copyright 2021 Nobuhiro Kimura (email : big-me@n-k-y.net)
@@ -25,6 +27,8 @@ License: GPLv2
define( 'APOP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
define( 'APOP_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
define( 'APOP_CUSTOM_FIELD_PREFIX', '_apop_postorder_' );
define( 'APOP_DOMAIN', 'ArchivePostOrderPlus' );
load_plugin_textdomain( APOP_DOMAIN, false, basename( dirname( __FILE__ ) ) . '/languages' );
//メイン処理のクラスをインスタンス化
require_once __DIR__ . '/class/class.apop.order.php';
@@ -37,9 +41,14 @@ new APOP_POST;
//CSS, JSの読み込み
add_action( 'admin_enqueue_scripts', 'apop_register_my_styles' );
function apop_register_my_styles() {
wp_enqueue_style( 'jq_ui_css', APOP_PLUGIN_URL . 'css/jquery-ui.css' );
wp_enqueue_style( 'hrc_post_style', APOP_PLUGIN_URL . 'css/apop-style.css' );
wp_enqueue_script( 'jquery-ui-sortable' );
wp_enqueue_script( 'jquery-ui-autocomplete' );
wp_enqueue_script( 'post-sort-cat-order_js', APOP_PLUGIN_URL . 'js/apop-style.js' );
if ( wp_is_mobile() ) {
wp_enqueue_script( 'jquery-touch-punch' );
}
}
$APOP->set_query();
+58 -13
View File
@@ -11,6 +11,7 @@ if ( ! class_exists( 'APOP_POST' ) ) {
const TEMPLATE_DIR = __DIR__ . '/../template/';
private $order_field = array();
private $custom_field_type = array();
private $name_keys = array();
private $order_param_keys = array(
'custom_field',
@@ -29,7 +30,7 @@ if ( ! class_exists( 'APOP_POST' ) ) {
public function add_meta_fields() {
$target_posts = $this->set_post_types();
foreach ( $target_posts as $target_post ) {
add_meta_box( 'apo_custom_fields', 'APO+カスタムフィールド', array(
add_meta_box( 'apo_custom_fields', __( 'APO + custom field settings', APOP_DOMAIN ), array(
$this,
'insert_meta_fields'
), $target_post, 'normal' );
@@ -37,17 +38,26 @@ if ( ! class_exists( 'APOP_POST' ) ) {
}
public function insert_meta_fields() {
//通常ソート
$this->create_order_field_data( get_option( '_apop_normal_order_param' ), 'normal' );
//最新の投稿ソート
if ( get_option( '_apop_normal_order' ) == '1' ) {
$this->create_order_field_data( get_option( '_apop_normal_order_param' ), 'normal' );
}
//検索ソート
$this->create_order_field_data( get_option( '_apop_search_order_param' ), 'search' );
if ( get_option( '_apop_search_order' ) == '1' ) {
$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' => '通常',
'search' => '検索',
'tax' => 'カテゴリー、タグ、カスタム分類',
'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';
@@ -67,22 +77,55 @@ if ( ! class_exists( 'APOP_POST' ) ) {
if ( $update ) {
$this->name_keys[] = $param[ $order_param_key ]['field']['meta_key'];
} else {
$this->order_field[ $key ][] = $param[ $order_param_key ]['field']['meta_key'];
$this->custom_field_type[ $key ][] = $param[ $order_param_key ]['field']['custom_field_type'];
$this->order_field[ $key ][] = $param[ $order_param_key ]['field']['meta_key'];
}
}
}
}
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 ( $archive_settings && 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();
$term_ids = $this->create_post_term_ids();
$sort_types = get_option( '_apop_tax_sort_type' );
foreach ( $term_ids as $term_id ) {
if ( ! isset( $sort_types[ $term_id ] ) ) {
continue;
}
if ( $sort_types[ $term_id ] == '1' ) {
break;
}
foreach ( $this->order_param_keys as $order_param_key ) {
if ( isset( $param[ $term_id ][ $order_param_key ]['field']['meta_key'] ) &&
! empty( $param[ $term_id ][ $order_param_key ]['field']['meta_key'] ) ) {
if ( $update ) {
$this->name_keys[] = $param[ $term_id ][ $order_param_key ]['field']['meta_key'];
} else {
$this->order_field['tax'][] = $param[ $term_id ][ $order_param_key ]['field']['meta_key'];
$this->custom_field_type['tax'][] = $param[ $term_id ][ $order_param_key ]['field']['custom_field_type'];
$this->order_field['tax'][] = $param[ $term_id ][ $order_param_key ]['field']['meta_key'];
}
}
}
@@ -107,10 +150,10 @@ if ( ! class_exists( 'APOP_POST' ) ) {
return $term_ids;
}
private function get_custom_field_data( $custom_filed_name ) {
private function get_custom_field_data( $custom_filed_name, $prefix ) {
global $post;
return get_post_meta( $post->ID, APOP_CUSTOM_FIELD_PREFIX . $custom_filed_name, true );
return get_post_meta( $post->ID, $prefix . $custom_filed_name, true );
}
// カスタムフィールドの値を保存
@@ -125,10 +168,12 @@ if ( ! class_exists( 'APOP_POST' ) ) {
}
private function get_update_meta_fields() {
//通常ソート
//最新の投稿ソート
$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 );
}
+478 -395
View File
@@ -1,458 +1,541 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
exit;
} // Exit if accessed directly
if ( ! class_exists( 'APOP_UI' ) ) {
class APOP_UI {
public static function get_order_type( $type ) {
$type_data = get_option( $type );
if ( ! $type_data ) {
return 1;
}
require_once __DIR__ . '/../util/apop-customfield-select.php';
require_once __DIR__ . '/../util/apop-customposts.php';
return $type_data;
}
class APOP_UI {
public static function get_all_search_normal_posts(
$key
): string {
$meta_key = '_apop_post_' . $key;
$args = self::create_search_normal_args( $meta_key );
$posts_data = get_posts( $args );
$list = array();
foreach ( $posts_data as $i => $post_data ) {
$order = $i + 1;
$no_order = self::is_sort_post_registered( $post_data->ID, $meta_key ) ? '' : ' no_order';
$list[] = '<li class="product-list' . esc_html( $no_order ) . '">' . esc_html( self::crate_non_registerd_mark( $no_order ) ) . '
<span class="sort-num-label">' . esc_html( $order ) . '</span>' . esc_html( $post_data->post_title ) . '
<input type="hidden" class="list_order" name="_apop_post_' . esc_html( $key ) . '[post_sort][' . esc_html( $post_data->ID ) . ']" value="' . esc_html( $order ) . '">
</li>';
}
use CUSTOMFIELD_SELECT, CUSTOMPOSTS;
return implode( PHP_EOL, $list );
}
public static function get_order_type( $type ) {
$type_data = get_option( $type );
if ( ! $type_data ) {
return 1;
}
private static function crate_non_registerd_mark( $no_order ): string {
if ( ! empty( $no_order ) ) {
return '&#9632;';
}
return $type_data;
}
return '';
}
public static function get_all_search_normal_posts( $key ) {
$meta_key = '_apop_post_' . $key;
$args = self::create_search_normal_args( $meta_key, $key );
$posts_data = get_posts( $args );
foreach ( $posts_data as $i => $post_data ) {
$order = $i + 1;
$no_order = self::is_sort_post_registered( $post_data->ID, $meta_key ) ? '' : ' no-order';
echo '<li class="product-list' . esc_attr( $no_order ) . '">'
. '<span class="sort-num-label">' . esc_html( $order ) . '</span>' . esc_html( $post_data->post_title )
. '<input type="hidden" class="list-order"
name="_apop_post_' . esc_attr( $key ) . '[post_sort][' . esc_attr( $post_data->ID ) . ']"
value="' . esc_attr( $order ) . '">
</li>';
}
}
private static function create_search_normal_args( $meta_key ): array {
return array(
'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 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 );
}
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 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',
),
),
);
}
return $custom_tax_list;
}
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;
}
public static function get_cat_tag_list( $target, $key ): array {
$opt = get_option( '_apop_' . $target . '_order' );
return $custom_post_data;
}
if ( ! isset( $opt['target_cat'] ) ) {
return array();
}
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'
) ) );
}
if ( $key == 'taxonomy' ) {
return self::create_custom_tax_term( $opt );
} else {
return self::create_tax_term( $opt, $key );
}
}
return $custom_tax_list;
}
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 ) );
public static function get_cat_tag_list( $target, $key ): array {
$opt = get_option( '_apop_' . $target . '_order' );
}
}
if ( count( $tax_data ) > 0 ) {
return $tax_data;
}
if ( ! isset( $opt['target_cat'] ) ) {
return array();
}
return array();
}
if ( $key == 'taxonomy' ) {
return self::create_custom_tax_term( $opt );
} else {
return self::create_tax_term( $opt, $key );
}
}
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,
);
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 ) );
return get_terms( $args );
}
}
}
if ( count( $tax_data ) > 0 ) {
return $tax_data;
}
return array();
}
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[] = '
<li class="product-list' . esc_html( $no_order ) . '">' . esc_html( self::crate_non_registerd_mark( $no_order ) )
. '<span class="sort-num-label">' . esc_html( $sort_num ) . '</span>' . get_the_title( $target_post->ID ) . '
<input type="hidden" class="list_order"
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[] = '
<li class="product-list' . esc_html( $no_order ) . '">' . '<span class="sort-num-label">' . esc_html( $sort_num ) . '</span>' . get_the_title( $target_post->ID ) . '
<input type="hidden" class="list-order"
name="_apop_post_' . esc_html( self::create_post_sort_key( $tax_data->taxonomy, $tax_key ) ) . '[post_sort][' . esc_html( $tax_data->term_id ) . '][' . esc_html( $target_post->ID ) . ']"
value="' . esc_html( $sort_num ) . '">
</li>';
}
}
return implode( PHP_EOL, $list );
}
return implode( PHP_EOL, $list );
}
private static function is_sort_post_registered( $id, $key ): bool {
if ( get_post_meta( $id, $key, true ) ) {
return true;
}
private static function is_sort_post_registered( $id, $key ): bool {
if ( get_post_meta( $id, $key, true ) ) {
return true;
}
return false;
}
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 );
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 )
);
}
return array(
'meta_key' => $meta_key,
'data' => get_posts( $args )
);
}
private static function create_sort_post_list_meta_query( &$args, $meta_key ) {
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',
),
);
}
$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';
}
public static function create_post_sort_key( $tax_name, $tax_key ) {
if ( $tax_key == 'taxonomy' ) {
return 'tax';
}
return $tax_name;
}
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;
}
}
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;
}
}
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,
);
}
return array(
'_per_page' => $cat_per_page,
'_checked' => $checked,
'_per_page_num' => $cat_per_page_num,
);
}
public static function disp_tax_setting( $key, $title, $order_name ) {
$tax_data = APOP_UI::get_all_taxonomies( $key );
if ( count( $tax_data ) > 0 ) {
$order_name = $order_name;
$order_tax = $key == 'post_tag' ? 'tag' : $key;
echo '<tr><th scope="row">' . esc_html( $title ) . '設定</th><td>';
include APOP_PLUGIN_PATH . 'template/setting_parts_taxonomy.php';
echo '</td></tr>';
}
}
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 '<tr><th scope="row">' . esc_html( $title ) . '</th><td>';
if ( isset( $tax_data, $order_name, $order_tax ) ) {
include APOP_PLUGIN_PATH . 'template/setting_parts_taxonomy.php';
}
echo '</td></tr>';
}
}
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;
}
}
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 '<tr><th scope="row">' . esc_html( $title ) . '</th><td>';
if ( isset( $custom_post_data, $order_name, $key ) ) {
include APOP_PLUGIN_PATH . 'template/setting_parts_customposts.php';
}
echo '</td></tr>';
}
}
return array(
'_per_page' => $cat_per_page,
'_checked' => $checked,
'_per_page_num' => $cat_per_page_num,
);
}
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;
}
}
public static function create_search_normal_list( $type, $id = null ): array {
$name_keys = self::create_name_keys( $id, $type );
$name_key = $name_keys['name_key'];
$get_option_key = $name_keys['get_option_key'];
$order_param_base = get_option( $get_option_key );
$order_param = '';
if ( is_null( $id ) ) {
$order_param = $order_param_base;
}
if ( isset( $order_param_base[ $id ] ) ) {
$order_param = $order_param_base[ $id ];
}
$target_keys = self::set_search_normal_target_keys( $order_param );
$target_values = array(
'date' => '登録日',
'title' => 'タイトル',
'ID' => 'ID',
'modified' => '更新日',
'custom_field' => 'カスタムフィールド1',
'custom_field_2' => 'カスタムフィールド2',
'custom_field_3' => 'カスタムフィールド3',
'custom_field_4' => 'カスタムフィールド4',
);
$list = array();
foreach ( $target_keys as $target_key ) {
$cnv_order_params = self::set_order_list_param( $order_param, $target_key );
$use = $cnv_order_params['use'];
$sort = $cnv_order_params['sort'];
$alert = $cnv_order_params['alert'];
$no_order_class = $cnv_order_params['no_order_class'];
$field_metakey_input = '';
$name_use_key = '_' . $name_key . '[' . $target_key . '][use]';
$name_sort_key = '_' . $name_key . '[' . $target_key . '][sort]';
if ( strpos( $target_key, 'custom_field' ) !== false ) {
$meta_key = $cnv_order_params[ $target_key ]['meta_key'];
$value_type = $cnv_order_params[ $target_key ]['value_type'];
$field_metakey_input = self::create_custom_field_sort_type( $name_key, $target_key, $meta_key, $value_type );
$target_key_check_class = 'custom_field_check';
} else {
$target_key_check_class = 'sort_' . $target_key . '_check';
}
$list[] = '<li class="product-list' . esc_html( $no_order_class ) . '">
<div class="product-list-type-label"><b>' . esc_html( $target_values[ $target_key ] ) . '</b></div>
<div class="product-list-sort-type">
<label>
<input type="hidden" name="' . esc_html( $name_use_key ) . '"
value="0"' . esc_html( self::set_search_normal_checked( $use, 0 ) ) . '>
<span class="en_dis_label">有効</span><input class="' . esc_html( $target_key_check_class ) . '"
type="checkbox" name="' . esc_html( $name_use_key ) . '" value="1"' . esc_html( self::set_search_normal_checked( $use, 1 ) ) . '>
</label>
<label>
<input class="order_param" type="radio"
name="' . esc_html( $name_sort_key ) . '"
value="1"' . esc_html( self::set_search_normal_checked( $sort, 1 ) ) . '>昇順</label>
<label>
<input class="order_param" type="radio"
name="' . esc_html( $name_sort_key ) . '"
value="2"' . esc_html( self::set_search_normal_checked( $sort, 2 ) ) . '>降順</label>
' . $field_metakey_input . '
</div>
</li>';
}
return array(
'_per_page' => $cat_per_page,
'_checked' => $checked,
'_per_page_num' => $cat_per_page_num,
);
}
return array(
implode( PHP_EOL, $list ),
$alert,
);
}
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;
}
}
private static function create_custom_field_sort_type( $name_key, $target_key, $meta_key, $value_type ): string {
$name_meta_key = '_' . $name_key . '[' . $target_key . '][field][meta_key]';
$name_value_type = '_' . $name_key . '[' . $target_key . '][field][value_type]';
return array(
'_per_page' => $cat_per_page,
'_checked' => $checked,
'_per_page_num' => $cat_per_page_num,
);
}
return '<div class="sort_custom_field">
<div class="sort_custom_field_inner"><div class="sort_custom_field_inner_label">カスタムフィールドキー:</div>
<input type="text" class="custom_field_key" name="' . esc_html( $name_meta_key ) . '" value="' . esc_html( $meta_key ) . '">
</div>
<div class="sort_custom_field_inner">
<div class="sort_custom_field_inner_label">値タイプ:</div>
<label><input type="radio"
class="custom_field_meta_value"
name="' . esc_html( $name_value_type ) . '"
value="meta_value"' . esc_html( self::set_search_normal_checked( $value_type, 'meta_value' ) ) . '>テキスト</label>
<label><input type="radio"
class="custom_field_meta_value"
name="' . esc_html( $name_value_type ) . '"
value="meta_value_num"' . esc_html( self::set_search_normal_checked( $value_type, 'meta_value_num' ) ) . '>数値</label>
</div>
</div>';
}
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 set_order_list_param( $order_param, $target_key ): array {
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 '<div class="sort-custom-field">
<div class="sort-custom-field-types">
<div class="sort-custom-field-inner-label">
<label>
<input type="radio"
class="custom-field-type"
name="' . esc_attr( $name_custom_field_type ) . '"
value="1"' . esc_attr( self::set_search_normal_checked( $custom_field_type, '1' ) ) . '>' . __( 'Select', APOP_DOMAIN ) . '</label>
<label>
<input type="radio"
class="custom-field-type"
name="' . esc_attr( $name_custom_field_type ) . '"
value="2"' . esc_attr( self::set_search_normal_checked( $custom_field_type, '2' ) ) . '>' . __( 'Add', APOP_DOMAIN ) . '</label>
</div>';
echo '<input type="text" class="select-custom-field-input custom_field_key_select" name="' . esc_attr( $name_meta_key ) . '" value="' . esc_attr( $custom_field_val_1 ) . '" required>
<input type="text" class="custom_field_key" name="' . esc_attr( $name_meta_key ) . '" value="' . esc_attr( $custom_field_val_2 ) . '" required>
</div>
<div class="custom-field-select-alert"></div>
<div class="sort-custom-field-inner">
<div class="sort-custom-field-inner-label">' . __( 'Type', APOP_DOMAIN ) . '</div>
<label class="sort-custom-field-text-label">
<input type="radio"
class="custom-field-meta-value"
name="' . esc_attr( $name_value_type ) . '"
value="meta_value"' . esc_attr( self::set_search_normal_checked( $value_type, 'meta_value' ) ) . '>' . __( 'Text', APOP_DOMAIN ) . '</label>
<label><input type="radio"
class="custom-field-meta-value"
name="' . esc_attr( $name_value_type ) . '"
value="meta_value_num"' . esc_attr( self::set_search_normal_checked( $value_type, 'meta_value_num' ) ) . '>' . __( 'Number', APOP_DOMAIN ) . '</label>
</div>
</div>';
}
$param = array(
'use' => 0,
'sort' => 2,
'alert' => '並べ替えを登録するには「変更を保存」をクリックしてください。',
'no_order_class' => ' no_order',
);
if ( strpos( $target_key, 'custom_field' ) !== false ) {
$param[ $target_key ] = array(
'meta_key' => '',
'value_type' => 'meta_value',
);
}
private static function set_order_list_param( $order_param, $target_key ): array {
if ( isset( $order_param[ $target_key ] ) ) {
$param = array(
'use' => $order_param[ $target_key ]['use'] ?? 0,
'sort' => $order_param[ $target_key ]['sort'] ?? 2,
'alert' => ! $order_param[ $target_key ]['use'] ? '並べ替えを登録するには「変更を保存」をクリックしてください。' : '',
'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',
);
}
}
$param = array(
'use' => 0,
'sort' => 2,
'no_order_class' => ' no-order',
);
return $param;
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',
);
}
}
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',
);
}
}
return $param;
private static function set_search_normal_target_keys( $post_apop_search_order_param ) {
}
$set_keys = array(
'date',
'title',
'ID',
'modified',
'custom_field',
'custom_field_2',
'custom_field_3',
'custom_field_4',
);
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',
);
}
}
if ( $post_apop_search_order_param ) {
$register_keys = array_keys( $post_apop_search_order_param );
private static function set_search_normal_target_keys( $post_apop_search_order_param ): array {
return array_unique( array_merge( $register_keys, $set_keys ) );
}
$set_keys = array(
'date',
'title',
'ID',
'modified',
'custom_field',
'custom_field_2',
'custom_field_3',
'custom_field_4',
);
return $set_keys;
}
if ( $post_apop_search_order_param ) {
$register_keys = array_keys( $post_apop_search_order_param );
private static function set_search_normal_checked( $param, $default ): string {
if ( $param == $default ) {
return ' checked="checked"';
}
return array_unique( array_merge( $register_keys, $set_keys ) );
}
return '';
}
return $set_keys;
}
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 );
}
}
private static function set_search_normal_checked( $param, $default ): string {
if ( $param == $default ) {
return ' checked="checked"';
}
public static function is_disp_per_page( &$disp, $disp_per_page ) {
if ( $disp_per_page ) {
$disp = true;
}
}
return '';
}
}
/**
* POSTデータのフィルタリングを行います。
*
* @param string $var_name 取得するPOST変数名。
* @param string $type 'array' または 'str' を指定します。
*
* @return array|string フィルタリングされたPOSTデータ、または失敗した場合は空文字列。
*/
public static function input_post_filter( $var_name, $type ) {
if ( $type == 'array' ) {
$data = filter_input( INPUT_POST, $var_name, FILTER_DEFAULT, FILTER_REQUIRE_ARRAY );
if ( is_array( $data ) ) {
array_walk_recursive( $data, function ( &$value ) {
$value = htmlspecialchars( $value, ENT_QUOTES, 'UTF-8' );
} );
return $data;
}
return [];
}
if ( $type == 'str' ) {
$data = filter_input( INPUT_POST, $var_name );
if ( $data !== null && $data !== false ) {
return htmlspecialchars( $data, ENT_QUOTES, 'UTF-8' );
}
return '';
}
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 '<li class="product-list' . esc_attr( $no_order_class ) . '">
<div class="product-list-type-label"><b>' . esc_attr( $target_values[ $target_key ] ) . '</b></div>
<div class="product-list-sort-type">
<label>
<input type="hidden" name="' . esc_attr( $name_use_key ) . '"
value="0"' . esc_attr( self::set_search_normal_checked( $use, 0 ) ) . '>
<span class="en_dis_label">' . __( 'Enabled', APOP_DOMAIN ) . '</span><input class="' . esc_html( $target_key_check_class ) . '"
type="checkbox" name="' . esc_attr( $name_use_key ) . '" value="1"' . esc_attr( self::set_search_normal_checked( $use, 1 ) ) . '>
</label>
<label>
<input class="order_param" type="radio"
name="' . esc_attr( $name_sort_key ) . '"
value="1"' . esc_attr( self::set_search_normal_checked( $sort, 1 ) ) . '>' . __( 'Asc', APOP_DOMAIN ) . '</label>
<label>
<input class="order_param" type="radio"
name="' . esc_attr( $name_sort_key ) . '"
value="2"' . esc_attr( self::set_search_normal_checked( $sort, 2 ) ) . '>' . __( 'Desc', APOP_DOMAIN ) . '</label>';
if ( strpos( $target_key, 'custom_field' ) !== false ) {
self::create_custom_field_sort_type( $name_key, $target_key, $cnv_order_params );
}
echo '</div>
</li>';
}
}
}
}
+91 -22
View File
@@ -4,16 +4,23 @@ if ( ! defined( 'ABSPATH' ) ) {
} // Exit if accessed directly
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;
use APOP_ORDER_SETTING, CUSTOMFIELD_SELECT, CUSTOMPOSTS, TAX, APOP_OUTPUT;
const TEMPLATE_DIR = __DIR__ . '/../template/';
public function __construct() {
add_action( 'admin_menu', array( $this, 'add_pages' ) );
add_action( 'admin_enqueue_scripts', array( $this, 'set_custom_field_ajax' ) );
add_action( 'wp_ajax_set_custom_field', array( $this, 'set_custom_field' ) );
}
public function add_pages() {
@@ -25,10 +32,11 @@ if ( ! class_exists( 'APOP' ) ) {
array( $this, 'display_setting_page' ),
''
);
//
add_submenu_page(
'apop_post_sort', // parent_slug
'Sort taxonomy', // page_title
'表示件数・対象設定', // menu_title
__( 'Display number / target setting', APOP_DOMAIN ), // menu_title
'administrator', // capability
'apop_post_sort', // menu_slug
array( $this, 'display_setting_page' ) // function
@@ -36,7 +44,7 @@ if ( ! class_exists( 'APOP' ) ) {
add_submenu_page(
'apop_post_sort', // parent_slug
'Select taxonomy', // page_title
'並べ替え', // menu_title
__( 'Sorting', APOP_DOMAIN ), // menu_title
'administrator', // capability
'apop_post_sort_setting', // menu_slug
array( $this, 'show_option_page' ) // function
@@ -50,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 ) {
@@ -67,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' );
@@ -93,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' );
@@ -120,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' );
@@ -164,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 ) {
@@ -179,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 );
}
}
}
}
+128 -77
View File
@@ -52,23 +52,25 @@ h3 {
.list-orders-outer {
width: 100%;
display: flex;
margin-bottom: 1em;
flex-wrap: wrap;
justify-content: space-between;
}
.list-orders-inner {
width: calc((100% / 2) - 20px);
padding: .5em;
width: calc(100% - 60px);
margin: 1em auto;
padding: .5em 1em;
position: relative;
background: #eee;
border-radius: 12px;
}
.sort_menu_list {
.sort-menu-list {
display: flex;
}
.sort_menu_list li:first-child {
.sort-menu-list li:first-child {
margin-right: 2em;
}
@@ -77,47 +79,57 @@ p.submit.post-order .button-primary {
bottom: 1em;
}
dl.apop_setting_list,
dl.apop_setting_list_dd {
dl.apop-setting-list,
dl.apop-setting-list-dd {
width: 100%;
margin-top: .5em;
}
dl.apop_setting_list dt {
dl.apop-setting-list dt {
float: left;
}
dl.apop_setting_list dd {
dl.apop-setting-list dd {
margin-left: 200px;
}
dl.apop_setting_list dd:first-of-type {
dl.apop-setting-list dd:first-of-type {
margin-bottom: 2em;
}
dl.apop_setting_list_dd dt {
dl.apop-setting-list-dd dt {
margin-top: 1em;
font-weight: bold;
}
dl.apop_setting_list_dd dd {
dl.apop-setting-list-dd dd {
margin: .5em 0;
border-bottom: 1px solid #c3c4c7;
}
dl.apop_setting_list_dd dd ul {
dl.apop-setting-list-dd dd ul {
margin-bottom: 1em;
}
dl.apop_setting_list_dd dd label {
display: block;
margin-bottom: .3em;
dl.apop-setting-list-dd dd li {
display: flex;
justify-content: space-between;
}
dl.apop_setting_list_dd dd input {
dl.apop-setting-list-dd dd label {
width: 25%;
margin-bottom: .3em;
cursor: inherit;
}
dl.apop-setting-list-dd input {
width: 100%;
}
dl.apop-setting-list-dd .sort-custom-field-input {
width: 75%;
}
.form-table tr {
border-bottom: 1px solid #ccc;
}
@@ -131,50 +143,65 @@ dl.apop_setting_list_dd dd input {
background: #fff;
cursor: move;
color: #4b4b4b;
border-bottom: 1px solid #ccc;
border: 1px solid #fff;
}
.drag_sort .product-list {
.drag-sort .product-list {
border: 1px solid #ccc;
border-radius: 6px;
}
.enable_box .product-list {
padding: 1em 0;
.enable-box .product-list {
width: calc((50%) - 30px);
padding: 1em;
background: #fff;
border: 1px solid #bbb;
border-radius: 6px;
}
.search_normal_sort .product-list {
.enable-box .product-list:hover {
border: 1px solid #999;
}
.custom_field_key_select,
.custom_field_key {
display: none;
width: 50%;
}
.search-normal-sort .product-list {
display: flex;
}
.search_normal_sort .product-list-type-label,
.disable_box .product-list-type-label {
.search-normal-sort .product-list-type-label,
.disable-box .product-list-type-label {
width: calc((100%) - 60px);
}
.enable_box .product-list-type-label {
width: calc(100% / 2);
}
.search_normal_sort .product-list-sort-type {
.search-normal-sort .product-list-sort-type {
width: 100%;
display: flex;
flex-wrap: wrap;
}
.search_normal_sort .product-list-sort-type label {
.search-normal-sort .product-list-sort-type label {
width: calc((100% / 4) - 5px);
}
.search_normal_sort .product-list-sort-type label:first-of-type {
width: 5em;
.search-normal-sort .product-list-sort-type label:first-of-type {
margin-right: 3em;
}
.product-list.no_order {
background: #ababab;
.disable-box ul.disable-normal-list li.product-list.no-order .product-list-sort-type {
width: 40%;
}
.list_order {
.product-list.no-order {
background: #ababab;
border-radius: 6px;
}
.list-order {
width: 2em;
}
@@ -186,56 +213,63 @@ dl.apop_setting_list_dd dd input {
content: "";
}
.no_registered_exp {
.no-registered-exp {
width: 100%;
margin: 1em 0 0 .5em;
}
.order_setting_list > li {
.order-setting-list > li {
padding: 1em;
border: 1px solid #ccc;
}
.select_per_page {
.select-per-page {
margin-top: 1em;
padding-top: 1em;
border-top: 1px solid #ccc;
}
.sort_custom_field {
.sort-custom-field {
width: 100%;
margin-top: .5em;
padding-top: .5em;
border-top: 1px solid #ccc;
}
.sort_custom_field_inner {
.sort-custom-field-types,
.sort-custom-field-inner {
display: flex;
justify-content: space-between;
}
.sort_custom_field_inner:first-child {
.sort-custom-field-types:first-child,
.sort-custom-field-inner:first-child {
margin-bottom: .5em;
}
.sort_custom_field_inner_label {
.sort-custom-field-inner-label {
width: 40%;
white-space: nowrap;
}
.disable_normal_list {
.search-normal-sort .product-list-sort-type label.sort-custom-field-text-label {
width: 7em;
}
.disable-normal-list {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin: .5em 1em 1em 0;
}
.disable_box .product-list-sort-type label:not(:first-of-type),
.disable_box .sort_custom_field,
.disable_box .sort_custom_field_inner {
.disable-box .product-list-sort-type label:not(:first-of-type),
.disable-box .sort-custom-field,
.disable-box .sort-custom-field-inner {
display: none;
}
.disable_box .product-list {
width: calc((100% / 2) - 15px);
.disable-box .product-list {
width: calc((25%) - 15px);
display: flex;
cursor: default;
}
@@ -244,63 +278,71 @@ dl.apop_setting_list_dd dd input {
margin: 1em .5em;
}
.apop-form_table {
.apop-form-table {
background: #fff;
}
.apop-form_table th {
.apop-form-table th {
padding-left: .5em;
}
.enable_box {
.enable-box {
margin-bottom: 1em;
}
.enable_box,
.disable_box {
.enable-box,
.disable-box {
padding: .5em;
border: 1px solid #ccc;
/*border-bottom: 1px solid #ccc;*/
}
.enable_box h4 {
.enable-box h4 {
margin: .5em 0 0;
}
.disable_box h4 {
.disable-box h4 {
margin: .5em 0;
}
.custom-field-select-alert {
width: 100%;
margin-top: -.5em;
color: crimson;
text-align: right;
}
@media only screen and (max-width: 1264px) {
.enable_box .product-list,
.disable_box .product-list {
.enable-box .product-list {
width: calc((100%) - 15px);
}
.search-normal-sort .product-list {
display: block;
}
.search_normal_sort .product-list {
display: block;
}
.search_normal_sort .product-list-type-label,
.disable_box .product-list-type-label {
.search-normal-sort .product-list-type-label,
.disable-box .product-list-type-label {
width: 100%;
display: block;
}
.search_normal_sort .product-list-sort-type {
.search-normal-sort .product-list-sort-type {
width: 100%;
margin-bottom: 1em;
display: block;
}
.search_normal_sort .product-list-sort-type {
.search-normal-sort .product-list-sort-type {
width: 100%;
}
.search_normal_sort .product-list-sort-type label {
.search-normal-sort .product-list-sort-type label {
width: calc((100% / 3) - 5px);
}
.search_normal_sort .product-list-sort-type label:first-of-type {
.search-normal-sort .product-list-sort-type label:first-of-type {
margin-right: 1em;
}
}
@@ -311,27 +353,36 @@ dl.apop_setting_list_dd dd input {
width: 98%;
}
.list-orders-outer {
display: block;;
}
.list-orders-inner {
width: auto;
margin: 1.5em 0 0 0;
margin: 1.5em 1em 0;
}
dl.apop_setting_list dt {
dl.apop-setting-list dt {
float: none;
width: 100%;
margin-bottom: 1em;
}
dl.apop_setting_list dd {
dl.apop-setting-list dd {
margin-left: 0;
}
dl.apop_setting_list li label input[type="text"] {
dl.apop-setting-list li label input[type="text"] {
width: 95%;
margin-top: .5em;
}
.sort-custom-field-inner-label {
width: auto;
white-space: normal;
}
.disable-normal-list {
display: block;
}
.disable-box .product-list {
width: 100%;
}
}
+1312
View File
File diff suppressed because it is too large Load Diff
+111 -45
View File
@@ -18,16 +18,18 @@ jQuery(function ($) {
change_normal_field_sort();
custom_field_select();
function change_tab_menu() {
let apop_submit_type = $('#apop_submit_type');
let order_nav_list = $('.post-order-nav li');
let order_box = $('.post-order-box');
const apop_submit_type = $('#apop_submit_type');
const order_nav_list = $('.post-order-nav li');
const order_box = $('.post-order-box');
init();
click_menu();
function init() {
let submit_type = apop_submit_type.val();
const submit_type = apop_submit_type.val();
order_nav_list.removeClass('en');
order_box.hide();
$('.post-order-nav li:eq(' + submit_type + ')').addClass('en');
@@ -37,7 +39,7 @@ jQuery(function ($) {
function click_menu() {
order_nav_list.on('click', function () {
if (!$(this).hasClass('en')) {
let target_index = $(this).index();
const target_index = $(this).index();
order_nav_list.removeClass('en');
$(this).addClass('en');
order_box.hide();
@@ -49,17 +51,17 @@ jQuery(function ($) {
}
function order_list() {
let cat_ul_count = $('.post-order-list').length; //カテゴリ総数
const cat_ul_count = $('.post-order-list').length; //カテゴリ総数
for (let i = 0; i < cat_ul_count; i++) {
let my_list = $('.post-order-list:eq(' + i + ')');
const my_list = $('.post-order-list:eq(' + i + ')');
my_list.sortable(
{
update: function () {
let list_count = $('.product-list', my_list).length;
const list_count = $('.product-list', my_list).length;
for (let j = 0; j < list_count; j++) {
let list_order = j + 1;
$('.list_order:eq(' + j + ')', my_list).val(list_order);
$('.list_order:eq(' + j + ')', my_list).siblings('.sort-num-label').text(list_order);
let list_order_num = j + 1;
$('.list-order:eq(' + j + ')', my_list).val(list_order_num);
$('.list-order:eq(' + j + ')', my_list).siblings('.sort-num-label').text(list_order_num);
}
}
}
@@ -69,59 +71,59 @@ jQuery(function ($) {
}
function change_sort_box() {
let s_radio = $('.sort_menu');
let sort_menu_size = $('.sort_menu_list').length;
const s_radio = $('.sort_menu');
const sort_menu_size = $('.sort-menu-list').length;
$('.sort_box').hide();
for (let i = 0; i < sort_menu_size; i++) {
let type_index = $('.sort_menu_list:eq(' + i + ')').data('order_target') - 1;
$('.sort_menu_list:eq(' + i + ')').siblings('.sort_box:eq(' + type_index + ')').show();
const elm = $('.sort-menu-list:eq(' + i + ')');
const type_index = elm.data('order_target') - 1;
elm.siblings('.sort_box:eq(' + type_index + ')').show();
}
s_radio.on('click', function () {
let target_index = $(this).val() - 1;
const target_index = $(this).val() - 1;
$(this).parents('.list-orders-inner').find('.sort_box').hide();
$(this).parents('.list-orders-inner').find('.sort_box:eq(' + target_index + ')').show();
})
}
function select_tax() {
let select_cat_checkbox = $('.select_cat_checkbox');
let input_chk_size = select_cat_checkbox.length;
let i = 0;
for (i; i < input_chk_size; i++) {
let chk = $('.select_cat_checkbox:eq(' + i + '):checked').length;
if (chk == 1) {
$('.select_cat:eq(' + i + ')').siblings('.select_per_page').show();
const select_cat_checkbox = $('.select_cat_checkbox');
const input_chk_size = select_cat_checkbox.length;
for (let i = 0; i < input_chk_size; i++) {
const chk = $('.select_cat_checkbox:eq(' + i + '):checked').length;
const elm = $('.select_cat:eq(' + i + ')');
if (chk === 1) {
elm.siblings('.select-per-page').show();
} else {
$('.select_cat:eq(' + i + ')').siblings('.select_per_page').hide();
elm.siblings('.select-per-page').hide();
}
}
select_cat_checkbox.on('click', function () {
let checked = $(this).prop('checked');
const checked = $(this).prop('checked');
if (checked) {
$(this).parent().parent().siblings('.select_per_page').show(200);
$(this).parent().parent().siblings('.select-per-page').show(200);
} else {
$(this).parent().parent().siblings('.select_per_page').hide(200);
$(this).parent().parent().siblings('.select-per-page').hide(200);
}
});
}
function change_search_per_page() {
let per_page_cat = $('.per_page_search');
let per_page_input = $('.per_page_search_input');
const per_page_cat = $('.per_page_search');
const per_page_input = $('.per_page_search_input');
if (per_page_input.val() == '') {
if (per_page_input.val() === '') {
per_page_input.prop('disabled', true);
} else {
per_page_input.prop('disabled', false);
}
per_page_cat.on('click', function () {
if ($(this).val() != 'default' && $(this).val() != '-1' && $(this).val() != 'all') {
if ($(this).val() !== 'default' && $(this).val() !== '-1' && $(this).val() !== 'all') {
per_page_input.prop('disabled', false);
} else {
per_page_input.val('');
@@ -131,11 +133,11 @@ jQuery(function ($) {
}
function change_tax_per_page() {
let set_number = $('.set_number');
let input_chk_size = set_number.length;
const set_number = $('.set_number');
const input_chk_size = set_number.length;
for (let i = 0; i < input_chk_size; i++) {
let input_num_box = $('.set_number:eq(' + i + ')').siblings('.per_page_cat_input');
if (input_num_box.val() == '') {
const input_num_box = $('.set_number:eq(' + i + ')').siblings('.per_page_cat_input');
if (input_num_box.val() === '') {
input_num_box.prop('disabled', true);
} else {
input_num_box.prop('disabled', false);
@@ -152,26 +154,90 @@ jQuery(function ($) {
}
function change_normal_field_sort() {
let s_box = $('.sort_box');
let targets = '.custom_field_check, .sort_date_check, .sort_title_check, .sort_ID_check, .sort_modified_check';
const s_box = $('.sort_box');
const targets = '.sort_date_check, .sort_title_check, .sort_ID_check, .sort_modified_check';
s_box.find(targets).each(function () {
if ($(this).prop('checked') == false) {
if ($(this).prop('checked') === false) {
$(this).parents('.product-list-sort-type').find('.order_param').prop('disabled', true);
let disable_list = $(this).parents('.sort_box').find('.disable_normal_list');
const disable_list = $(this).parents('.sort_box').find('.disable-normal-list');
$(this).parents('li').appendTo(disable_list);
}
});
$(targets).on('click', function () {
if ($(this).prop('checked') == true) {
if ($(this).prop('checked') === true) {
$(this).parents('.product-list-sort-type').find('.order_param').prop('disabled', false);
let enable_list = $(this).parents('.sort_box').find('.post-order-list');
$(this).parents('li').appendTo(enable_list).removeClass('no_order').hide().fadeIn(200);
const enable_list = $(this).parents('.sort_box').find('.post-order-list');
$(this).parents('li').appendTo(enable_list).removeClass('no-order').hide().fadeIn(200);
} else {
$(this).parents('.product-list-sort-type').find('.order_param').prop('disabled', true);
let disable_list = $(this).parents('.sort_box').find('.disable_normal_list');
$(this).parents('li').appendTo(disable_list).addClass('no_order').hide().fadeIn(200);
const disable_list = $(this).parents('.sort_box').find('.disable-normal-list');
$(this).parents('li').appendTo(disable_list).addClass('no-order').hide().fadeIn(200);
}
});
}
function custom_field_select() {
const s_box = $('.sort_box');
const targets = $('.custom-field-type');
const en_dis_check = $('.custom_field_check');
// カスタムフィールドソートの有効・無効を判定する。
// 有効の場合はカスタムフィールド選択or追加のステータスに応じてテキストエリアとセレクトタグenableに変更し表示を切り替える。
// 無効の場合はカスタムフィールドのテキストエリアとセレクトタグをDisableにし無効ボックスに移動する。
s_box.find('.custom_field_check').each(function () {
if ($(this).prop('checked') === false) {
const disable_list = $(this).parents('.sort_box').find('.disable-normal-list');
$(this).parents('li').appendTo(disable_list);
dis_list($(this));
} else {
const target_type = $(this).parents('.product-list-sort-type').find('.custom-field-type').filter(':checked').val();
en_dis_list($(this), target_type);
}
});
//有効・無効チェックボックスクリック時
en_dis_check.on('click', function () {
if ($(this).prop('checked') === true) {
const enable_list = $(this).parents('.sort_box').find('.post-order-list');
const target_type = $(this).parents('.product-list-sort-type').find('.custom-field-type').filter(':checked').val();
$(this).parents('.product-list-sort-type').find('.order_param').prop('disabled', false);
$(this).parents('li').appendTo(enable_list).removeClass('no-order').hide().fadeIn(200);
en_dis_list($(this), target_type);
} else {
const disable_list = $(this).parents('.sort_box').find('.disable-normal-list');
$(this).parents('.product-list-sort-type').find('.order_param').prop('disabled', true);
$(this).parents('li').appendTo(disable_list).addClass('no-order').hide().fadeIn(200);
dis_list($(this));
}
});
//選択・追加のカスタムフィールド種類ラジオボタンのクリック
targets.on('click', function () {
en_dis_list($(this), $(this).val());
});
function dis_list(obj) {
obj.parents('.product-list-sort-type').find('.custom_field_key').prop('disabled', true);
obj.parents('.product-list-sort-type').find('.custom_field_key_select').prop('disabled', true);
}
function en_dis_list(obj, type) {
let select_msg = 'Select from existing custom fields';
let add_msg = 'Added custom field for APOP';
if ($('.post-setting-box').hasClass('apop-lang-ja')) {
select_msg = '既存のカスタムフィールドから選択';
add_msg = 'APOP専用カスタムフィールドを追加';
}
if (type === 1) {
obj.parents('.product-list-sort-type').find('.custom_field_key_select').prop('disabled', false).show();
obj.parents('.product-list-sort-type').find('.custom_field_key').prop('disabled', true).hide();
obj.parents('.product-list-sort-type').find('.custom-field-select-alert').text(select_msg);
} else if (type === 2) {
obj.parents('.product-list-sort-type').find('.custom_field_key').prop('disabled', false).show();
obj.parents('.product-list-sort-type').find('.custom_field_key_select').prop('disabled', true).hide();
obj.parents('.product-list-sort-type').find('.custom-field-select-alert').text(add_msg);
}
}
}
});
+21
View File
@@ -0,0 +1,21 @@
jQuery(function ($) {
$('.select-custom-field-input').autocomplete({
source: function (req, resp) {
$.ajax({
type: 'GET',
url: localize.ajax_url,
dataType: 'json',
data: {
action: localize.action,
param: req.term
}
}).done(function (o) {
resp(o);
}).fail(function () {
resp(['']);
});
},
autoFocus: true,
minLength: 2
});
});
Binary file not shown.
+246
View File
@@ -0,0 +1,246 @@
# Blank WordPress Pot
# Copyright 2014 ...
# This file is distributed under the GNU General Public License v3 or later.
msgid ""
msgstr ""
"Project-Id-Version: Archive Post Order Plus\n"
"Report-Msgid-Bugs-To: Translator Name <translations@example.com>\n"
"POT-Creation-Date: 2021-07-23 16:59+0900\n"
"PO-Revision-Date: \n"
"Last-Translator: NBK45 <nbk.develop@gmail.com>\n"
"Language-Team: NBK45 <nbk.develop@gmail.com>\n"
"Language: ja\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Textdomain-Support: yesX-Generator: Poedit 1.6.4\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: __;_e;esc_html_e;esc_html_x:1,2c;esc_html__;"
"esc_attr_e;esc_attr_x:1,2c;esc_attr__;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;"
"_x:1,2c;_n:1,2;_n_noop:1,2;__ngettext:1,2;__ngettext_noop:1,2;_c,_nc:4c,1,2\n"
"X-Poedit-Basepath: ..\n"
"X-Generator: Poedit 3.0\n"
"X-Poedit-SearchPath-0: .\n"
#: class/class.apop.apop_post.php:33
msgid "APO + custom field settings"
msgstr "APO+カスタムフィールド"
#: class/class.apop.apop_post.php:57 template/order.php:8
msgid "Your latest posts"
msgstr "最新の投稿"
#: class/class.apop.apop_post.php:58 template/order.php:9 template/order.php:55
msgid "Search"
msgstr "検索"
#: class/class.apop.apop_post.php:59
msgid "Category, Tag, Custom Taxonomy"
msgstr "カテゴリー、タグ、カスタム分類"
#: 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:470
msgid "Post Title"
msgstr "タイトル"
#: class/class.apop.apop_ui.php:472
msgid "Modified"
msgstr "更新日"
#: class/class.apop.apop_ui.php:473
msgid "Custom filed 1"
msgstr "カスタムフィールド1"
#: class/class.apop.apop_ui.php:474
msgid "Custom filed 2"
msgstr "カスタムフィールド2"
#: class/class.apop.apop_ui.php:475
msgid "Custom filed 3"
msgstr "カスタムフィールド3"
#: class/class.apop.apop_ui.php:476
msgid "Custom filed 4"
msgstr "カスタムフィールド4"
#: 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:503
msgid "Asc"
msgstr "昇順"
#: class/class.apop.apop_ui.php:507
msgid "Desc"
msgstr "降順"
#: class/class.apop.order.php:39
msgid "Display number / target setting"
msgstr "表示件数・対象設定"
#: class/class.apop.order.php:47 template/order.php:5
msgid "Sorting"
msgstr "並べ替え"
#: template/order.php:4
msgid "apop-lang-en"
msgstr "apop-lang-ja"
#: template/order.php:10 template/order.php:87
msgid "Category"
msgstr "カテゴリー"
#: template/order.php:11 template/order.php:96
msgid "Tag"
msgstr "タグ"
#: template/order.php:12 template/order.php:105
msgid "Custom taxonomy"
msgstr "カスタム分類"
#: 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: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:40 template/order.php:71
#: template/order_parts_custom_posts.php:52
#: template/order_parts_taxonomy.php:52
msgid "Disabled"
msgstr "無効"
#: template/order.php:120 template/setting.php:46
msgid "Save changes"
msgstr "変更を保存"
#: 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_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 "」は選択されていません。"
#: template/setting.php:4
msgid "Settings"
msgstr "設定"
#: template/setting.php:7
msgid "Global settings"
msgstr "全体設定"
#: template/setting.php:10
msgid "Displayed per page"
msgstr "1ページ表示件数"
#: 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_customposts.php:33
#: template/setting_parts_taxonomy.php:32
msgid "Posts"
msgstr "件"
#: 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_customposts.php:50
#: template/setting_parts_taxonomy.php:47
msgid "Set the number posts"
msgstr "表示数設定"
#: template/setting.php:40
msgid "Categories setting"
msgstr "カテゴリー設定"
#: template/setting.php:41
msgid "Tags setting"
msgstr "タグ設定"
#: template/setting.php:42
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 "全体設定に従う"
#: template/setting_post_custom_field.php:18
msgid "* Change from custom field"
msgstr "※カスタムフィールドから変更してください"
#: template/success.php:2
msgid "Saved the setting"
msgstr "設定を保存しました"
#, fuzzy
#~| msgid "Search"
#~ msgid "Search!!!"
#~ msgstr "検索"
+156 -29
View File
@@ -1,58 +1,185 @@
=== Archive Post Order Plus ===
Contributors: nbk45
Tags: 投稿,表示順,投稿表示順,カテゴリー,タグ,カスタム分類,post,archive,category,tag,custom taxonomy,order
Requires at least: 4.9
Tested up to: 5.7.2
Requires PHP: 7.0
Stable tag: 1.0.0
Tags: latest posts order,categories post order,tags post order,custom taxonomy post order
Requires at least: 6.7
Tested up to: 6.9
Requires PHP: 8.3
Stable tag: 1.2.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
投稿の表示順を通常とタクソノミー毎に設定するプラグイン。
A plugin that sets the display order of posts.
投稿の表示順を設定するプラグイン。
== Description ==
This plugin is a plugin that customizes the posting order below.
- Your latest posts / Settings - Reading Settings
- Search results
- Category
- Tag
- Custom Taxonomy
- Custom Posts Archive
このプラグインは通常表示とタクソノミー毎に投稿表示順を設定するプラグインです。
このプラグインは、下記の投稿表示順をカスタマイズするプラグインです。
・[設定]-[表示設定]の「最新の投稿」
・検索結果
・カテゴリー
・タグ
・カスタム分類
・カスタム投稿アーカイブ
= 仕様 =
カスタマイズしたいカテゴリー、タグ、カスタム分類毎に投稿表示順を設定可能にします。
表示順は 1)通常+カスタムフィールドソート、2)ドラッグソートのどちらが選択可能です。
= Specification =
Select either 1) standard + custom field sort or 2) drag sort for the display order.
1)通常+カスタムフィールドソート
投稿の更新日、ID、タイトル、登録日のソートに加え、4つのカスタムフィールドが登録可能です。
有効にしたい項目を選択し、ドラッグで順番を設定します。
[設定]-[表示設定]の「最新の投稿」、検索結果、カテゴリー、タグ、カスタム分類毎に投稿表示順を設定可能にします。
表示順は 1)標準+カスタムフィールドソート、2)ドラッグソートのどちらを選択します。
2)ドラッグソート
カテゴリー、タグ、カスタム分類に属する投稿表示順をドラッグで設定します。
1Standard + custom field sort (標準+カスタムフィールドソート)
In addition to the post update date, ID, title, and registration date, 4 custom fields (*) can be registered.
Select the post you want to enable and drag to set the order.
*) Custom fields can be selected from existing custom fields or added for this plugin.
*) When this plug-in is deleted, the added custom field will also be deleted.
投稿の更新日、ID、タイトル、登録日に加え、4つのカスタムフィールド(※)が登録可能です。
有効にしたい項目を選択しドラッグで順番を設定します。
※)カスタムフィールドは、既存のカスタムフィールドから選択、もしくは本プラグイン用に追加可能です。
(追加の場合は各投稿の専用入力フォームから登録します)
※)本プラグインの削除時は、追加したカスタムフィールドも削除されます
2Drag sort (ドラッグソート)
In the list of posts displayed in the list, drag the posts to set the display order.
リスト表示されてた投稿一覧で、投稿をドラッグし表示順を設定します。
== Installation ==
= 自動インストール =
1. プラグインの検索フィールドより「Archive Post Order Plus」と入力し、"プラグインの検索"をクリックします。
2. 当プラグインを見つけたら、"今すぐインストール"をクリックしてインストールし、プラグインを有効化してください。
= Automatic installation (自動インストール) =
1. Enter "Archive Post Order Plus" in the plugin search field and click "Search for Plugins".
2. If you find this plugin, click "Install Now" to install it and activate the plugin.
= 手動インストール =
1. プラグインをダウンロードします
2. プラグインフォルダ内にアップロードし、管理画面よりプラグインを有効化してください。
1)プラグインの検索フィールドより「Archive Post Order Plus」と入力し、"プラグインの検索"をクリックします。
2)当プラグインを見つけたら、"今すぐインストール"をクリックしてインストールし、プラグインを有効化してください
= Manual installation (手動インストール) =
1. Download this plugin.
2. Please upload it in the plugin folder and activate the plugin from the management screen.
1)プラグインをダウンロードします。
2)プラグインフォルダ内にアップロードし、管理画面よりプラグインを有効化してください。
== Frequently Asked Questions ==
== Screenshots ==
screenshot-1.png
screenshot-2.png
screenshot-3.png
screenshot-4.png
screenshot-5.png
screenshot-6.png
screenshot-7.png
screenshot-8.png
== Changelog ==
= 1.2.4 =
・WordPress6.9動作確認
・PHP8.3対応修正
= 1.2.3 =
confirm WordPress6.5
= 1.2.2 =
confirm WordPress6.3
confirm WordPress6.1
WordPress6.1動作確認
= 1.2.1 =
confirm WordPress6.0
Fix template typos.
Add method return type specification.
Delete unnecessary variable assignments.
Add condition to file include.
WordPress6.0動作確認
テンプレートのミスタイプの修正
メソッドの戻り型指定の追加
不要な変数代入の削除
ファイルインクルードの条件追加
= 1.2.0 =
confirm WordPress5.9
Fixed Notice error in custom post archive.
WordPress5.9動作確認
カスタム投稿アーカイブのNoticeエラー修正
= 1.1.9 =
Changed the layout of the sort menu.
Modified JavaScript variable declaration and stored element specification in variable.
並べ替えのレイアウトを変更
JavaScriptで要素を変数に格納
= 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.
Bug fixed: custom field selection by Search
翻訳対応
検索のカスタムフィールド選択バグの修正
= 1.1.6 =
Fixed the part where the notice error occurred when the initial data was not set.
初期データ未設定時にnoticeエラーになっていた箇所を修正
= 1.1.5 =
Smartphone support for drag sorting of posted articles.
投稿記事のドラッグ並べ替えのスマートフォン対応
= 1.1.4 =
Explicitly include jquery-ui-autocomplete.
jquery-ui-autocompleteを明示的にインクルード
= 1.1.3 =
Change selected custom field to autocomplete.
選択カスタムフィールドをオートコンプリートに変更
= 1.1.2 =
Fixed selected custom fields to be read-only.
選択カスタムフィールドを読み取り専用表示するよう修正
= 1.1.1 =
Bug fixed: Fixed missing addition of selected attribute of custom field.
バグ修正:カスタムフィールドのselected属性の追加漏れ修正
= 1.1.0 =
Fixed mandatory check omissions for custom fields.
Fixed existing custom field selection.
Set background color in sort list.
Fixed refresh button position on sort settings page.
Fixed the order of radio buttons for sorting by category, tag, and custom taxonomies to be the same as standard and search.
カスタムフィールドの必須チェック漏れの修正
既存カスタムフィールド選択も可能なよう修正
ソートのリストに背景色を設定
並べ替え設定ページの更新ボタン位置を修正
カテゴリー、タグ、カスタム分類のソート対象選択のラジオボタン並び順を標準、検索と同一になるよう修正
= 1.0.1 =
Add custom posts to search sort.
検索のソート対象にカスタム投稿を追加
= 1.0.0 =
First lease.
初回リリース
== Upgrade Notice ==
No information
== Arbitrary section ==
+58 -48
View File
@@ -1,116 +1,126 @@
<?php
$submit_type = APOP_UI::input_post_filter( 'apop_submit_type', 'str' );
?>
<div class="post-setting-box">
<h2>並べ替え</h2>
<div class="post-setting-box <?php _e( 'apop-lang-en', APOP_DOMAIN ); ?>">
<h2><?php _e( 'Sorting', APOP_DOMAIN ); ?></h2>
<nav class="post-order-nav">
<ul>
<li class="en">通常</li>
<li>検索</li>
<li>カテゴリー</li>
<li>タグ</li>
<li>カスタム分類</li>
<li class="en"><?php _e( 'Your latest posts', APOP_DOMAIN ); ?></li>
<li><?php _e( 'Search', APOP_DOMAIN ); ?></li>
<li><?php _e( 'Category', APOP_DOMAIN ); ?></li>
<li><?php _e( 'Tag', APOP_DOMAIN ); ?></li>
<li><?php _e( 'Custom taxonomy', APOP_DOMAIN ); ?></li>
<li><?php _e( 'Custom posts', APOP_DOMAIN ); ?></li>
</ul>
</nav>
<div class="post-order-box-outer">
<form action="" method="post">
<form action="" method="post">
<div class="post-order-box-outer">
<?php wp_nonce_field( 'sh_options' ); ?>
<input id="apop_submit_type" type="hidden" name="apop_submit_type"
value="<?php echo esc_html( $submit_type ); ?>">
value="<?php echo esc_attr( $submit_type ); ?>">
<!-- 最新の投稿の設定 -->
<div class="post-order-box">
<div class="list-orders-outer">
<div class="list-orders-inner">
<h3>通常</h3>
<h3><?php _e( 'Your latest posts / Settings - Reading Settings', APOP_DOMAIN ); ?></h3>
<?php
$order_target_type = '_apop_normal_order';
$order_target = APOP_UI::get_order_type( $order_target_type );
?>
<?php include APOP_PLUGIN_PATH . 'template/order_parts_menu.php'; ?>
<hr>
<p><?php _e( 'Click "Save Changes" to register the sort.', APOP_DOMAIN ); ?></p>
<div class="sort_box">
<?php list( $list, $alert) = APOP_UI::create_search_normal_list( 'normal' ); ?>
<p><?php echo esc_html( $alert ); ?></p>
<div class="enable_box">
<h4>有効</h4>
<ul class="post-order-list search_normal_sort">
<?php echo $list; ?>
<div class="enable-box">
<h4><?php _e( 'Enabled', APOP_DOMAIN ); ?></h4>
<ul class="post-order-list search-normal-sort">
<?php APOP_UI::create_search_normal_list( 'normal' ); ?>
</ul>
</div>
<div class="disable_box">
<h4>無効</h4>
<ul class="disable_normal_list"></ul>
<div class="disable-box">
<h4><?php _e( 'Disabled', APOP_DOMAIN ); ?></h4>
<ul class="disable-normal-list"></ul>
</div>
</div>
<div class="sort_box">
<div class="no_registered_exp">&#9632;は未登録項目です。ドラッグして並び順を変更後に「変更を保存」をクリックしてください。</div>
<ul class="post-order-list drag_sort">
<?php echo APOP_UI::get_all_search_normal_posts( 'normal' ); ?>
<ul class="post-order-list drag-sort">
<?php APOP_UI::get_all_search_normal_posts( 'normal' ); ?>
</ul>
</div>
</div>
</div>
</div>
<!-- 検索の設定 -->
<div class="post-order-box">
<div class="list-orders-outer">
<div class="list-orders-inner">
<h3>検索</h3>
<h3><?php _e( 'Search', APOP_DOMAIN ); ?></h3>
<?php
$order_target_type = '_apop_search_order';
$order_target = APOP_UI::get_order_type( $order_target_type );
?>
<?php include APOP_PLUGIN_PATH . 'template/order_parts_menu.php'; ?>
<hr>
<p><?php _e( 'Click "Save Changes" to register the sort.', APOP_DOMAIN ); ?></p>
<div class="sort_box">
<?php list( $list, $alert) = APOP_UI::create_search_normal_list( 'search' ); ?>
<p><?php echo esc_html( $alert ); ?></p>
<div class="enable_box">
<h4>有効</h4>
<ul class="post-order-list search_normal_sort">
<?php echo $list; ?>
<div class="enable-box">
<h4><?php _e( 'Enabled', APOP_DOMAIN ); ?></h4>
<ul class="post-order-list search-normal-sort">
<?php APOP_UI::create_search_normal_list( 'search' ); ?>
</ul>
</div>
<div class="disable_box">
<h4>無効</h4>
<ul class="disable_normal_list"></ul>
<div class="disable-box">
<h4><?php _e( 'Disabled', APOP_DOMAIN ); ?></h4>
<ul class="disable-normal-list"></ul>
</div>
</div>
<div class="sort_box">
<div class="no_registered_exp">&#9632;は未登録項目です。ドラッグして並び順を変更後に「変更を保存」をクリックしてください。</div>
<ul class="post-order-list drag_sort">
<?php echo APOP_UI::get_all_search_normal_posts( 'search' ); ?>
<ul class="post-order-list drag-sort">
<?php APOP_UI::get_all_search_normal_posts( 'search' ); ?>
</ul>
</div>
</div>
</div>
</div>
<!-- カテゴリーの設定 -->
<div class="post-order-box">
<div class="tax_sort_box">
<?php
$tax_lists = array( 'category' => APOP_UI::get_cat_tag_list( 'cat', 'category' ) );
$tax_title_text = 'カテゴリー';
$tax_title_text = __( 'Category', APOP_DOMAIN );
include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php';
?>
<?php include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?>
</div>
</div>
<!-- タグの設定 -->
<div class="post-order-box">
<div class="tax_sort_box">
<?php
$tax_lists = array( 'tag_id' => APOP_UI::get_cat_tag_list( 'tag', 'post_tag' ) );
$tax_title_text = 'タグ';
$tax_title_text = __( 'Tag', APOP_DOMAIN );
include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php';
?>
<?php include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?>
</div>
</div>
<!-- カスタム分類の設定 -->
<div class="post-order-box">
<div class="tax_sort_box">
<?php
$tax_lists = array( 'taxonomy' => APOP_UI::get_cat_tag_list( 'tax', 'taxonomy' ) );
$tax_title_text = 'カスタム分類';
?>
<?php include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?>
$tax_title_text = __( 'Custom taxonomy', APOP_DOMAIN );
include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?>
</div>
</div>
<p class="apop-submit"><input type="submit" name="submit" class="button-primary" value="変更を保存"/></p>
</form>
</div>
<!-- カスタム投稿アーカイブの設定 -->
<div class="post-order-box">
<div class="tax_sort_box">
<?php
$custom_posts_lists = APOP_UI::get_enable_custompost_archive();
$custom_posts_title_text = __( 'Custom posts', APOP_DOMAIN );
include APOP_PLUGIN_PATH . 'template/order_parts_custom_posts.php';
?>
</div>
</div>
</div>
<p class="apop-submit"><input type="submit" name="submit" class="button-primary"
value="<?php _e( 'Save changes', APOP_DOMAIN ); ?>"/></p>
</form>
</div>
+60
View File
@@ -0,0 +1,60 @@
<?php if ( isset( $custom_posts_lists, $custom_posts_title_text ) ): ?>
<div class="list-orders-outer">
<?php if ( count( $custom_posts_lists ) > 0 ): ?>
<?php foreach ( $custom_posts_lists as $custom_post ) : ?>
<div class="list-orders-inner">
<h3><?php echo esc_html( $custom_post['label'] ); ?></h3>
<?php
$order_target_data = get_option( '_apop_custompost_archive_sort_type' );
if ( isset( $order_target_data[ $custom_post['slug'] ] ) ) {
$order_target = $order_target_data[ $custom_post['slug'] ];
} else {
$order_target = 2;
}
?>
<!-- ソートタイプ -->
<ul class="sort-menu-list"
data-order_target="<?php echo esc_attr( $order_target ); ?>">
<li>
<label>
<input class="sort_menu" type="radio"
name="_apop_custompost_archive_sort_type[<?php echo esc_attr( $custom_post['slug'] ); ?>]"
value="2"<?php checked( $order_target, 2 ); ?>><?php _e( 'Standard + custom field sort', APOP_DOMAIN ); ?>
</label>
</li>
<li>
<label>
<input class="sort_menu" type="radio"
name="_apop_custompost_archive_sort_type[<?php echo esc_attr( $custom_post['slug'] ); ?>]"
value="1"<?php checked( $order_target, 1 ); ?>><?php _e( 'Drag sort', APOP_DOMAIN ); ?>
</label>
</li>
</ul>
<div class="sort_box">
<p><?php _e( 'Click "Save Changes" to register the sort.', APOP_DOMAIN ); ?></p>
<ul class="post-order-list drag-sort">
<?php echo APOP_UI::create_custompost_archive_order_list( $custom_post['slug'] ); ?>
</ul>
</div>
<div class="sort_box">
<p><?php _e( 'Click "Save Changes" to register the sort.', APOP_DOMAIN ); ?></p>
<div class="enable-box">
<h4><?php _e( 'Enabled', APOP_DOMAIN ); ?></h4>
<ul class="post-order-list search-normal-sort">
<?php APOP_UI::create_custompost_archive_normal_list( $custom_post['slug'] ); ?>
</ul>
</div>
<div class="disable-box">
<h4><?php _e( 'Disabled', APOP_DOMAIN ); ?></h4>
<ul class="disable-normal-list"></ul>
</div>
</div>
</div>
<?php endforeach; ?>
<?php else: ?>
<p class="no-registered-exp"><?php _e( 'No', APOP_DOMAIN ); ?><?php echo esc_html( $custom_posts_title_text . ' ' ); ?><?php _e( 'has been selected.', APOP_DOMAIN ); ?></p>
<?php endif; ?>
</div>
<?php endif;
+6 -6
View File
@@ -1,11 +1,11 @@
<?php if ( isset( $order_target, $order_target_type ) ): ?>
<ul class="sort_menu_list"
data-order_target="<?php echo esc_html($order_target); ?>">
<ul class="sort-menu-list"
data-order_target="<?php echo esc_attr( $order_target ); ?>">
<li><label>
<input class="sort_menu" type="radio" name="<?php echo esc_html($order_target_type); ?>"
value="1"<?php checked( $order_target, 1 ); ?>>標準+カスタムフィールドソート</label></li>
<input class="sort_menu" type="radio" name="<?php echo esc_attr( $order_target_type ); ?>"
value="1"<?php checked( $order_target, 1 ); ?>><?php _e('Standard + custom field sort', APOP_DOMAIN); ?></label></li>
<li><label>
<input class="sort_menu" type="radio" name="<?php echo esc_html($order_target_type); ?>"
value="2"<?php checked( $order_target, 2 ); ?>>ドラッグソート</label></li>
<input class="sort_menu" type="radio" name="<?php echo esc_attr( $order_target_type ); ?>"
value="2"<?php checked( $order_target, 2 ); ?>><?php _e('Drag sort', APOP_DOMAIN); ?></label></li>
</ul>
<?php endif;
+21 -19
View File
@@ -2,7 +2,6 @@
<?php foreach ( $tax_lists as $tax_key => $tax_list ) : ?>
<div class="list-orders-outer">
<?php if ( count( $tax_list ) > 0 ): ?>
<div class="no_registered_exp">&#9632;は未登録項目です。ドラッグして並び順を変更後に「変更を保存」をクリックしてください。</div>
<?php foreach ( $tax_list as $tax_data ): ?>
<div class="list-orders-inner">
<h3><?php echo esc_html( $tax_data->name ); ?></h3>
@@ -11,48 +10,51 @@
if ( isset( $order_target_data[ $tax_data->term_id ] ) ) {
$order_target = $order_target_data[ $tax_data->term_id ];
} else {
$order_target = 1;
$order_target = 2;
}
?>
<ul class="sort_menu_list"
data-order_target="<?php echo esc_html( $order_target ); ?>">
<ul class="sort-menu-list"
data-order_target="<?php echo esc_attr( $order_target ); ?>">
<li>
<label>
<input class="sort_menu" type="radio"
name="_apop_tax_sort_type[<?php echo esc_html( $tax_data->term_id ); ?>]"
value="1"<?php checked( $order_target, 1 ); ?>>ドラッグソート</label>
name="_apop_tax_sort_type[<?php echo esc_attr( $tax_data->term_id ); ?>]"
value="2"<?php checked( $order_target, 2 ); ?>><?php _e( 'Standard + custom field sort', APOP_DOMAIN ); ?>
</label>
</li>
<li>
<label>
<input class="sort_menu" type="radio"
name="_apop_tax_sort_type[<?php echo esc_html( $tax_data->term_id ); ?>]"
value="2"<?php checked( $order_target, 2 ); ?>>標準+カスタムフィールドソート</label>
name="_apop_tax_sort_type[<?php echo esc_attr( $tax_data->term_id ); ?>]"
value="1"<?php checked( $order_target, 1 ); ?>><?php _e( 'Drag sort', APOP_DOMAIN ); ?>
</label>
</li>
</ul>
<div class="sort_box">
<ul class="post-order-list drag_sort">
<p><?php _e( 'Click "Save Changes" to register the sort.', APOP_DOMAIN ); ?></p>
<ul class="post-order-list drag-sort">
<?php echo APOP_UI::create_order_list( $tax_data, $tax_key ); ?>
</ul>
</div>
<div class="sort_box">
<?php list( $list, $alert ) = APOP_UI::create_search_normal_list( 'tax', $tax_data->term_id ); ?>
<p><?php echo esc_html( $alert ); ?></p>
<div class="enable_box">
<h4>有効</h4>
<ul class="post-order-list search_normal_sort">
<?php echo $list; ?>
<p><?php _e( 'Click "Save Changes" to register the sort.', APOP_DOMAIN ); ?></p>
<div class="enable-box">
<h4><?php _e( 'Enabled', APOP_DOMAIN ); ?></h4>
<ul class="post-order-list search-normal-sort">
<?php APOP_UI::create_search_normal_list( 'tax', $tax_data->term_id ); ?>
</ul>
</div>
<div class="disable_box">
<h4>無効</h4>
<ul class="disable_normal_list"></ul>
<div class="disable-box">
<h4><?php _e( 'Disabled', APOP_DOMAIN ); ?></h4>
<ul class="disable-normal-list"></ul>
</div>
</div>
</div>
<?php endforeach; ?>
<?php else: ?>
<p class="no_registered_exp">並べ替えをカスタマイズする<?php echo esc_html( $tax_title_text ); ?>は選択されていません。</p>
<p class="no-registered-exp"><?php _e( 'No', APOP_DOMAIN ); ?> <?php echo esc_html( $tax_title_text . ' ' ); ?><?php _e( 'has been selected.', APOP_DOMAIN ); ?></p>
<?php endif; ?>
</div>
<?php endforeach; ?>
+44 -43
View File
@@ -1,47 +1,48 @@
<div class="post-setting-box">
<form action="" method="post">
<?php
wp_nonce_field( 'sh_options' );
$opt_per_page = get_option( '_apop_per_page' );
$default_per_page = get_option( 'posts_per_page' );
?>
<h2>設定</h2>
<table class="form-table apop-form_table">
<tr>
<th scope="row">全体設定</th>
<td>
<dl class="apop_setting_list">
<dt>1ページ表示件数</dt>
<dd><?php $per_page_data = APOP_UI::create_cat_per_page( $opt_per_page, 'search' ); ?>
<ul>
<li>
<label>
<input class="per_page_search" type="radio" name="_apop_per_page[search]"
value="default"<?php checked( $per_page_data['_per_page'], 'default' ); ?>>表示設定に従う(<?php echo esc_html($default_per_page); ?>
件)</label>
</li>
<li><label>
<input class="per_page_search" type="radio" name="_apop_per_page[search]"
value="-1"<?php checked( $per_page_data['_per_page'], '-1' ); ?>>全件</label>
</li>
<li>
<label><input class="per_page_search" type="radio"
name="_apop_per_page[search]"
value="<?php echo esc_html($per_page_data['_checked']); ?>">表示数設定
<input class="per_page_search_input" type="text"
name="_apop_per_page[search]"
value="<?php echo esc_html($per_page_data['_per_page_num']); ?>" required>
</label>
</li>
</ul>
</dd>
</dl>
</td>
</tr>
<?php APOP_UI::disp_tax_setting( 'category', 'カテゴリー', '_apop_cat_order' ); ?>
<?php APOP_UI::disp_tax_setting( 'post_tag', 'タグ', '_apop_tag_order' ); ?>
<?php APOP_UI::disp_tax_setting( 'taxonomy', 'カスタム分類', '_apop_tax_order' ); ?>
</table>
<p class="submit"><input type="submit" name="Submit" class="button-primary" value="変更を保存"/>
<?php wp_nonce_field( 'sh_options' ); ?>
<h2><?php _e( 'Settings', APOP_DOMAIN ); ?></h2>
<table class="form-table apop-form-table">
<tr>
<th scope="row"><?php _e( 'Global settings', APOP_DOMAIN ); ?></th>
<td>
<dl class="apop-setting-list">
<dt><?php _e( 'Displayed per page', APOP_DOMAIN ); ?></dt>
<dd><?php $per_page_data = APOP_UI::create_cat_per_page( get_option( '_apop_per_page' ), 'search' ); ?>
<ul>
<li>
<label>
<input class="per_page_search" type="radio" name="_apop_per_page[search]"
value="default"<?php checked( $per_page_data['_per_page'], 'default' ); ?>><?php _e( 'Follow display settings', APOP_DOMAIN ); ?>
<?php echo esc_html( get_option( 'posts_per_page' ) ); ?>
<?php _e( 'Posts', APOP_DOMAIN ); ?></label>
</li>
<li><label>
<input class="per_page_search" type="radio" name="_apop_per_page[search]"
value="-1"<?php checked( $per_page_data['_per_page'], '-1' ); ?>><?php _e( 'All posts', APOP_DOMAIN ); ?>
</label>
</li>
<li>
<label><input class="per_page_search" type="radio"
name="_apop_per_page[search]"
value="" <?php echo esc_attr( $per_page_data['_checked'] ); ?>><?php _e( 'Set the number posts', APOP_DOMAIN ); ?>
<input class="per_page_search_input" type="text"
name="_apop_per_page[search]"
value="<?php echo esc_attr( $per_page_data['_per_page_num'] ); ?>"
required>
</label>
</li>
</ul>
</dd>
</dl>
</td>
</tr>
<?php APOP_UI::disp_tax_setting( 'category', __( 'Categories setting', APOP_DOMAIN ), '_apop_cat_order' ); ?>
<?php APOP_UI::disp_tax_setting( 'post_tag', __( 'Tags setting', APOP_DOMAIN ), '_apop_tag_order' ); ?>
<?php APOP_UI::disp_tax_setting( 'taxonomy', __( 'Custom Taxonomies setting', APOP_DOMAIN ), '_apop_tax_order' ); ?>
<?php APOP_UI::disp_customposts_setting( 'custompost_archive', __( 'Custom Posts Archive setting', APOP_DOMAIN ), '_apop_custompost_archive_order' ); ?>
</table>
<p class="submit"><input type="submit" name="Submit" class="button-primary"
value="<?php _e( 'Save changes', APOP_DOMAIN ); ?>"/>
</form>
</div>
+64
View File
@@ -0,0 +1,64 @@
<?php if ( isset( $custom_post_data, $order_name, $order ) ): ?>
<dl class="apop-setting-list">
<dt><?php _e( 'Targets', APOP_DOMAIN ); ?></dt>
<dd>
<ul class="order-setting-list">
<?php foreach ( $custom_post_data as $custom_post_datum => $label ): ?>
<?php
$opt_cat = get_option( $order_name );
$check_slug = $opt_cat['target_post'][ $custom_post_datum ] ?? '';
?>
<li>
<div class="select_cat">
<label>
<input type="hidden"
name="<?php echo esc_attr( $order_name ); ?>[target_post][<?php echo esc_attr( $custom_post_datum ); ?>]"
value="0">
<input class="select_cat_checkbox" type="checkbox"
name="<?php echo esc_attr( $order_name ); ?>[target_post][<?php echo esc_attr( $custom_post_datum ); ?>]"
<?php checked( $check_slug, 1 ); ?>
value="1">
<?php echo esc_html( $label ); ?>
</label>
</div>
<?php $per_page_data = APOP_UI::create_custom_posts_per_page( get_option( '_apop_per_page' ), $order, $custom_post_datum ); ?>
<div class="select-per-page">
<ul>
<li>
<label>
<input class="per_page_cat" type="radio"
name="_apop_per_page[<?php echo esc_attr($order); ?>][<?php echo esc_attr( $custom_post_datum ); ?>]"
value="default"<?php checked( $per_page_data['_per_page'], 'default' ); ?>><?php _e( 'Follow display settings', APOP_DOMAIN ); ?>
<?php echo esc_html( get_option( 'posts_per_page' ) ); ?>
<?php _e( 'Posts', APOP_DOMAIN ); ?></label>
</li>
<li><label>
<input class="per_page_cat" type="radio"
name="_apop_per_page[<?php echo esc_attr( $order ); ?>][<?php echo esc_attr( $custom_post_datum ); ?>]"
value="all"<?php checked( $per_page_data['_per_page'], 'all' ); ?>><?php _e( 'Follow global settings', APOP_DOMAIN ); ?>
</label>
</li>
<li><label>
<input class="per_page_cat" type="radio"
name="_apop_per_page[<?php echo esc_attr( $order ); ?>][<?php echo esc_attr( $custom_post_datum ); ?>]"
value="-1"<?php checked( $per_page_data['_per_page'], '-1' ); ?>><?php _e( 'All posts', APOP_DOMAIN ); ?>
</label>
</li>
<li class="set_number_list">
<label><input class="per_page_cat set_number" type="radio"
name="_apop_per_page[<?php echo esc_attr( $order ); ?>][<?php echo esc_attr( $custom_post_datum ); ?>]"
value=""<?php echo esc_attr( $per_page_data['_checked'] ); ?>><?php _e( 'Set the number posts', APOP_DOMAIN ); ?>
<input class="per_page_cat_input" type="text"
name="_apop_per_page[<?php echo esc_attr( $order ); ?>][<?php echo esc_attr( $custom_post_datum ); ?>]"
value="<?php echo esc_attr( $per_page_data['_per_page_num'] ); ?>"
required>
</label>
</li>
</ul>
</div>
</li>
<?php endforeach; ?>
</ul>
</dd>
</dl>
<?php endif;
+20 -24
View File
@@ -1,58 +1,54 @@
<?php if ( isset( $tax_data, $order_name, $order_tax ) ): ?>
<?php
$default_per_page = get_option( 'posts_per_page' );
$opt_per_page = get_option( '_apop_per_page' );
?>
<dl class="apop_setting_list">
<dt>対象</dt>
<dl class="apop-setting-list">
<dt><?php _e('Targets', APOP_DOMAIN); ?></dt>
<dd>
<ul class="order_setting_list">
<ul class="order-setting-list">
<?php foreach ( $tax_data as $tax_datum ): ?>
<?php
$opt_cat = get_option( $order_name );
$check_slug = $opt_cat['target_cat'][ $tax_datum->term_id ] ?? '';
APOP_UI::is_disp_per_page( $disp, $check_slug );
?>
<li>
<div class="select_cat">
<label>
<input type="hidden"
name="<?php echo esc_html($order_name); ?>[target_cat][<?php echo esc_html($tax_datum->term_id); ?>]"
name="<?php echo esc_attr( $order_name ); ?>[target_cat][<?php echo esc_attr( $tax_datum->term_id ); ?>]"
value="0">
<input class="select_cat_checkbox" type="checkbox"
name="<?php echo esc_html($order_name); ?>[target_cat][<?php echo esc_html($tax_datum->term_id); ?>]"
name="<?php echo esc_attr( $order_name ); ?>[target_cat][<?php echo esc_attr( $tax_datum->term_id ); ?>]"
<?php checked( $check_slug, 1 ); ?>
value="1">
<?php echo esc_html($tax_datum->name); ?>
<?php echo esc_html( $tax_datum->name ); ?>
</label>
</div>
<?php $per_page_data = APOP_UI::create_tax_per_page( $opt_per_page, $order_tax, $tax_datum->term_id ); ?>
<div class="select_per_page">
<?php $per_page_data = APOP_UI::create_tax_per_page( get_option( '_apop_per_page' ), $order_tax, $tax_datum->term_id ); ?>
<div class="select-per-page">
<ul>
<li>
<label>
<input class="per_page_cat" type="radio"
name="_apop_per_page[<?php echo esc_html($order_tax); ?>][<?php echo esc_html($tax_datum->term_id); ?>]"
value="default"<?php checked( $per_page_data['_per_page'], 'default' ); ?>>表示設定に従う<?php echo esc_html($default_per_page); ?>
</label>
name="_apop_per_page[<?php echo esc_attr( $order_tax ); ?>][<?php echo esc_attr( $tax_datum->term_id ); ?>]"
value="default"<?php checked( $per_page_data['_per_page'], 'default' ); ?>><?php _e( 'Follow display settings', APOP_DOMAIN ); ?><?php echo esc_html( get_option( 'posts_per_page' ) ); ?>
<?php _e( 'Posts', APOP_DOMAIN ); ?></label>
</li>
<li><label>
<input class="per_page_cat" type="radio"
name="_apop_per_page[<?php echo esc_html($order_tax); ?>][<?php echo esc_html($tax_datum->term_id); ?>]"
value="all"<?php checked( $per_page_data['_per_page'], 'all' ); ?>>全体設定に従う</label>
name="_apop_per_page[<?php echo esc_attr( $order_tax ); ?>][<?php echo esc_attr( $tax_datum->term_id ); ?>]"
value="all"<?php checked( $per_page_data['_per_page'], 'all' ); ?>><?php _e( 'Follow global settings', APOP_DOMAIN ); ?></label>
</li>
<li><label>
<input class="per_page_cat" type="radio"
name="_apop_per_page[<?php echo esc_html($order_tax); ?>][<?php echo esc_html($tax_datum->term_id); ?>]"
value="-1"<?php checked( $per_page_data['_per_page'], '-1' ); ?>>全件</label>
name="_apop_per_page[<?php echo esc_attr( $order_tax ); ?>][<?php echo esc_attr( $tax_datum->term_id ); ?>]"
value="-1"<?php checked( $per_page_data['_per_page'], '-1' ); ?>><?php _e( 'All posts', APOP_DOMAIN ); ?></label>
</li>
<li class="set_number_list">
<label><input class="per_page_cat set_number" type="radio"
name="_apop_per_page[<?php echo esc_html($order_tax); ?>][<?php echo esc_html($tax_datum->term_id); ?>]"
value=""<?php echo esc_html($per_page_data['_checked']); ?>>表示数設定
name="_apop_per_page[<?php echo esc_attr( $order_tax ); ?>][<?php echo esc_attr( $tax_datum->term_id ); ?>]"
value=""<?php echo esc_attr( $per_page_data['_checked'] ); ?>><?php _e( 'Set the number posts', APOP_DOMAIN ); ?>
<input class="per_page_cat_input" type="text"
name="_apop_per_page[<?php echo esc_html($order_tax); ?>][<?php echo esc_html($tax_datum->term_id); ?>]"
value="<?php echo esc_html($per_page_data['_per_page_num']); ?>" required>
name="_apop_per_page[<?php echo esc_attr( $order_tax ); ?>][<?php echo esc_attr( $tax_datum->term_id ); ?>]"
value="<?php echo esc_attr( $per_page_data['_per_page_num'] ); ?>"
required>
</label>
</li>
</ul>
+21 -6
View File
@@ -1,16 +1,31 @@
<div class="order_setting_custom_field_box">
<?php if ( isset( $this->order_field ) && count( $this->order_field ) > 0 ): ?>
<dl class="apop_setting_list_dd">
<dl class="apop-setting-list-dd">
<?php foreach ( $this->order_field as $type => $items ): ?>
<dt><?php echo esc_html( $this->labels[ $type ] ); ?></dt>
<dd>
<ul>
<?php foreach ( $items as $item ): ?>
<?php foreach ( $items as $idx => $item ): ?>
<?php if ( ! empty( $item ) ): ?>
<li><label><?php echo esc_html( $item ); ?></label>
<input type="text"
name="<?php echo esc_html( APOP_CUSTOM_FIELD_PREFIX . $item ); ?>"
value="<?php echo esc_html( $this->get_custom_field_data( $item ) ); ?>"/>
<?php
if ( $this->custom_field_type[ $type ][ $idx ] == '2' ) {
$custom_field_prefix = APOP_CUSTOM_FIELD_PREFIX;
$disabled = '';
$read_only_class = '';
} else {
$custom_field_prefix = '';
$disabled = ' disabled';
$read_only_class = __( '* Change from custom field', APOP_DOMAIN );
}
?>
<li>
<label><?php echo esc_html( $item ); ?></label>
<div class="sort-custom-field-input">
<input type="text"
name="<?php echo esc_attr( $custom_field_prefix . $item ); ?>"
value="<?php echo esc_attr( $this->get_custom_field_data( $item, $custom_field_prefix ) ); ?>"<?php echo esc_attr( $disabled ); ?>/>
<?php echo esc_html( $read_only_class ); ?>
</div>
</li>
<?php endif; ?>
<?php endforeach; ?>
+2 -1
View File
@@ -1 +1,2 @@
<div id="settings_updated" class="updated notice is-dismissible"><p><strong>設定を保存しました</strong></p></div>
<div id="settings_updated" class="updated notice is-dismissible"><p>
<strong><?php _e( 'Saved the setting', APOP_DOMAIN ); ?></strong></p></div>
+8 -4
View File
@@ -5,17 +5,20 @@ if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
die;
}
//通常と検索の表示件数、ソート対象設定等を削除
//最新の投稿と検索の表示件数、ソート対象設定等を削除
$param_settings = array(
'_apop_normal_order_param',
'_apop_search_order_param',
'_apop_tax_order_param',
'_apop_tax_sort_type',
'_apop_normal_order',
'_apop_search_order',
'_apop_tax_order_param',
'_apop_tax_sort_type',
'_apop_cat_order',
'_apop_tag_order',
'_apop_tax_order',
'_apop_custompost_archive_order_param',
'_apop_custompost_archive_sort_type',
'_apop_custompost_archive_order',
'_apop_per_page',
);
foreach ( $param_settings as $param_setting ) {
@@ -24,7 +27,7 @@ foreach ( $param_settings as $param_setting ) {
global $wpdb;
//通常と検索用のカスタム表示順を削除
//最新の投稿と検索用のカスタム表示順を削除
$option_orders = array(
"'" . '_apop_post_normal' . "'",
"'" . '_apop_post_search' . "'",
@@ -37,6 +40,7 @@ $tax_order_settings = array(
'_apop_post_category_',
'_apop_post_post_tag_',
'_apop_post_tax_',
'_apop_customposts_',
'_apop_postorder_'
);
foreach ( $tax_order_settings as $tax_order_setting ) {
+35
View File
@@ -0,0 +1,35 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
} // Exit if accessed directly
if ( ! trait_exists( 'CUSTOMFIELD_SELECT' ) ) {
trait CUSTOMFIELD_SELECT {
public function set_custom_field_ajax() {
$handle = 'custom_field_ajax';
wp_register_script( $handle, APOP_PLUGIN_URL . 'js/custom_field.js', [ 'jquery' ], '', true );
$localize = [
'ajax_url' => admin_url( 'admin-ajax.php' ),
'action' => 'set_custom_field',
];
wp_localize_script( $handle, 'localize', $localize );
wp_enqueue_script( $handle );
}
public function set_custom_field() {
$param = filter_input( INPUT_GET, 'param', FILTER_DEFAULT );
echo json_encode( $this->get_custom_fields_by_param( $param ) );
die();
}
private function get_custom_fields_by_param( $param ) {
global $wpdb;
$stmnt = "SELECT DISTINCT meta_key AS value, meta_key as label FROM $wpdb->postmeta WHERE meta_key LIKE %s AND meta_key NOT LIKE %s";
return $wpdb->get_results( $wpdb->prepare( $stmnt, $wpdb->esc_like( $param ) . '%', $wpdb->esc_like( '_%' ) ) );
}
}
}
+148
View File
@@ -0,0 +1,148 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
} // Exit if accessed directly
if ( ! trait_exists( 'CUSTOMPOSTS' ) ) {
/**
* カスタム投稿アーカイブのソート
* Trait CUSTOMPOSTS
*/
trait CUSTOMPOSTS {
public static function get_enable_custompost_archive(): array {
$opt = get_option( '_apop_custompost_archive_order' );
if ( ! isset( $opt['target_post'] ) ) {
return array();
}
$custom_post_list = array();
foreach ( $opt['target_post'] as $target => $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[] = '
<li class="product-list' . esc_attr( $no_order ) . '">' . '<span class="sort-num-label">' . esc_attr( $sort_num ) . '</span>' . get_the_title( $target_post->ID ) . '
<input type="hidden" class="list-order" name="_apop_customposts[' . esc_attr( $slug ) . '][' . esc_attr( $target_post->ID ) . ']" value="' . esc_attr( $sort_num ) . '">
</li>';
}
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;
}
if( ! isset($per_page_option['custompost_archive'] ) ){
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;
}
}
}
+89 -194
View File
@@ -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,28 +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 ( 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 ) {
@@ -88,94 +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 ) {
$meta_key = APOP_CUSTOM_FIELD_PREFIX . $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();
@@ -202,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;
}
}
+100
View File
@@ -0,0 +1,100 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
} // Exit if accessed directly
if ( ! trait_exists( 'APOP_OUTPUT' ) ) {
/**
* TODO: 出力用のコード
* Trait APOP_OUTPUT
*/
trait APOP_OUTPUT {
/**
*
* 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;
}
}
/**
* カテゴリー、タグ、カスタム分類のソートを取得する
* 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 );
}
}
}
}
+65
View File
@@ -0,0 +1,65 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
} // Exit if accessed directly
if ( ! trait_exists( 'TAX' ) ) {
/**
* タクソノミーのソート
* Trait TAX
*/
trait TAX {
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;
}
}
}