WP PLUGIN バグ修正 ソートのカスタムフィールドのメタボックス追加
・ソートのカスタムフィールドのメタボックスを追加 ・共通nameタグが更新されないバグ対策としてフォームタグを共通化 ・ファイル名をクラス名に合わせるよう変更
This commit is contained in:
@@ -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 );
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user