*/ function aksrt_get_new_add_actions(array $types = ['post']): array { $out = []; foreach ($types as $type) { $type = sanitize_key((string) $type); if ($type === 'post') { // Front submit page may be unset → aksrt_get_new_post_url() returns ''. // Never drop the publish chip for that: fall back to WP post-new. $url = function_exists('aksrt_get_new_post_url') ? (string) aksrt_get_new_post_url() : ''; if ($url === '') { $url = admin_url('post-new.php'); } $out[] = [ 'type' => 'post', 'url' => $url, 'label' => __('写文章', 'aksrt'), 'icon' => 'fa fas fa-file-alt', ]; } } return $out; } endif; if (!function_exists('aksrt_render_new_add_btns')) : /** * Publish chip (legacy newadd-btns, single action). * * Mirrors the single-button branch of the reference zib_get_new_add_btns(): * the paint classes ride on the anchor itself and the label is emitted * verbatim. Only the post action exists, so there is no dropdown branch. * * @param string[] $types */ function aksrt_render_new_add_btns(array $types, string $class = '', string $label = ''): string { if (class_exists('\AKSRT\Settings\Settings') && \AKSRT\Settings\Settings::close_sign()) { return ''; } $actions = aksrt_get_new_add_actions($types); if (!$actions) { return ''; } $a = $actions[0]; if ($label === '') { $label = __('发布', 'aksrt'); } return '' . $label . ''; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- Saved through sanitize_type 'html' (wp_kses_post). } endif; if (!function_exists('aksrt_render_header_menu_buttons')) : /** * Publish + optional VIP open button for header CTA. */ function aksrt_render_header_menu_buttons(): string { $settings = class_exists('\AKSRT\Settings\Settings') ? \AKSRT\Settings\Settings::read_domain('page_display', 'header-nav') : []; $enabled = !isset($settings['nav_newposts']) || !empty($settings['nav_newposts']); $text = trim((string) ($settings['nav_newposts_text'] ?? '')); $pill = !isset($settings['nav_newposts_radius']) || !empty($settings['nav_newposts_radius']); $skin = sanitize_html_class((string) (($settings['nav_newposts_class'] ?? '') ?: 'jb-blue')); $html = ''; if ($enabled) { // legacy default: but nowave jb-blue (+ radius). $class = 'but nowave ' . $skin; if ($pill && !str_contains($class, 'radius')) { $class .= ' radius'; } $label = $text !== '' ? $text : __('发布', 'aksrt'); $btn = aksrt_render_new_add_btns(['post'], $class, $label); if ($btn !== '') { $html .= $btn; } } // VIP open CTA for guests / non-VIP (legacy: .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']) && !empty($vs['nav_pay_vip']) && !\AKSRT\Settings\Settings::close_sign(); } 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'; $hover = ''; if (class_exists('\AKSRT\Content\VipService')) { $svc = \AKSRT\Content\VipService::get_instance(); if (method_exists($svc, 'render_vip_card')) { $cards = $svc->render_vip_card(1, $user_id) . $svc->render_vip_card(2, $user_id); if ($cards !== '') { $hover = '
'; } } } // legacy: span.hover-show wraps button + .sub-menu.sub-vip-card $html .= ''; $html .= '' . '' . esc_html__('开通会员', 'aksrt') . '' . $hover . ''; } } return $html; } endif;