Wire get_vip_settings alias, tab aliases for vip/assets, expired-level meta, VIP2 order-level fallback, JSON-safe order notes, and header/float pay-vip CTAs.
188 lines
6.2 KiB
PHP
188 lines
6.2 KiB
PHP
<?php
|
|
/**
|
|
* Header multi-function cluster (zibll zib_menu_button publish/VIP subset).
|
|
*
|
|
* @package AKSRT
|
|
*/
|
|
|
|
defined('ABSPATH') || exit;
|
|
|
|
if (!function_exists('aksrt_get_header_newposts_config')) :
|
|
/**
|
|
* @return array{enabled:bool,text:string,radius:int,class:string,types:string[]}
|
|
*/
|
|
function aksrt_get_header_newposts_config(): array {
|
|
$cfg = class_exists('\AKSRT\Settings\Settings')
|
|
? \AKSRT\Settings\Settings::get_header_newposts_config()
|
|
: ['enabled' => true, 'text' => __('发布', 'aksrt'), 'radius' => 20, 'class' => ''];
|
|
$all = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::get_all() : [];
|
|
// Prefer publish_btn from header nav when newposts not explicitly set.
|
|
$nav = class_exists('\AKSRT\Settings\Settings')
|
|
? \AKSRT\Settings\Settings::get_header_nav_settings()
|
|
: ['publish_btn' => true];
|
|
if (empty($cfg['enabled']) && !empty($nav['publish_btn'])) {
|
|
$cfg['enabled'] = true;
|
|
}
|
|
$types = [];
|
|
if (!empty($all['header_newposts_types']) && is_array($all['header_newposts_types'])) {
|
|
$types = array_values(array_filter(array_map('sanitize_key', $all['header_newposts_types'])));
|
|
}
|
|
if (!$types) {
|
|
$types = ['post'];
|
|
if (class_exists('\AKSRT\Settings\Settings')) {
|
|
$forum = \AKSRT\Settings\Settings::get_forum_settings();
|
|
$shop = \AKSRT\Settings\Settings::get_shop_settings();
|
|
if (!empty($forum['enabled'])) {
|
|
$types[] = 'topic';
|
|
}
|
|
if (!empty($shop['enabled'])) {
|
|
$types[] = 'product';
|
|
}
|
|
}
|
|
}
|
|
$cfg['types'] = $types;
|
|
return $cfg;
|
|
}
|
|
endif;
|
|
|
|
if (!function_exists('aksrt_get_new_add_actions')) :
|
|
/**
|
|
* Build multi-type publish actions.
|
|
*
|
|
* @param string[] $types post|topic|product
|
|
* @return list<array{type:string,url:string,label:string,icon:string}>
|
|
*/
|
|
function aksrt_get_new_add_actions(array $types = ['post']): array {
|
|
$out = [];
|
|
foreach ($types as $type) {
|
|
$type = sanitize_key((string) $type);
|
|
if ($type === 'post') {
|
|
$url = function_exists('aksrt_get_new_post_url') ? aksrt_get_new_post_url() : admin_url('post-new.php');
|
|
if ($url === '') {
|
|
continue;
|
|
}
|
|
$out[] = [
|
|
'type' => 'post',
|
|
'url' => $url,
|
|
'label' => __('写文章', 'aksrt'),
|
|
'icon' => 'fa fa-file-text-o',
|
|
];
|
|
} elseif ($type === 'topic') {
|
|
$url = function_exists('aksrt_get_forum_compose_url') ? aksrt_get_forum_compose_url() : '';
|
|
if ($url === '') {
|
|
continue;
|
|
}
|
|
$out[] = [
|
|
'type' => 'topic',
|
|
'url' => $url,
|
|
'label' => __('发帖', 'aksrt'),
|
|
'icon' => 'fa fa-comments-o',
|
|
];
|
|
} elseif ($type === 'product') {
|
|
// Prefer front product edit page when registered.
|
|
$url = '';
|
|
if (function_exists('aksrt_get_product_edit_url')) {
|
|
$url = (string) aksrt_get_product_edit_url();
|
|
}
|
|
if ($url === '') {
|
|
// Fallback: product-edit page template lookup is optional.
|
|
$url = home_url('/?page_id=0');
|
|
// Use admin product CPT if available.
|
|
$url = admin_url('post-new.php?post_type=aksrt_product');
|
|
}
|
|
$out[] = [
|
|
'type' => 'product',
|
|
'url' => $url,
|
|
'label' => __('发布商品', 'aksrt'),
|
|
'icon' => 'fa fa-shopping-bag',
|
|
];
|
|
}
|
|
}
|
|
return $out;
|
|
}
|
|
endif;
|
|
|
|
if (!function_exists('aksrt_render_new_add_btns')) :
|
|
/**
|
|
* Multi-type publish button (zibll newadd-btns).
|
|
*
|
|
* @param string[] $types
|
|
*/
|
|
function aksrt_render_new_add_btns(array $types, string $class = '', string $label = ''): string {
|
|
$actions = aksrt_get_new_add_actions($types);
|
|
if (!$actions) {
|
|
return '';
|
|
}
|
|
if ($label === '') {
|
|
$label = __('发布', 'aksrt');
|
|
}
|
|
$class = trim('newadd-btns ' . $class);
|
|
|
|
if (count($actions) === 1) {
|
|
$a = $actions[0];
|
|
return '<a rel="nofollow" class="' . esc_attr(trim($class . ' but')) . '" href="' . esc_url($a['url']) . '">'
|
|
. '<i class="' . esc_attr($a['icon']) . '" aria-hidden="true"></i> '
|
|
. wp_kses_post($label)
|
|
. '</a>';
|
|
}
|
|
|
|
$html = '<span class="' . esc_attr($class) . ' hover-show">';
|
|
$html .= '<a href="javascript:;" class="but newadd-btns__toggle" rel="nofollow">' . wp_kses_post($label) . ' <i class="fa fa-caret-down" aria-hidden="true"></i></a>';
|
|
$html .= '<div class="hover-show-con dropdown-menu drop-newadd">';
|
|
foreach ($actions as $a) {
|
|
$html .= '<a rel="nofollow" class="newadd-btns__item" href="' . esc_url($a['url']) . '">';
|
|
$html .= '<i class="' . esc_attr($a['icon']) . '" aria-hidden="true"></i> ' . esc_html($a['label']);
|
|
$html .= '</a>';
|
|
}
|
|
$html .= '</div></span>';
|
|
return $html;
|
|
}
|
|
endif;
|
|
|
|
if (!function_exists('aksrt_render_header_menu_buttons')) :
|
|
/**
|
|
* Publish + optional VIP open button for header CTA.
|
|
*/
|
|
function aksrt_render_header_menu_buttons(): string {
|
|
$cfg = aksrt_get_header_newposts_config();
|
|
$html = '';
|
|
if (!empty($cfg['enabled'])) {
|
|
$class = 'btn-primary navbar-newposts';
|
|
if (!empty($cfg['class'])) {
|
|
$class .= ' ' . $cfg['class'];
|
|
}
|
|
$radius = (int) ($cfg['radius'] ?? 20);
|
|
$style = $radius > 0 ? ' style="border-radius:' . $radius . 'px"' : '';
|
|
$label = (string) ($cfg['text'] ?? __('发布', 'aksrt'));
|
|
// Strip outer <i> if present in settings HTML text — keep simple.
|
|
$btn = aksrt_render_new_add_btns($cfg['types'] ?? ['post'], $class, $label);
|
|
if ($btn !== '') {
|
|
$html .= '<div class="navbar-form navbar-right navbar-but"' . $style . '>' . $btn . '</div>';
|
|
}
|
|
}
|
|
|
|
// VIP open CTA for guests / non-VIP (zibll: .pay-vip modal).
|
|
$user_id = get_current_user_id();
|
|
$show_vip = false;
|
|
if (class_exists('\AKSRT\Settings\Settings')) {
|
|
$vs = \AKSRT\Settings\Settings::get_payment_vip_settings();
|
|
$show_vip = !empty($vs['enabled']);
|
|
}
|
|
if ($show_vip) {
|
|
$is_vip = false;
|
|
if ($user_id > 0 && function_exists('aksrt_get_user_vip_level')) {
|
|
$is_vip = (int) aksrt_get_user_vip_level($user_id) > 0;
|
|
}
|
|
if (!$is_vip) {
|
|
$cls = $user_id > 0 ? 'pay-vip' : 'signin-loader';
|
|
$html .= '<div class="navbar-form navbar-right navbar-vip hover-show inline-block">';
|
|
$html .= '<a class="but jb-red radius payvip-icon ml10 ' . esc_attr($cls) . '" href="javascript:;"' . ($user_id > 0 ? ' vip-level="1"' : '') . '>';
|
|
$html .= '<i class="fa fa-diamond em12 mr3" aria-hidden="true"></i>' . esc_html__('开通会员', 'aksrt');
|
|
$html .= '</a></div>';
|
|
}
|
|
}
|
|
|
|
return $html;
|
|
}
|
|
endif;
|