false, 'message' => ''); $action = sanitize_text_field($_POST['flink_action']); // 以下操作需要管理员权限 if (!$is_admin) { echo json_encode(array('success' => false, 'message' => '权限不足')); exit; } if (!isset($_POST['flink_nonce']) || !wp_verify_nonce($_POST['flink_nonce'], 'argon_flink_manage')) { echo json_encode(array('success' => false, 'message' => '安全验证失败')); exit; } switch ($action) { case 'add': $id = argon_add_friend_link(array( 'name' => isset($_POST['name']) ? $_POST['name'] : '', 'display_name' => isset($_POST['display_name']) ? $_POST['display_name'] : '', 'url' => isset($_POST['url']) ? $_POST['url'] : '', 'avatar' => isset($_POST['avatar']) ? $_POST['avatar'] : '', 'description' => isset($_POST['description']) ? $_POST['description'] : '', 'auto_description' => isset($_POST['auto_description']) ? $_POST['auto_description'] : '', 'category' => isset($_POST['category']) ? $_POST['category'] : '', 'status' => 'approved' )); $response = array('success' => $id !== false, 'id' => $id); break; case 'delete': $id = isset($_POST['id']) ? sanitize_text_field($_POST['id']) : ''; $response = array('success' => argon_delete_friend_link($id)); break; case 'approve': $id = isset($_POST['id']) ? sanitize_text_field($_POST['id']) : ''; $result = argon_update_friend_link($id, array('status' => 'approved')); if ($result) { $link = argon_get_friend_link($id); if ($link && !empty($link['email'])) { $subject = sprintf('[%s] 您的友链申请已通过', get_bloginfo('name')); $message = sprintf("您好!\n\n您申请的友链已通过审核。\n\n网站名称:%s\n网站地址:%s\n\n感谢您的支持!", $link['name'], $link['url']); wp_mail($link['email'], $subject, $message); } } $response = array('success' => $result); break; case 'reject': $id = isset($_POST['id']) ? sanitize_text_field($_POST['id']) : ''; $response = array('success' => argon_delete_friend_link($id)); break; case 'update': $id = isset($_POST['id']) ? sanitize_text_field($_POST['id']) : ''; $data = array(); foreach (array('name', 'display_name', 'url', 'links_page', 'avatar', 'description', 'auto_description', 'category', 'hide_no_backlink', 'auto_approved') as $f) { if (isset($_POST[$f])) $data[$f] = $_POST[$f]; } $response = array('success' => argon_update_friend_link($id, $data)); break; case 'get': $id = isset($_POST['id']) ? sanitize_text_field($_POST['id']) : ''; $link = argon_get_friend_link($id); $response = $link ? array('success' => true, 'data' => $link) : array('success' => false); break; case 'check_backlink': $id = isset($_POST['id']) ? sanitize_text_field($_POST['id']) : ''; $link = argon_get_friend_link($id); if ($link) { $links_page = !empty($link['links_page']) ? $link['links_page'] : ''; $has_backlink = $links_page ? argon_check_backlink($links_page) : null; $accessible = argon_check_site_accessible($link['url']); argon_update_friend_link($id, array('has_backlink' => $has_backlink, 'accessible' => $accessible, 'last_check' => time())); $response = array('success' => true, 'has_backlink' => $has_backlink, 'accessible' => $accessible, 'links_page' => $links_page); } break; case 'check_all': $links = argon_get_friend_links_raw('approved'); $results = array(); foreach ($links as $link) { $links_page = !empty($link['links_page']) ? $link['links_page'] : ''; $has_backlink = $links_page ? argon_check_backlink($links_page) : null; $accessible = argon_check_site_accessible($link['url']); argon_update_friend_link($link['id'], array('has_backlink' => $has_backlink, 'accessible' => $accessible, 'last_check' => time())); $results[$link['id']] = array('has_backlink' => $has_backlink, 'accessible' => $accessible); } $response = array('success' => true, 'results' => $results); break; case 'fetch_info': $url = isset($_POST['url']) ? esc_url_raw($_POST['url']) : ''; if (empty($url)) { $response = array('success' => false, 'message' => __('请输入网址', 'argon')); } else { $info = argon_fetch_site_info($url); $response = array('success' => true, 'data' => $info); } break; default: $response = array('success' => false, 'message' => '未知操作'); } echo json_encode($response); exit; } // 处理访客申请 $apply_result = null; if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['argon_link_apply'])) { $apply_result = argon_handle_link_application_v3($_POST); // PRG 模式:成功后重定向避免表单重复提交 if ($apply_result) { $redirect_url = remove_query_arg(array('apply_success', 'apply_error'), $_SERVER['REQUEST_URI']); if ($apply_result['success']) { wp_redirect($redirect_url . (strpos($redirect_url, '?') !== false ? '&' : '?') . 'apply_success=1'); exit; } else { // 失败时保存错误信息到 session if (!session_id()) session_start(); $_SESSION['flink_apply_error'] = $apply_result['message']; wp_redirect($redirect_url . (strpos($redirect_url, '?') !== false ? '&' : '?') . 'apply_error=1'); exit; } } } // 从 URL 参数或 session 获取申请结果 if (isset($_GET['apply_success'])) { $apply_result = array('success' => true, 'message' => __('申请已提交,请等待审核', 'argon')); } elseif (isset($_GET['apply_error'])) { if (!session_id()) session_start(); $error_msg = isset($_SESSION['flink_apply_error']) ? $_SESSION['flink_apply_error'] : __('申请失败', 'argon'); unset($_SESSION['flink_apply_error']); $apply_result = array('success' => false, 'message' => $error_msg); } // 获取友链数据 $all_approved_links = argon_get_friend_links_raw('approved'); $pending_links = $is_admin ? argon_get_friend_links_raw('pending') : array(); $show_apply_form = get_option('argon_friend_link_allow_apply', 'true') === 'true'; $requirements = get_option('argon_friend_link_requirements', ''); $hide_no_backlink = get_option('argon_friend_link_hide_no_backlink', 'true') === 'true'; // 过滤友链:非管理员时根据设置隐藏未上友链/失效的 $visible_links = array(); foreach ($all_approved_links as $link) { $show = true; if (!$is_admin && $hide_no_backlink) { // 未填写友链页面的永不隐藏 if (!empty($link['links_page'])) { $link_hide = $link['hide_no_backlink'] ?? ''; if ($link_hide === 'hide' || ($link_hide !== 'show' && $hide_no_backlink)) { if (isset($link['has_backlink']) && $link['has_backlink'] === false) $show = false; if (isset($link['accessible']) && $link['accessible'] === false) $show = false; } } } if ($show) $visible_links[] = $link; } // 按分类分组 $links = array(); foreach ($visible_links as $link) { $cat = !empty($link['category']) ? $link['category'] : ''; if (!isset($links[$cat])) $links[$cat] = array(); $links[$cat][] = $link; } $total_links = count($visible_links); // 验证码设置(支持独立配置) $flink_captcha_setting = get_option('argon_friend_link_captcha', 'global'); if ($flink_captcha_setting === 'global' || $flink_captcha_setting === 'same') { // 使用全局设置 $global_captcha = get_option('argon_need_captcha', get_option('argon_comment_need_captcha', 'true')); $captcha_enabled = ($global_captcha === 'true'); } elseif ($flink_captcha_setting === 'enabled') { $captcha_enabled = true; } else { $captcha_enabled = false; } $captcha_type = get_option('argon_captcha_type', 'math'); get_header(); ?>