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
*/ */
/** /**
* 指定したキーが無ければ、投稿の管理画面表示時にメタボックスを追加する。 * TODO:
* メタキーは下記のオプションテーブルから取得する 1)カテゴリーのソート用カスタムフィールド取得と設定
* _apop_normal_order_param ・保存しているタームIDと投稿が属するタームIDが一致する場合、管理画面に表示する
* _apop_search_order_param class.apop.apop_post.php、setting_post_custom_field.php
* _apop_tax_order_param * 2uninstall.php
* ラベルは「APO+カスタムフィールド:XXXX」とする * 投稿とタクソノミーのカスタムフィールド削除方法修正
* ・delete_post_meta_by_key()を廃止し、WP_QUERYに変更する
*/ */
define( 'APOP_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); 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.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; $APOP = new APOP;
new APOP_POST;
//CSS, JSの読み込み //CSS, JSの読み込み
add_action( 'admin_enqueue_scripts', 'register_my_styles' ); 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; padding: .5em;
text-align: center; text-align: center;
background: #ababab; background: #ababab;
border: 1px solid #999; border: 1px solid #ccc;
cursor: pointer; cursor: pointer;
} }
@@ -42,7 +42,8 @@ h3 {
.post-order-box-outer { .post-order-box-outer {
width: 100%; width: 100%;
margin: -1px 0 2em; margin: -1px 0 2em;
border-top: 1px solid #999; border: 1px solid #ccc;
background: #fff;
} }
.post-order-box:not(:first-child) { .post-order-box:not(:first-child) {
@@ -51,14 +52,15 @@ h3 {
.list-orders-outer { .list-orders-outer {
width: 100%; width: 100%;
display: flex;
margin-bottom: 1em; margin-bottom: 1em;
flex-wrap: wrap;
justify-content: space-between;
} }
.list-orders-inner { .list-orders-inner {
width: 50%; width: calc((100% / 2) - 20px);
margin: 1.5em 1em 0 0;
padding: .5em; padding: .5em;
border: 1px solid #999;
position: relative; position: relative;
} }
@@ -75,7 +77,8 @@ p.submit.post-order .button-primary {
bottom: 1em; bottom: 1em;
} }
dl.apop_setting_list { dl.apop_setting_list,
dl.apop_setting_list_dd {
width: 100%; width: 100%;
margin-top: .5em; margin-top: .5em;
} }
@@ -92,6 +95,29 @@ dl.apop_setting_list dd:first-of-type {
margin-bottom: 2em; 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 { .form-table tr {
border-bottom: 1px solid #ccc; border-bottom: 1px solid #ccc;
} }
@@ -105,7 +131,7 @@ dl.apop_setting_list dd:first-of-type {
background: #fff; background: #fff;
cursor: move; cursor: move;
color: #4b4b4b; color: #4b4b4b;
border: 1px solid #ababab; border: 1px solid #ccc;
} }
.search_normal_sort .product-list { .search_normal_sort .product-list {
@@ -145,7 +171,7 @@ dl.apop_setting_list dd:first-of-type {
.no_registered_exp { .no_registered_exp {
width: 100%; width: 100%;
margin-top: 1em; margin: 1em 0 0 .5em;
} }
.order_setting_list > li { .order_setting_list > li {
@@ -197,6 +223,17 @@ dl.apop_setting_list dd:first-of-type {
cursor: default; 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) { @media only screen and (max-width: 1264px) {
.search_normal_sort .product-list { .search_normal_sort .product-list {
+10 -1
View File
@@ -19,15 +19,22 @@ jQuery(function ($) {
change_normal_field_sort(); change_normal_field_sort();
function change_tab_menu() { 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_nav_list = $('.post-order-nav li');
let order_box = $('.post-order-box'); let order_box = $('.post-order-box');
init();
click_menu();
function init() {
let submit_type = apop_submit_type.val();
order_nav_list.removeClass('en'); order_nav_list.removeClass('en');
order_box.hide(); order_box.hide();
$('.post-order-nav li:eq(' + submit_type + ')').addClass('en'); $('.post-order-nav li:eq(' + submit_type + ')').addClass('en');
$('.post-order-box:eq(' + submit_type + ')').show() $('.post-order-box:eq(' + submit_type + ')').show()
}
function click_menu() {
order_nav_list.on('click', function () { order_nav_list.on('click', function () {
if (!$(this).hasClass('en')) { if (!$(this).hasClass('en')) {
let target_index = $(this).index(); let target_index = $(this).index();
@@ -35,9 +42,11 @@ jQuery(function ($) {
$(this).addClass('en'); $(this).addClass('en');
order_box.hide(); order_box.hide();
$('.post-order-box:eq(' + target_index + ')').show(); $('.post-order-box:eq(' + target_index + ')').show();
apop_submit_type.val(target_index);
} }
}); });
} }
}
function order_list() { function order_list() {
let cat_ul_count = $('.post-order-list').length; //カテゴリ総数 let cat_ul_count = $('.post-order-list').length; //カテゴリ総数
+7 -18
View File
@@ -1,5 +1,5 @@
<?php <?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"> <div class="post-setting-box">
<h2>並べ替え</h2> <h2>並べ替え</h2>
@@ -12,13 +12,14 @@ $submit_type = APOP_UI::input_post_filter( 'submit_type', 'str' );
<li>カスタム分類</li> <li>カスタム分類</li>
</ul> </ul>
</nav> </nav>
<div class="post-order-box-outer" data-submit_type="<?php echo $submit_type; ?>"> <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="post-order-box">
<div class="list-orders-outer"> <div class="list-orders-outer">
<div class="list-orders-inner"> <div class="list-orders-inner">
<form action="" method="post">
<h3>通常</h3> <h3>通常</h3>
<?php wp_nonce_field( 'sh_options' ); ?>
<?php <?php
$order_target_type = '_apop_normal_order'; $order_target_type = '_apop_normal_order';
$order_target = APOP_UI::get_order_type( $order_target_type ); $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' ); ?> <?php echo APOP_UI::get_all_search_normal_posts( 'normal' ); ?>
</ul> </ul>
</div> </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> </div>
<div class="post-order-box"> <div class="post-order-box">
<div class="list-orders-outer"> <div class="list-orders-outer">
<div class="list-orders-inner"> <div class="list-orders-inner">
<form action="" method="post">
<h3>検索</h3> <h3>検索</h3>
<?php wp_nonce_field( 'sh_options' ); ?>
<?php <?php
$order_target_type = '_apop_search_order'; $order_target_type = '_apop_search_order';
$order_target = APOP_UI::get_order_type( $order_target_type ); $order_target = APOP_UI::get_order_type( $order_target_type );
@@ -81,10 +75,6 @@ $submit_type = APOP_UI::input_post_filter( 'submit_type', 'str' );
<?php echo APOP_UI::get_all_search_normal_posts( 'search' ); ?> <?php echo APOP_UI::get_all_search_normal_posts( 'search' ); ?>
</ul> </ul>
</div> </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> </div>
@@ -93,7 +83,6 @@ $submit_type = APOP_UI::input_post_filter( 'submit_type', 'str' );
<?php <?php
$tax_lists = array( 'category' => APOP_UI::get_cat_tag_list( 'cat', 'category' ) ); $tax_lists = array( 'category' => APOP_UI::get_cat_tag_list( 'cat', 'category' ) );
$tax_title_text = 'カテゴリー'; $tax_title_text = 'カテゴリー';
$submit_type_number = 2;
?> ?>
<?php include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?> <?php include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?>
</div> </div>
@@ -103,7 +92,6 @@ $submit_type = APOP_UI::input_post_filter( 'submit_type', 'str' );
<?php <?php
$tax_lists = array( 'tag_id' => APOP_UI::get_cat_tag_list( 'tag', 'post_tag' ) ); $tax_lists = array( 'tag_id' => APOP_UI::get_cat_tag_list( 'tag', 'post_tag' ) );
$tax_title_text = 'タグ'; $tax_title_text = 'タグ';
$submit_type_number = 3;
?> ?>
<?php include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?> <?php include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?>
</div> </div>
@@ -113,10 +101,11 @@ $submit_type = APOP_UI::input_post_filter( 'submit_type', 'str' );
<?php <?php
$tax_lists = array( 'taxonomy' => APOP_UI::get_cat_tag_list( 'tax', 'taxonomy' ) ); $tax_lists = array( 'taxonomy' => APOP_UI::get_cat_tag_list( 'tax', 'taxonomy' ) );
$tax_title_text = 'カスタム分類'; $tax_title_text = 'カスタム分類';
$submit_type_number = 4;
?> ?>
<?php include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?> <?php include APOP_PLUGIN_PATH . 'template/order_parts_taxonomy.php'; ?>
</div> </div>
</div> </div>
<p class="apop-submit"><input type="submit" name="submit" class="button-primary" value="変更を保存"/></p>
</form>
</div> </div>
</div> </div>
+1 -9
View File
@@ -1,12 +1,10 @@
<?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 ) : ?> <?php foreach ( $tax_lists as $tax_key => $tax_list ) : ?>
<div class="list-orders-outer"> <div class="list-orders-outer">
<?php if ( count( $tax_list ) > 0 ): ?> <?php if ( count( $tax_list ) > 0 ): ?>
<?php echo APOP_UI::none_registered_alert_msg(); ?> <?php echo APOP_UI::none_registered_alert_msg(); ?>
<?php foreach ( $tax_list as $tax_data ): ?> <?php foreach ( $tax_list as $tax_data ): ?>
<div class="list-orders-inner"> <div class="list-orders-inner">
<form action="" method="post">
<?php wp_nonce_field( 'sh_options' ); ?>
<h3><?php echo $tax_data->name; ?></h3> <h3><?php echo $tax_data->name; ?></h3>
<?php <?php
$order_target_data = get_option( '_apop_tax_sort_type' ); $order_target_data = get_option( '_apop_tax_sort_type' );
@@ -49,12 +47,6 @@
<ul class="disable_normal_list"></ul> <ul class="disable_normal_list"></ul>
</div> </div>
</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 endforeach; ?>
<?php else: ?> <?php else: ?>
+1 -1
View File
@@ -6,7 +6,7 @@
$default_per_page = get_option( 'posts_per_page' ); $default_per_page = get_option( 'posts_per_page' );
?> ?>
<h2>設定</h2> <h2>設定</h2>
<table class="form-table"> <table class="form-table apop-form_table">
<tr> <tr>
<th scope="row">全体設定</th> <th scope="row">全体設定</th>
<td> <td>
+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>