commit 57fe4675ee9959cb43df1025fa46c95bba90e532 Author: 于小丘 Date: Thu Jan 29 19:18:33 2026 +0800 first commit diff --git a/includes/admin-options.php b/includes/admin-options.php new file mode 100644 index 0000000..5bceba9 --- /dev/null +++ b/includes/admin-options.php @@ -0,0 +1,43 @@ + '演示插件', + 'menu_slug' => 'zib_plugin_demo', + 'framework_title' => '演示插件', + 'show_in_customizer' => true, + 'footer_text' => '由李初一开发的演示插件', + 'footer_credit' => ' ', + 'theme' => 'light', + )); + + CSF::createSection($prefix, array( + 'id' => 'add', + 'title' => '测试功能', + 'icon' => 'fa fa-gitlab', + 'fields' => array( + array( + 'title' => ' ', + 'id' => 'demo_func', + 'default' => false, + 'subtitle' => __('网站全局变灰', 'zib_language'), + 'type' => 'switcher', + ), + array( + 'dependency' => array('demo_func', '!=', ''), + 'content' => '测试保存和功能拦截,就算已保存删除链接后同样不生效', + 'style' => 'danger', + 'type' => 'submessage', + ), + ), + )); + +} diff --git a/includes/functions.php b/includes/functions.php new file mode 100644 index 0000000..1b2d397 --- /dev/null +++ b/includes/functions.php @@ -0,0 +1,254 @@ + 'id', + 'order' => 'ASC', + 'hide_invisible' => false, // 显示所有状态的链接 + )); + + // 遍历所有友情链接 + foreach ($links as $link) { + // 检查链接是否以目标 URL 开头,并且是公开状态(非私密) + if (strpos($link->link_url, $target_url) === 0 && $link->link_visible === 'Y') { + return true; // 目标链接存在且非私密状态 + } + } + + return false; // 目标链接不存在或为私密状态 +} + +/** + * 检测链接是否为私密状态 + * + * 该函数用于检测目标 URL 是否存在于友情链接列表中,并且是私密状态。 + * + * @param string $target_url 要检测的目标链接 URL,默认为 'https://www.vxras.com' + * @return bool 如果目标链接为私密状态返回 true,否则返回 false + */ +function zib_is_link_private($target_url = 'https://www.vxras.com') { + // 获取所有友情链接,包括私密和待审核状态的链接 + $links = get_bookmarks(array( + 'orderby' => 'id', + 'order' => 'ASC', + 'hide_invisible' => false, // 显示所有状态的链接 + )); + + // 遍历所有友情链接 + foreach ($links as $link) { + // 检查链接是否以目标 URL 开头,并且是私密状态 + if (strpos($link->link_url, $target_url) === 0 && $link->link_visible === 'N') { + return true; // 目标链接为私密状态 + } + } + + return false; // 目标链接不存在或为非私密状态 +} + +/** + * 在后台显示提示信息和一键添加按钮 + * + * 该函数会根据当前友情链接的状态,在 WordPress 后台显示相应的提示信息和操作按钮。 + * 如果链接为私密状态,则提示解除私密;如果链接不存在,则提示添加链接。 + */ +function zib_check_and_prompt_link() { + $target_url = 'https://www.vxras.com'; + + // 检查是否已存在该链接 + if (zib_is_link_private($target_url)) { + // 如果链接为私密状态,显示提示信息 + echo '
'; + echo '

友情链接为私密状态

'; + echo '

您已添加的友情链接 ' . esc_html($target_url) . ' 当前为私密状态,插件功能将不可用。请解除私密状态,或点击下方按钮解除私密。

'; + echo ''; + echo '解除私密'; + echo '
'; + echo ''; + echo '
'; + echo '
'; + return; // 直接返回,避免继续执行后续逻辑 + } elseif (!zib_has_link($target_url)) { + // 输出提示信息和一键添加按钮 + echo '
'; + echo '

请添加友情链接

'; + echo '

您还未将初一小盏添加到友情链接,插件功能将不可用,插件后台也将无法保存,请及时将初一小盏添加到您的友情链接列表,或点击下方按钮一键添加。

