Files
POST_ORDER_BY_ARCHIVE/class/class.apop.order.php
T
nobu ad509c0977 WP PLUGIN ソート対象拡張
・サイドメニュー位置修正
・カスタムフィールド入力用テキストボックス位置等修正
・ソート対象チェックボックスのチェック状態によって昇降順ラジオボタンの活性/非活性化するよう修正
2021-05-11 20:48:30 +09:00

193 lines
6.1 KiB
PHP

<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
} // Exit if accessed directly
if ( ! class_exists( 'APOP' ) ) {
require_once __DIR__ . '/../util/apop-order-setting.php';
class APOP {
use APOP_ORDER_SETTING;
const TEMPLATE_DIR = __DIR__ . '/../template/';
public function __construct() {
add_action( 'admin_menu', array( $this, 'add_pages' ) );
}
public function add_pages() {
add_menu_page(
'APO +',
'APO +',
'level_8',
'apop_post_sort',
array( $this, 'display_setting_page' ),
''
);
add_submenu_page(
'apop_post_sort', // parent_slug
'Sort taxonomy', // page_title
'表示件数・対象設定', // menu_title
'administrator', // capability
'apop_post_sort', // menu_slug
array( $this, 'display_setting_page' ) // function
);
add_submenu_page(
'apop_post_sort', // parent_slug
'Select taxonomy', // page_title
'並べ替え', // menu_title
'administrator', // capability
'apop_post_sort_setting', // menu_slug
array( $this, 'show_option_page' ) // function
);
}
public function display_setting_page() {
$settings = array(
'_apop_cat_order', //カテゴリー設定
'_apop_per_page', //1ページ表示件数
'_apop_tag_order', //タグ設定
'_apop_tax_order', //カスタムタクソノミー設定
);
foreach ( $settings as $setting ) {
$opt = APOP_UI::input_post_filter( $setting, 'array' );
if ( $opt ) {
check_admin_referer( 'sh_options' );
update_option( $setting, $opt );
require_once self::TEMPLATE_DIR . 'success.php';
}
}
require_once self::TEMPLATE_DIR . 'setting.php';
}
public function show_option_page() {
//-------------------------------------
// 通常表示
// ------------------------------------
$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' );
if ( $apop_normal_order ) {
check_admin_referer( 'sh_options' );
update_option( '_apop_normal_order', $apop_normal_order );
require_once self::TEMPLATE_DIR . 'success.php';
}
//表示順設定
if ( $apop_normal_order_param ) {
check_admin_referer( 'sh_options' );
update_option( '_apop_normal_order_param', $apop_normal_order_param );
require_once self::TEMPLATE_DIR . 'success.php';
}
//カスタム表示順設定
if ( $apop_post_normal ) {
check_admin_referer( 'sh_options' );
$this->update_search_normal_sort( $apop_post_normal, 'normal' );
require_once self::TEMPLATE_DIR . 'success.php';
}
//-------------------------------------
// 検索表示
// ------------------------------------
$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' );
if ( $apop_search_order ) {
check_admin_referer( 'sh_options' );
update_option( '_apop_search_order', $apop_search_order );
require_once self::TEMPLATE_DIR . 'success.php';
}
//表示順設定
if ( $apop_search_order_param ) {
check_admin_referer( 'sh_options' );
update_option( '_apop_search_order_param', $apop_search_order_param );
require_once self::TEMPLATE_DIR . 'success.php';
}
//カスタム表示順設定
if ( $apop_post_search ) {
check_admin_referer( 'sh_options' );
$this->update_search_normal_sort( $apop_post_search, 'search' );
require_once self::TEMPLATE_DIR . 'success.php';
}
//-------------------------------------
// タクソノミー
// ------------------------------------
$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' );
$apop_post_post_tag = APOP_UI::input_post_filter( '_apop_post_post_tag', 'array' );
$apop_post_tax = APOP_UI::input_post_filter( '_apop_post_tax', 'array' );
//カテゴリーのソートタイプ設定
if ( $tax_sort_type ) {
check_admin_referer( 'sh_options' );
update_option( '_apop_tax_sort_type', $tax_sort_type );
require_once self::TEMPLATE_DIR . 'success.php';
}
//カテゴリーの標準ソートパラメータ
if ( $apop_tax_order_param ) {
check_admin_referer( 'sh_options' );
update_option( '_apop_tax_order_param', $apop_tax_order_param );
require_once self::TEMPLATE_DIR . 'success.php';
}
//カテゴリーの投稿表示順設定
if ( $apop_post_category ) {
check_admin_referer( 'sh_options' );
$this->update_post_sort( 'category', $apop_post_category );
require_once self::TEMPLATE_DIR . 'success.php';
}
//タグの投稿表示順設定
if ( $apop_post_post_tag ) {
check_admin_referer( 'sh_options' );
$this->update_post_sort( 'post_tag', $apop_post_post_tag );
require_once self::TEMPLATE_DIR . 'success.php';
}
//カスタム分類の投稿表示順設定
if ( $apop_post_tax ) {
check_admin_referer( 'sh_options' );
$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 ) {
$sort_key = '_apop_post_' . $target . '_' . $cat_id;
foreach ( $posts as $post_id => $sort ) {
update_post_meta( $post_id, $sort_key, $sort );
}
}
}
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 );
}
}
}
}