__('订阅计划', 'yoone-subscriptions'), 'target' => 'yoone_subscriptions_data', 'class' => array('show_if_simple', 'show_if_variable'), 'priority' => 80, ); return $tabs; } /** * 渲染面板内容 */ public function render_panel() { global $post; $product = wc_get_product($post->ID); $cfg = Yoone_Subscriptions::get_config($product); wp_nonce_field('yoone_subscriptions_save', 'yoone_subscriptions_nonce'); echo ''; } /** * 保存订阅配置 */ public function save_meta($post_id) { if (! isset($_POST['yoone_subscriptions_nonce']) || ! wp_verify_nonce($_POST['yoone_subscriptions_nonce'], 'yoone_subscriptions_save')) { return; // 安全验证失败 } if (! current_user_can('edit_post', $post_id)) return; $enabled = isset($_POST['yoone_sub_enabled']) && 'yes' === $_POST['yoone_sub_enabled']; $period = isset($_POST['yoone_sub_period']) ? sanitize_text_field($_POST['yoone_sub_period']) : 'month'; $qty = isset($_POST['yoone_sub_qty_default']) ? absint($_POST['yoone_sub_qty_default']) : 1; $price = isset($_POST['yoone_sub_price']) ? wc_clean($_POST['yoone_sub_price']) : ''; $onetime = isset($_POST['yoone_sub_allow_onetime']) && 'yes' === $_POST['yoone_sub_allow_onetime']; $period = in_array($period, array('month','year'), true) ? $period : 'month'; $qty = max(1, $qty); $price_v = ($price === '' ? '' : wc_format_decimal($price, 2)); update_post_meta($post_id, Yoone_Subscriptions::META_ENABLED, $enabled ? '1' : ''); update_post_meta($post_id, Yoone_Subscriptions::META_PERIOD, $period); update_post_meta($post_id, Yoone_Subscriptions::META_QTY_DEFAULT, $qty); if ($price_v === '') { delete_post_meta($post_id, Yoone_Subscriptions::META_PRICE); } else { update_post_meta($post_id, Yoone_Subscriptions::META_PRICE, $price_v); } update_post_meta($post_id, Yoone_Subscriptions::META_ALLOW_ONETIME, $onetime ? '1' : ''); } }