Compare commits

...

5 Commits

Author SHA1 Message Date
nobu e15a46eec4 WP PLUGIN CSS修正+更新時の表示タブ修正
・カテゴリー表示等のCSSについてflexを適用
・データ更新時に表示するタブが、POST前に開いていたタブになるようPHPとjQyeryを修正
2021-06-14 17:20:47 +09:00
nobu 9cc82988e2 WP PLUGIN バグ修正 ソートのカスタムフィールドのメタボックス追加
・ソートのカスタムフィールドのメタボックスを追加
・共通nameタグが更新されないバグ対策としてフォームタグを共通化
・ファイル名をクラス名に合わせるよう変更
2021-06-14 17:20:47 +09:00
nobu 2c72904078 Merge branch 'master' of ssh://develop.n-k-y.net:10022/WP_PLUGIN/POST_ORDER_BY_ARCHIVE 2021-05-15 16:46:42 +09:00
nobu 53ffbd213f WP PLUGIN バグ修正(カスタムフィールドの値がない場合)
・ソートのカスタムフィールドを4つに変更
2021-05-15 16:44:33 +09:00
nobu 5f651cab0f WP PLUGIN バグ修正(カスタムフィールドの値がない場合)
・配列の初期化書式を書き換え
・ソートのカスタムフィールドを4つに変更
・ソートのJSでカスタムフィールドをdisabledにしないよう変更
2021-05-15 16:43:56 +09:00
9 changed files with 357 additions and 169 deletions
+10 -7
View File
@@ -23,12 +23,13 @@ License: GPLv2
*/
/**
* 指定したキーが無ければ、投稿の管理画面表示時にメタボックスを追加する。
* メタキーは下記のオプションテーブルから取得する
* _apop_normal_order_param
* _apop_search_order_param
* _apop_tax_order_param
* ラベルは「APO+カスタムフィールド:XXXX」とする
* TODO:
1)カテゴリーのソート用カスタムフィールド取得と設定
・保存しているタームIDと投稿が属するタームIDが一致する場合、管理画面に表示する
class.apop.apop_post.php、setting_post_custom_field.php
* 2uninstall.php
* 投稿とタクソノミーのカスタムフィールド削除方法修正
* ・delete_post_meta_by_key()を廃止し、WP_QUERYに変更する
*/
define( 'APOP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
@@ -36,9 +37,11 @@ define( 'APOP_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
//メイン処理のクラスをインスタンス化
require_once __DIR__ . '/class/class.apop.order.php';
require_once __DIR__ . '/class/class.apop.ui.php';
require_once __DIR__ . '/class/class.apop.apop_ui.php';
require_once __DIR__ . '/class/class.apop.apop_post.php';
$APOP = new APOP;
new APOP_POST;
//CSS, JSの読み込み
add_action( 'admin_enqueue_scripts', 'register_my_styles' );
+137
View File
@@ -0,0 +1,137 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
} // Exit if accessed directly
if ( ! class_exists( 'APOP_POST' ) ) {
class APOP_POST {
const TEMPLATE_DIR = __DIR__ . '/../template/';
private $order_field = array();
private $name_keys = array();
private $order_param_keys = array(
'custom_field',
'custom_field_2',
'custom_field_3',
'custom_field_4',
);
private $labels;
public function __construct() {
add_action( 'admin_menu', array( $this, 'add_meta_fields' ) );
add_action( 'save_post', array( $this, 'save_meta_fields' ) );
}
//メタボックスを追加
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(
$this,
'insert_meta_fields'
), $target_post, 'normal' );
}
}
public function insert_meta_fields() {
//通常ソート
$this->create_order_field_data( get_option( '_apop_normal_order_param' ), 'normal' );
//検索ソート
$this->create_order_field_data( get_option( '_apop_search_order_param' ), 'search' );
//カテゴリー、タグ、カスタム分類
$this->create_order_tax_field_data( get_option( '_apop_tax_order_param' ) );
$this->labels = array(
'normal' => '通常',
'search' => '検索',
'tax' => 'カテゴリー、タグ、カスタム分類',
);
require_once self::TEMPLATE_DIR . 'setting_post_custom_field.php';
}
private function set_post_types() {
$custom_posts = array_values( get_post_types( array( 'public' => true, '_builtin' => false ) ) );
return array_merge( array( 'page', 'post', ), $custom_posts );
}
private function create_order_field_data( $param, $key, $update = false ) {
foreach ( $this->order_param_keys as $order_param_key ) {
if ( isset( $param[ $order_param_key ]['field']['meta_key'] ) &&
! empty( $param[ $order_param_key ]['field']['meta_key'] ) ) {
if ( $update ) {
$this->name_keys[] = $param[ $order_param_key ]['field']['meta_key'];
} else {
$this->order_field[ $key ][] = $param[ $order_param_key ]['field']['meta_key'];
}
}
}
}
private function create_order_tax_field_data( $param, $update = false ) {
$term_ids = $this->create_post_term_ids();
foreach ( $term_ids as $term_id ) {
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'];
}
}
}
}
}
private function create_post_term_ids() {
global $post;
$terms = array();
$term_ids = array();
$taxonomy_slugs = array_keys( get_the_taxonomies() );
foreach ( $taxonomy_slugs as $taxonomy_slug ) {
$terms[] = get_the_terms( $post->ID, $taxonomy_slug );
}
foreach ( $terms as $term ) {
foreach ( $term as $tax ) {
$term_ids[] = $tax->term_id;
}
}
return $term_ids;
}
private function get_custom_field_data( $custom_filed_name ) {
global $post;
return get_post_meta( $post->ID, $custom_filed_name, true );
}
// カスタムフィールドの値を保存
public function save_meta_fields( $post_id ) {
$this->get_update_meta_fields();
if ( count( $this->name_keys ) > 0 ) {
foreach ( $this->name_keys as $name_key ) {
update_post_meta( $post_id, $name_key, $_POST[ $name_key ] ?? '' );
update_post_meta( $post_id, $name_key, $_POST[ $name_key ] ?? '' );
}
}
}
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_tax_field_data( get_option( '_apop_tax_order_param' ), true );
}
}
}
+45 -8
View File
@@ -21,7 +21,7 @@ h3 {
padding: .5em;
text-align: center;
background: #ababab;
border: 1px solid #999;
border: 1px solid #ccc;
cursor: pointer;
}
@@ -42,7 +42,8 @@ h3 {
.post-order-box-outer {
width: 100%;
margin: -1px 0 2em;
border-top: 1px solid #999;
border: 1px solid #ccc;
background: #fff;
}
.post-order-box:not(:first-child) {
@@ -51,14 +52,15 @@ h3 {
.list-orders-outer {
width: 100%;
display: flex;
margin-bottom: 1em;
flex-wrap: wrap;
justify-content: space-between;
}
.list-orders-inner {
width: 50%;
margin: 1.5em 1em 0 0;
width: calc((100% / 2) - 20px);
padding: .5em;
border: 1px solid #999;
position: relative;
}
@@ -75,7 +77,8 @@ p.submit.post-order .button-primary {
bottom: 1em;
}
dl.apop_setting_list {
dl.apop_setting_list,
dl.apop_setting_list_dd {
width: 100%;
margin-top: .5em;
}
@@ -92,6 +95,29 @@ dl.apop_setting_list dd:first-of-type {
margin-bottom: 2em;
}
dl.apop_setting_list_dd dt {
margin-top: 1em;
font-weight: bold;
}
dl.apop_setting_list_dd dd {
margin: .5em 0;
border-bottom: 1px solid #c3c4c7;
}
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 input {
width: 100%;
}
.form-table tr {
border-bottom: 1px solid #ccc;
}
@@ -105,7 +131,7 @@ dl.apop_setting_list dd:first-of-type {
background: #fff;
cursor: move;
color: #4b4b4b;
border: 1px solid #ababab;
border: 1px solid #ccc;
}
.search_normal_sort .product-list {
@@ -145,7 +171,7 @@ dl.apop_setting_list dd:first-of-type {
.no_registered_exp {
width: 100%;
margin-top: 1em;
margin: 1em 0 0 .5em;
}
.order_setting_list > li {
@@ -197,6 +223,17 @@ dl.apop_setting_list dd:first-of-type {
cursor: default;
}
.apop-submit {
margin: 1em .5em;
}
.apop-form_table {
background: #fff;
}
.apop-form_table th {
padding-left: .5em;
}
@media only screen and (max-width: 1264px) {
.search_normal_sort .product-list {
+23 -14
View File
@@ -19,24 +19,33 @@ jQuery(function ($) {
change_normal_field_sort();
function change_tab_menu() {
let submit_type = $('.post-order-box-outer').data('submit_type');
let apop_submit_type = $('#apop_submit_type');
let order_nav_list = $('.post-order-nav li');
let order_box = $('.post-order-box');
order_nav_list.removeClass('en');
order_box.hide();
$('.post-order-nav li:eq(' + submit_type + ')').addClass('en');
$('.post-order-box:eq(' + submit_type + ')').show()
init();
click_menu();
order_nav_list.on('click', function () {
if (!$(this).hasClass('en')) {
let target_index = $(this).index();
order_nav_list.removeClass('en');
$(this).addClass('en');
order_box.hide();
$('.post-order-box:eq(' + target_index + ')').show();
}
});
function init() {
let submit_type = apop_submit_type.val();
order_nav_list.removeClass('en');
order_box.hide();
$('.post-order-nav li:eq(' + submit_type + ')').addClass('en');
$('.post-order-box:eq(' + submit_type + ')').show()
}
function click_menu() {
order_nav_list.on('click', function () {
if (!$(this).hasClass('en')) {
let target_index = $(this).index();
order_nav_list.removeClass('en');
$(this).addClass('en');
order_box.hide();
$('.post-order-box:eq(' + target_index + ')').show();
apop_submit_type.val(target_index);
}
});
}
}
function order_list() {
+39 -50
View File
@@ -1,5 +1,5 @@
<?php
$submit_type = APOP_UI::input_post_filter( 'submit_type', 'str' );
$submit_type = APOP_UI::input_post_filter( 'apop_submit_type', 'str' );
?>
<div class="post-setting-box">
<h2>並べ替え</h2>
@@ -12,13 +12,14 @@ $submit_type = APOP_UI::input_post_filter( 'submit_type', 'str' );
<li>カスタム分類</li>
</ul>
</nav>
<div class="post-order-box-outer" data-submit_type="<?php echo $submit_type; ?>">
<div class="post-order-box">
<div class="list-orders-outer">
<div class="list-orders-inner">
<form action="" method="post">
<div class="post-order-box-outer">
<form action="" method="post">
<?php wp_nonce_field( 'sh_options' ); ?>
<input id="apop_submit_type" type="hidden" name="apop_submit_type" value="<?php echo $submit_type; ?>">
<div class="post-order-box">
<div class="list-orders-outer">
<div class="list-orders-inner">
<h3>通常</h3>
<?php wp_nonce_field( 'sh_options' ); ?>
<?php
$order_target_type = '_apop_normal_order';
$order_target = APOP_UI::get_order_type( $order_target_type );
@@ -43,20 +44,13 @@ $submit_type = APOP_UI::input_post_filter( 'submit_type', 'str' );
<?php echo APOP_UI::get_all_search_normal_posts( 'normal' ); ?>
</ul>
</div>
<input type="hidden" name="submit_type" value="0">
<p class="submit post-order"><input type="submit" name="Submit" class="button-primary"
value="変更を保存"/></p>
</form>
</div>
</div>
</div>
</div>
<div class="post-order-box">
<div class="list-orders-outer">
<div class="list-orders-inner">
<form action="" method="post">
<div class="post-order-box">
<div class="list-orders-outer">
<div class="list-orders-inner">
<h3>検索</h3>
<?php wp_nonce_field( 'sh_options' ); ?>
<?php
$order_target_type = '_apop_search_order';
$order_target = APOP_UI::get_order_type( $order_target_type );
@@ -81,42 +75,37 @@ $submit_type = APOP_UI::input_post_filter( 'submit_type', 'str' );
<?php echo APOP_UI::get_all_search_normal_posts( 'search' ); ?>
</ul>
</div>
<input type="hidden" name="submit_type" value="1">
<p class="submit post-order"><input type="submit" name="Submit" class="button-primary"
value="変更を保存"/></p>
</form>
</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 = 'カテゴリー';
$submit_type_number = 2;
?>
<?php include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?>
<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 = 'カテゴリー';
?>
<?php include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?>
</div>
</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 = 'タグ';
$submit_type_number = 3;
?>
<?php include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?>
<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 = 'タグ';
?>
<?php include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?>
</div>
</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 = 'カスタム分類';
$submit_type_number = 4;
?>
<?php include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?>
<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'; ?>
</div>
</div>
</div>
<p class="apop-submit"><input type="submit" name="submit" class="button-primary" value="変更を保存"/></p>
</form>
</div>
</div>
+41 -49
View File
@@ -1,60 +1,52 @@
<?php if ( isset( $tax_lists, $tax_title_text, $submit_type_number ) ): ?>
<?php if ( isset( $tax_lists, $tax_title_text ) ): ?>
<?php foreach ( $tax_lists as $tax_key => $tax_list ) : ?>
<div class="list-orders-outer">
<?php if ( count( $tax_list ) > 0 ): ?>
<?php echo APOP_UI::none_registered_alert_msg(); ?>
<?php foreach ( $tax_list as $tax_data ): ?>
<div class="list-orders-inner">
<form action="" method="post">
<?php wp_nonce_field( 'sh_options' ); ?>
<h3><?php echo $tax_data->name; ?></h3>
<?php
$order_target_data = get_option( '_apop_tax_sort_type' );
if ( isset( $order_target_data[ $tax_data->term_id ] ) ) {
$order_target = $order_target_data[ $tax_data->term_id ];
} else {
$order_target = 1;
}
?>
<ul class="sort_menu_list"
data-order_target="<?php echo $order_target; ?>">
<li>
<label>
<input class="sort_menu" type="radio"
name="_apop_tax_sort_type[<?php echo $tax_data->term_id; ?>]"
value="1"<?php checked( $order_target, 1 ); ?>>ドラッグソート</label>
</li>
<li>
<label>
<input class="sort_menu" type="radio"
name="_apop_tax_sort_type[<?php echo $tax_data->term_id; ?>]"
value="2"<?php checked( $order_target, 2 ); ?>>標準+カスタムフィールドソート</label>
</li>
</ul>
<h3><?php echo $tax_data->name; ?></h3>
<?php
$order_target_data = get_option( '_apop_tax_sort_type' );
if ( isset( $order_target_data[ $tax_data->term_id ] ) ) {
$order_target = $order_target_data[ $tax_data->term_id ];
} else {
$order_target = 1;
}
?>
<ul class="sort_menu_list"
data-order_target="<?php echo $order_target; ?>">
<li>
<label>
<input class="sort_menu" type="radio"
name="_apop_tax_sort_type[<?php echo $tax_data->term_id; ?>]"
value="1"<?php checked( $order_target, 1 ); ?>>ドラッグソート</label>
</li>
<li>
<label>
<input class="sort_menu" type="radio"
name="_apop_tax_sort_type[<?php echo $tax_data->term_id; ?>]"
value="2"<?php checked( $order_target, 2 ); ?>>標準+カスタムフィールドソート</label>
</li>
</ul>
<div class="sort_box">
<ul class="post-order-list">
<?php echo APOP_UI::create_order_list( $tax_data, $tax_key ); ?>
</ul>
<div class="sort_box">
<ul class="post-order-list">
<?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 ); ?>
<?php echo $alert; ?>
<h4>有効</h4>
<ul class="post-order-list search_normal_sort">
<?php echo $list; ?>
</ul>
<div class="disable_box">
<h4>無効</h4>
<ul class="disable_normal_list"></ul>
</div>
<div class="sort_box">
<?php list( $list, $alert ) = APOP_UI::create_search_normal_list( 'tax', $tax_data->term_id ); ?>
<?php echo $alert; ?>
<h4>有効</h4>
<ul class="post-order-list search_normal_sort">
<?php echo $list; ?>
</ul>
<div class="disable_box">
<h4>無効</h4>
<ul class="disable_normal_list"></ul>
</div>
</div>
<input type="hidden" name="submit_type" value="<?php echo $submit_type_number; ?>">
<p class="submit post-order"><input type="submit" name="Submit"
class="button-primary"
value="変更を保存"/></p>
<input type="hidden" name="sort_type[cat]" value="1">
</form>
</div>
</div>
<?php endforeach; ?>
<?php else: ?>
+41 -41
View File
@@ -1,47 +1,47 @@
<div class="post-setting-box">
<form action="" method="post">
<?php
<?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">
<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 $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 $per_page_data['_checked']; ?>>表示数設定
<input class="per_page_search_input" type="text"
name="_apop_per_page[search]"
value="<?php echo $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>
$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 $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 $per_page_data['_checked']; ?>>表示数設定
<input class="per_page_search_input" type="text"
name="_apop_per_page[search]"
value="<?php echo $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="変更を保存"/>
</form>
</div>
+21
View File
@@ -0,0 +1,21 @@
<div class="order_setting_custom_field_box">
<?php if ( isset( $this->order_field ) && count( $this->order_field ) > 0 ): ?>
<dl class="apop_setting_list_dd">
<?php foreach ( $this->order_field as $type => $items ): ?>
<dt><?php echo $this->labels[ $type ]; ?></dt>
<dd>
<ul>
<?php foreach ( $items as $item ): ?>
<?php if ( ! empty( $item ) ): ?>
<li><label><?php echo $item; ?></label>
<input type="text" name="<?php echo $item; ?>"
value="<?php echo $this->get_custom_field_data( $item ); ?>"/>
</li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
</dd>
<?php endforeach; ?>
</dl>
<?php endif; ?>
</div>