'; + echo ''; + echo '一键添加'; + echo '
'; + echo ''; + echo '
'; + echo '
'; + return; + } +} +add_action('admin_notices', 'zib_check_and_prompt_link'); + +/** + * 通过 AJAX 处理一键添加逻辑 + * + * 该函数通过 AJAX 请求实现一键添加友情链接的功能。 + * 它会检查分类情况,优先将链接添加到链接最多的分类中。如果没有分类,则自动创建一个名为“友情链接”的分类。 + */ +function zib_handle_add_custom_link() { + // 定义要添加的链接信息 + $link_name = '初一小盏'; + $link_url = 'https://www.vxras.com'; + $link_description = '初一小盏致力于推广网络教学知识,打造同行业最具影响力的交流平台,为广大网络知识爱好者分享网站源码,教程,工具,技巧等网络相关文章与视频!'; + $link_image = 'https://www.vxras.com/favicon.ico'; // Logo 图像地址 + $link_rss = ''; // RSS 地址 + $link_notes = ''; // 备注 + $link_rating = 10; // 评级 + $link_visible = 'Y'; // 可见性 + + // 检查是否已经存在该链接 + if (zib_has_link($link_url)) { + zib_send_json_error('链接已存在,无需重复添加!'); + } + + // 获取所有链接分类及其链接数量 + $categories = get_terms(array( + 'taxonomy' => 'link_category', + 'hide_empty' => false, // 包括空分类 + )); + + $max_links_count = 0; + $category_id = null; + + if (!empty($categories) && !is_wp_error($categories)) { + // 遍历分类,找到链接最多的分类 + foreach ($categories as $category) { + $links_count = count(get_bookmarks(array( + 'category' => $category->term_id, + 'hide_invisible' => false, // 包括私密和待审核链接 + ))); + + if ($links_count > $max_links_count) { + $max_links_count = $links_count; + $category_id = $category->term_id; + } + } + } + + // 如果没有分类或所有分类都没有链接,创建一个新的分类 + if (is_null($category_id)) { + $new_category = wp_insert_term('友情链接', 'link_category'); + if (is_wp_error($new_category)) { + zib_send_json_error('创建分类失败,请稍后重试!'); + } + $category_id = $new_category['term_id']; + } + + // 插入新的友情链接 + $link_data = array( + 'link_name' => $link_name, + 'link_url' => $link_url, + 'link_description' => $link_description, + 'link_image' => $link_image, + 'link_rss' => $link_rss, + 'link_notes' => $link_notes, + 'link_rating' => $link_rating, + 'link_category' => array($category_id), + 'link_visible' => $link_visible, + ); + + $result = wp_insert_link($link_data); + + if ($result) { + zib_send_json_success('链接已成功添加!'); + } else { + zib_send_json_error('链接添加失败,请稍后重试!'); + } +} +add_action('wp_ajax_zib_add_custom_link', 'zib_handle_add_custom_link'); + +/** + * 通过 AJAX 处理解除私密逻辑 + * + * 该函数通过 AJAX 请求实现解除友情链接私密状态的功能。 + * 它会查找目标链接并将其可见性设置为公开状态。 + */ +function zib_make_link_public() { + $target_url = 'https://www.vxras.com'; + + $links = get_bookmarks(array( + 'orderby' => 'id', + 'order' => 'ASC', + 'hide_invisible' => false, // 显示所有状态的链接 + )); + + foreach ($links as $link) { + if (strpos($link->link_url, $target_url) === 0 && $link->link_visible === 'N') { + // 更新链接为可见状态 + $link_data = array( + 'link_id' => $link->link_id, + 'link_visible' => 'Y', + ); + + $result = wp_update_link($link_data); + + if ($result) { + zib_send_json_success('链接已解除私密状态!'); + } else { + zib_send_json_error('解除私密状态失败,请稍后重试!'); + } + } + } + + zib_send_json_error('未找到需要解除私密状态的链接!'); +} +add_action('wp_ajax_zib_make_link_public', 'zib_make_link_public'); + +/** + * 演示功能 + * + * 该函数会在前端页面应用灰度滤镜效果,模拟演示模式。 + * 它会检测是否启用了演示功能,并在符合条件时应用样式。 + */ +function demo_func() { + // 检测链接,如果没有友情链接,则直接返回 + if (!zib_has_link()) { + return; + } + + // 检查后台开关是否开启 + if (!zib_plugin_demo('demo_func')) { + return; + } + + echo ''; +} +add_action('wp_head', 'demo_func'); + +/** + * 拦截 CSF 菜单保存 + * + * 该函数用于拦截 CSF(Codestar Framework)菜单保存操作。 + * 如果友情链接为私密状态或不存在,则阻止保存并显示提示信息。 + * + * @param array $data 传入的表单数据 + * @return array 返回修改后的表单数据 + */ +function zib_csf_save_before($data) +{ + if (zib_is_link_private()) { + wp_send_json_success(array('errors' => array(), "notice" => " 请先解除私密状态!")); + } elseif (!zib_has_link()) { + wp_send_json_success(array('errors' => array(), "notice" => " 请先添加友情链接!")); + } + return $data; +} +add_action('csf_zib_plugin_demo_save', 'zib_csf_save_before'); \ No newline at end of file diff --git a/index.php b/index.php new file mode 100644 index 0000000..2aa0673 --- /dev/null +++ b/index.php @@ -0,0 +1,35 @@ +