WP PLUGIN アーカイブページの投稿表示順設定
・管理画面メニュー(サブメニュー)の修正 ・1ページ表示件数の追加 ・pre_get_postするクエリの追加 ・検索用設定の追加
This commit is contained in:
+174
-133
@@ -1,168 +1,209 @@
|
||||
<?php
|
||||
if ( ! defined( 'ABSPATH' ) ) {
|
||||
exit;
|
||||
} // Exit if accessed directly
|
||||
|
||||
class APOP_UI {
|
||||
if ( ! class_exists( 'APOP_UI' ) ) {
|
||||
class APOP_UI {
|
||||
|
||||
public static function get_all_taxonomies( $key ) {
|
||||
if ( $key !== 'taxonomy' ) {
|
||||
return get_terms( array( 'taxonomy' => $key, 'get' => 'all' ) );
|
||||
public static function get_all_search_posts( $type, $exclude_posts = [] ) {
|
||||
$args = [
|
||||
'post_status' => array( 'publish', 'draft' ),
|
||||
'posts_per_page' => - 1,
|
||||
];
|
||||
|
||||
if ( $type == 'registered' ) {
|
||||
$args['orderby'] = 'meta_value_num';
|
||||
$args['order'] = 'ASC';
|
||||
$args['meta_key'] = '_apop_post_search';
|
||||
} else {
|
||||
$exclude = implode( ',', $exclude_posts );
|
||||
if ( ! empty( $exclude ) ) {
|
||||
$args['exclude'] = $exclude;
|
||||
}
|
||||
}
|
||||
return get_posts( $args );
|
||||
}
|
||||
|
||||
return get_taxonomies( array( 'public' => true, '_builtin' => false ) );
|
||||
}
|
||||
|
||||
public static function get_cat_tag_list( $target, $key ): array {
|
||||
$opt = get_option( '_apop_' . $target . '_order' );
|
||||
public static function get_all_taxonomies( $key ) {
|
||||
if ( $key !== 'taxonomy' ) {
|
||||
return get_terms( array( 'taxonomy' => $key, 'get' => 'all' ) );
|
||||
}
|
||||
|
||||
return get_taxonomies( array( 'public' => true, '_builtin' => false ) );
|
||||
}
|
||||
|
||||
public static function get_cat_tag_list( $target, $key ): array {
|
||||
$opt = get_option( '_apop_' . $target . '_order' );
|
||||
|
||||
if ( ! isset( $opt['target_cat'] ) ) {
|
||||
return array();
|
||||
}
|
||||
|
||||
if ( $key == 'taxonomy' ) {
|
||||
return self::create_custom_tax_term( $opt );
|
||||
} else {
|
||||
return self::create_tax_term( $opt, $key );
|
||||
}
|
||||
}
|
||||
|
||||
private static function create_custom_tax_term( $opt ): array {
|
||||
$tax_data = [];
|
||||
foreach ( $opt['target_cat'] as $tax_id => $status ) {
|
||||
//フラグが立っているカスタムタクソノミーは情報を取得する
|
||||
if ( $status ) {
|
||||
$args = array(
|
||||
'taxonomy' => get_term( $tax_id )->taxonomy,
|
||||
'hide_empty' => 0,
|
||||
'include' => $tax_id,
|
||||
);
|
||||
$tax_data[] = get_terms( $args );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return $tax_data;
|
||||
}
|
||||
|
||||
private static function create_tax_term( $opt, $key ) {
|
||||
$include = array();
|
||||
foreach ( $opt['target_cat'] as $tax_id => $status ) {
|
||||
//フラグが立っているタクソノミーIDを取得
|
||||
if ( $status ) {
|
||||
$include[] = $tax_id;
|
||||
}
|
||||
}
|
||||
$include_tax = implode( ',', $include );
|
||||
if ( ! empty( $include_tax ) ) {
|
||||
$args = array(
|
||||
'taxonomy' => $key,
|
||||
'hide_empty' => 0,
|
||||
'include' => $include_tax,
|
||||
);
|
||||
|
||||
return get_terms( $args );
|
||||
}
|
||||
|
||||
if ( ! isset( $opt['target_cat'] ) ) {
|
||||
return array();
|
||||
}
|
||||
|
||||
if ( $key == 'taxonomy' ) {
|
||||
return self::create_custom_tax_term( $opt );
|
||||
} else {
|
||||
return self::create_tax_term( $opt, $key );
|
||||
}
|
||||
}
|
||||
|
||||
private static function create_custom_tax_term( $opt ): array {
|
||||
$tax_data = [];
|
||||
foreach ( $opt['target_cat'] as $tax_id => $status ) {
|
||||
//フラグが立っているカスタムタクソノミーは情報を取得する
|
||||
if ( $status ) {
|
||||
$args = array(
|
||||
'taxonomy' => get_term( $tax_id )->taxonomy,
|
||||
'hide_empty' => 0,
|
||||
'include' => $tax_id,
|
||||
);
|
||||
$tax_data[] = get_terms( $args );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return $tax_data;
|
||||
}
|
||||
|
||||
private static function create_tax_term( $opt, $key ) {
|
||||
$include = array();
|
||||
foreach ( $opt['target_cat'] as $tax_id => $status ) {
|
||||
//フラグが立っているタクソノミーIDを取得
|
||||
if ( $status ) {
|
||||
$include[] = $tax_id;
|
||||
}
|
||||
}
|
||||
$include_tax = implode( ',', $include );
|
||||
if ( ! empty( $include_tax ) ) {
|
||||
$args = array(
|
||||
'taxonomy' => $key,
|
||||
'hide_empty' => 0,
|
||||
'include' => $include_tax,
|
||||
);
|
||||
|
||||
return get_terms( $args );
|
||||
}
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
public static function create_order_list( $tax_data, $tax_key, $exclude_posts ): array {
|
||||
$target_posts = self::get_sort_post_list( $tax_data->term_id, $tax_key, $tax_data->taxonomy );
|
||||
$list = [];
|
||||
$sort_num = 0;
|
||||
foreach ( $target_posts as $key => $target_post ) {
|
||||
$sort_num = $key + 1;
|
||||
$exclude_posts[] = $target_post->ID;
|
||||
$list[] = '
|
||||
public static function create_order_list( $tax_data, $tax_key, $exclude_posts ): array {
|
||||
$target_posts = self::get_sort_post_list( $tax_data->term_id, $tax_key, $tax_data->taxonomy );
|
||||
$list = [];
|
||||
$sort_num = 0;
|
||||
foreach ( $target_posts as $key => $target_post ) {
|
||||
$sort_num = $key + 1;
|
||||
$exclude_posts[] = $target_post->ID;
|
||||
$list[] = '
|
||||
<li class="product-list"><span class="sort-num-label">' . $sort_num . '</span>' . get_the_title( $target_post->ID ) . '
|
||||
<input type="hidden" class="list_order"
|
||||
name="_apop_post_' . self::create_post_sort_key( $tax_data->taxonomy, $tax_key ) . '[post_sort][' . $tax_data->term_id . '][' . $target_post->ID . ']"
|
||||
value="' . $sort_num . '">
|
||||
</li>';
|
||||
}
|
||||
}
|
||||
|
||||
return array(
|
||||
implode( PHP_EOL, $list ),
|
||||
$exclude_posts,
|
||||
$sort_num,
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
private static function get_sort_post_list( $tax_id, $search_param, $tax_name ) {
|
||||
$args = [
|
||||
'post_status' => array( 'publish', 'draft' ),
|
||||
'posts_per_page' => - 1,
|
||||
'orderby' => 'meta_value_num',
|
||||
'order' => 'ASC',
|
||||
'meta_key' => '_apop_post_' . self::create_post_sort_key( $tax_name, $search_param ) . '_' . $tax_id,
|
||||
];
|
||||
|
||||
|
||||
self::create_post_tax_query( $args, $search_param, $tax_name, $tax_id );
|
||||
|
||||
return get_posts( $args );
|
||||
}
|
||||
|
||||
private static function create_post_sort_key( $tax_name, $tax_key ) {
|
||||
if ( $tax_key == 'taxonomy' ) {
|
||||
return 'tax';
|
||||
}
|
||||
|
||||
return $tax_name;
|
||||
}
|
||||
|
||||
private static function create_post_tax_query( &$args, $key, $tax_name, $tax_id ) {
|
||||
if ( $key == 'taxonomy' ) {
|
||||
$args['tax_query'] = array(
|
||||
array(
|
||||
'taxonomy' => $tax_name,
|
||||
'field' => 'term_id',
|
||||
'terms' => $tax_id,
|
||||
'include_children' => false
|
||||
)
|
||||
return array(
|
||||
implode( PHP_EOL, $list ),
|
||||
$exclude_posts,
|
||||
$sort_num,
|
||||
);
|
||||
} else {
|
||||
$args[ $key ] = $tax_id;
|
||||
}
|
||||
}
|
||||
|
||||
public static function create_product_none_order_list( $tax_data, $tax_key, $exclude_posts, $sort_num ): string {
|
||||
$target_posts_no_order = self::get_none_sort_post_list( $tax_data->term_id, $tax_key, $exclude_posts, $tax_data->taxonomy );
|
||||
if ( count( $target_posts_no_order ) > 0 ) {
|
||||
$sort_num = $sort_num ?? 0;
|
||||
foreach ( $target_posts_no_order as $key => $target_post_no_order ) {
|
||||
$sort_num_no_order = $sort_num + $key + 1;
|
||||
$list[] = '
|
||||
}
|
||||
|
||||
private static function get_sort_post_list( $tax_id, $search_param, $tax_name ) {
|
||||
$args = [
|
||||
'post_status' => array( 'publish', 'draft' ),
|
||||
'posts_per_page' => - 1,
|
||||
'orderby' => 'meta_value_num',
|
||||
'order' => 'ASC',
|
||||
'meta_key' => '_apop_post_' . self::create_post_sort_key( $tax_name, $search_param ) . '_' . $tax_id,
|
||||
];
|
||||
|
||||
|
||||
self::create_post_tax_query( $args, $search_param, $tax_name, $tax_id );
|
||||
|
||||
return get_posts( $args );
|
||||
}
|
||||
|
||||
private static function create_post_sort_key( $tax_name, $tax_key ) {
|
||||
if ( $tax_key == 'taxonomy' ) {
|
||||
return 'tax';
|
||||
}
|
||||
|
||||
return $tax_name;
|
||||
}
|
||||
|
||||
private static function create_post_tax_query( &$args, $key, $tax_name, $tax_id ) {
|
||||
if ( $key == 'taxonomy' ) {
|
||||
$args['tax_query'] = array(
|
||||
array(
|
||||
'taxonomy' => $tax_name,
|
||||
'field' => 'term_id',
|
||||
'terms' => $tax_id,
|
||||
'include_children' => false
|
||||
)
|
||||
);
|
||||
} else {
|
||||
$args[ $key ] = $tax_id;
|
||||
}
|
||||
}
|
||||
|
||||
public static function create_product_none_order_list( $tax_data, $tax_key, $exclude_posts, $sort_num ): string {
|
||||
$target_posts_no_order = self::get_none_sort_post_list( $tax_data->term_id, $tax_key, $exclude_posts, $tax_data->taxonomy );
|
||||
if ( count( $target_posts_no_order ) > 0 ) {
|
||||
$sort_num = $sort_num ?? 0;
|
||||
foreach ( $target_posts_no_order as $key => $target_post_no_order ) {
|
||||
$sort_num_no_order = $sort_num + $key + 1;
|
||||
$list[] = '
|
||||
<li class="product-list no_order">
|
||||
<span class="sort-num-label">' . $sort_num_no_order . '</span>' . get_the_title( $target_post_no_order->ID ) . '
|
||||
<input type="hidden" class="list_order"
|
||||
name="_apop_post_' . self::create_post_sort_key( $tax_data->taxonomy, $tax_key ) . '[post_sort][' . $tax_data->term_id . '][' . $target_post_no_order->ID . ']"
|
||||
value="' . $sort_num_no_order . '">
|
||||
</li>';
|
||||
}
|
||||
if ( isset( $list ) ) {
|
||||
return implode( PHP_EOL, $list );
|
||||
}
|
||||
}
|
||||
if ( isset( $list ) ) {
|
||||
return implode( PHP_EOL, $list );
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
private static function get_none_sort_post_list( $tax_id, $search_param, $exclude_posts, $tax_name ) {
|
||||
|
||||
private static function get_none_sort_post_list( $tax_id, $search_param, $exclude_posts, $tax_name ) {
|
||||
$args = array(
|
||||
'post_status' => array( 'publish', 'draft' ),
|
||||
'posts_per_page' => - 1,
|
||||
);
|
||||
|
||||
$args = array(
|
||||
'post_status' => array( 'publish', 'draft' ),
|
||||
'posts_per_page' => - 1,
|
||||
);
|
||||
$exclude = implode( ',', $exclude_posts );
|
||||
if ( ! empty( $exclude ) ) {
|
||||
$args['exclude'] = $exclude;
|
||||
}
|
||||
|
||||
$exclude = implode( ',', $exclude_posts );
|
||||
if ( ! empty( $exclude ) ) {
|
||||
$args['exclude'] = $exclude;
|
||||
self::create_post_tax_query( $args, $search_param, $tax_name, $tax_id );
|
||||
|
||||
return get_posts( $args );
|
||||
}
|
||||
|
||||
self::create_post_tax_query( $args, $search_param, $tax_name, $tax_id );
|
||||
public static function create_cat_per_page( $opt_per_page, $type ): array {
|
||||
$cat_per_page = $opt_per_page[ $type ] ?? 'default';
|
||||
$set = '';
|
||||
$cat_per_page_num = '';
|
||||
if ( isset( $opt_per_page[ $type ] ) ) {
|
||||
if ( $opt_per_page[ $type ] != 'default' && $opt_per_page[ $type ] != '-1' ) {
|
||||
$set = ' checked="checked"';
|
||||
$cat_per_page_num = $cat_per_page;
|
||||
}
|
||||
}
|
||||
|
||||
return get_posts( $args );
|
||||
return array(
|
||||
'_per_page' => $cat_per_page,
|
||||
'_set' => $set,
|
||||
'_per_page_num' => $cat_per_page_num,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user