WP PLUGIN バグ修正 ソートのカスタムフィールドのメタボックス追加

・ソートのカスタムフィールドのメタボックスを追加
・共通nameタグが更新されないバグ対策としてフォームタグを共通化
・ファイル名をクラス名に合わせるよう変更
This commit is contained in:
2021-06-13 10:11:17 +09:00
parent 2c72904078
commit 9cc82988e2
8 changed files with 326 additions and 149 deletions
+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 );
}
}
}