/** * Plugin Name: WP文章自动刷新插件 * Plugin URI: https://www.imwpweb.com/ * Description: 真正意义上的文章翻新插件,模拟手工重新发布,让老旧文章重新获得搜索引擎青睐,提升网站流量 * Version: 1.0.0 * Author: IMWPWEB * Author URI: https://www.imwpweb.com/ * Text Domain: wp-article-refresh * Domain Path: /languages * License: GPL v2 or later */ if (!defined('ABSPATH')) { exit; } // 插件常量定义 define('WP_ARTICLE_REFRESH_VERSION', '1.0.0'); define('WP_ARTICLE_REFRESH_PLUGIN_DIR', plugin_dir_path(__FILE__)); define('WP_ARTICLE_REFRESH_PLUGIN_URL', plugin_dir_url(__FILE__)); /** * 主插件类 */ class WP_Article_Refresh { /** * 单例实例 */ private static $instance = null; /** * 获取单例实例 */ public static function get_instance() { if (null === self::$instance) { self::$instance = new self(); } return self::$instance; } /** * 构造函数 */ private function __construct() { // 注册激活/停用钩子 register_activation_hook(__FILE__, array($this, 'activate')); register_deactivation_hook(__FILE__, array($this, 'deactivate')); // 初始化插件 add_action('init', array($this, 'init')); // 添加定时任务钩子 add_action('wp_article_refresh_event', array($this, 'do_refresh')); } /** * 插件激活 */ public function activate() { // 设置默认选项 $default_options = array( 'enabled' => 1, 'refresh_interval' => 60, // 分钟 'days_range' => 365, // 1年内 'daily_limit' => 10, // 每天最多翻新10篇 'time_window_start' => '00:00', 'time_window_end' => '23:59', 'categories' => array(), // 空数组表示所有分类 'exclude_categories' => array(), 'refresh_mode' => 'today', // today:今天, random:随机前几天, gradual:逐渐递增 'refreshed_today' => 0, 'last_refresh_date' => date('Y-m-d'), 'total_refreshed' => 0 ); if (!get_option('wp_article_refresh_options')) { add_option('wp_article_refresh_options', $default_options); } // 设置定时任务 if (!wp_next_scheduled('wp_article_refresh_event')) { wp_schedule_event(time(), 'wp_article_refresh_interval', 'wp_article_refresh_event'); } // 刷新重写规则 flush_rewrite_rules(); } /** * 插件停用 */ public function deactivate() { // 清除定时任务 wp_clear_scheduled_hook('wp_article_refresh_event'); // 刷新重写规则 flush_rewrite_rules(); } /** * 初始化插件 */ public function init() { // 加载文本域 load_plugin_textdomain('wp-article-refresh', false, dirname(plugin_basename(__FILE__)) . '/languages'); // 添加自定义定时间隔 add_filter('cron_schedules', array($this, 'add_cron_interval')); // 添加管理菜单 add_action('admin_menu', array($this, 'add_admin_menu')); // 注册AJAX处理 add_action('wp_ajax_wp_article_refresh', array($this, 'handle_ajax')); // 添加设置链接 add_filter('plugin_action_links_' . plugin_basename(__FILE__), array($this, 'add_settings_link')); // 加载前端资源(仅在插件页面加载) add_action('admin_enqueue_scripts', array($this, 'enqueue_assets')); } /** * 添加自定义Cron间隔 */ public function add_cron_interval($schedules) { $options = get_option('wp_article_refresh_options'); $interval = isset($options['refresh_interval']) ? $options['refresh_interval'] : 60; $schedules['wp_article_refresh_interval'] = array( 'interval' => $interval * 60, 'display' => sprintf(__('每 %d 分钟', 'wp-article-refresh'), $interval) ); return $schedules; } /** * 添加管理菜单 */ public function add_admin_menu() { add_menu_page( __('文章自动刷新', 'wp-article-refresh'), __('文章刷新', 'wp-article_refresh'), 'manage_options', 'wp-article-refresh', array($this, 'render_admin_page'), 'dashicons-update', 30 ); } /** * 渲染管理页面 */ public function render_admin_page() { // 处理表单提交 if (isset($_POST['wp_article_refresh_nonce']) && wp_verify_nonce($_POST['wp_article_refresh_nonce'], 'wp_article_refresh_save')) { $this->save_options(); echo '

' . __('设置已保存!', 'wp-article-refresh') . '

'; } // 处理手动刷新 if (isset($_POST['wp_article_refresh_manual']) && wp_verify_nonce($_POST['wp_article_refresh_manual_nonce'], 'wp_article_refresh_manual')) { $result = $this->do_refresh(); if ($result) { echo '

' . sprintf(__('成功刷新了 %d 篇文章!', 'wp-article-refresh'), $result) . '

'; } else { echo '

' . __('没有找到符合条件的文章或已达今日上限!', 'wp-article-refresh') . '

'; } } $options = get_option('wp_article_refresh_options'); $stats = $this->get_statistics(); $categories = get_categories(array('hide_empty' => false)); include WP_ARTICLE_REFRESH_PLUGIN_DIR . 'templates/admin-page.php'; } /** * 保存设置选项 */ private function save_options() { $options = array( 'enabled' => isset($_POST['enabled']) ? 1 : 0, 'refresh_interval' => absint($_POST['refresh_interval']), 'days_range' => absint($_POST['days_range']), 'daily_limit' => absint($_POST['daily_limit']), 'time_window_start' => sanitize_text_field($_POST['time_window_start']), 'time_window_end' => sanitize_text_field($_POST['time_window_end']), 'categories' => isset($_POST['categories']) ? array_map('absint', $_POST['categories']) : array(), 'exclude_categories' => isset($_POST['exclude_categories']) ? array_map('absint', $_POST['exclude_categories']) : array(), 'refresh_mode' => sanitize_text_field($_POST['refresh_mode']), 'refreshed_today' => isset($_POST['reset_count']) ? 0 : get_option('wp_article_refresh_options', array()) ); // 获取之前的设置 $prev_options = get_option('wp_article_refresh_options', array()); $options['refreshed_today'] = isset($prev_options['refreshed_today']) ? $prev_options['refreshed_today'] : 0; $options['last_refresh_date'] = isset($prev_options['last_refresh_date']) ? $prev_options['last_refresh_date'] : date('Y-m-d'); $options['total_refreshed'] = isset($prev_options['total_refreshed']) ? $prev_options['total_refreshed'] : 0; update_option('wp_article_refresh_options', $options); // 重新设置定时任务 wp_clear_scheduled_hook('wp_article_refresh_event'); if ($options['enabled']) { wp_schedule_event(time(), 'wp_article_refresh_interval', 'wp_article_refresh_event'); } } /** * 执行文章刷新 */ public function do_refresh() { $options = get_option('wp_article_refresh_options'); // 检查插件是否启用 if (!$options['enabled']) { return 0; } // 检查时间窗口 $current_time = current_time('H:i'); if ($current_time < $options['time_window_start'] || $current_time > $options['time_window_end']) { return 0; } // 重置每日计数 $today = date('Y-m-d'); if ($options['last_refresh_date'] !== $today) { $options['refreshed_today'] = 0; $options['last_refresh_date'] = $today; } // 检查每日限制 if ($options['refreshed_today'] >= $options['daily_limit']) { return 0; } // 获取符合条件的文章 $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'posts_per_page' => $options['daily_limit'] - $options['refreshed_today'], 'date_query' => array( 'before' => date('Y-m-d H:i:s', strtotime('-1 day')), 'after' => date('Y-m-d H:i:s', strtotime('-' . $options['days_range'] . ' days')) ), 'orderby' => 'rand', 'no_found_rows' => true ); // 分类筛选 if (!empty($options['categories'])) { $args['category__in'] = $options['categories']; } if (!empty($options['exclude_categories'])) { $args['category__not_in'] = $options['exclude_categories']; } $query = new WP_Query($args); $refreshed = 0; if ($query->have_posts()) { foreach ($query->posts as $post) { // 更新文章日期 $new_date = $this->calculate_new_date($post->post_date, $options['refresh_mode']); wp_update_post(array( 'ID' => $post->ID, 'post_date' => $new_date, 'post_date_gmt' => get_gmt_from_date($new_date), 'post_modified' => current_time('mysql'), 'post_modified_gmt' => current_time('mysql', 1) )); // 清理缓存 clean_post_cache($post->ID); $refreshed++; } wp_reset_postdata(); } // 更新统计 $options['refreshed_today'] += $refreshed; $options['total_refreshed'] += $refreshed; update_option('wp_article_refresh_options', $options); return $refreshed; } /** * 计算新日期 */ private function calculate_new_date($original_date, $mode) { $original = strtotime($original_date); $now = time(); switch ($mode) { case 'today': // 设置为今天 return date('Y-m-d H:i:s', time()); case 'random': // 随机1-7天前 $random_days = wp_rand(1, 7); $new_time = strtotime("-{$random_days} days"); return date('Y-m-d H:i:s', $new_time); case 'gradual': // 逐渐递增(基于原日期递减) $days_diff = floor(($now - $original) / 86400); if ($days_diff > 7) { $new_time = strtotime('-7 days'); } else { $new_time = $original + 86400; // 往后推一天 } return date('Y-m-d H:i:s', $new_time); default: return date('Y-m-d H:i:s', time()); } } /** * 获取统计信息 */ public function get_statistics() { $options = get_option('wp_article_refresh_options'); // 统计文章总数 $total_posts = wp_count_posts('post'); // 统计符合条件的文章数量 $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'date_query' => array( 'before' => date('Y-m-d H:i:s', strtotime('-1 day')), 'after' => date('Y-m-d H:i:s', strtotime('-' . $options['days_range'] . ' days')) ), 'no_found_rows' => true ); if (!empty($options['categories'])) { $args['category__in'] = $options['categories']; } if (!empty($options['exclude_categories'])) { $args['category__not_in'] = $options['exclude_categories']; } $query = new WP_Query($args); $eligible_posts = $query->found_posts; return array( 'total_posts' => $total_posts->publish, 'eligible_posts' => $eligible_posts, 'refreshed_today' => $options['refreshed_today'], 'daily_limit' => $options['daily_limit'], 'total_refreshed' => $options['total_refreshed'], 'is_enabled' => $options['enabled'], 'next_refresh' => wp_next_scheduled('wp_article_refresh_event') ? date('Y-m-d H:i:s', wp_next_scheduled('wp_article_refresh_event')) : __('未设置', 'wp-article-refresh') ); } /** * 处理AJAX请求 */ public function handle_ajax() { if (!current_user_can('manage_options') || !wp_verify_nonce($_POST['nonce'], 'wp_article_refresh_ajax')) { wp_die(__('无权限', 'wp-article-refresh')); } $action = sanitize_text_field($_POST['sub_action']); switch ($action) { case 'get_stats': $stats = $this->get_statistics(); wp_send_json_success($stats); break; case 'refresh_now': $result = $this->do_refresh(); wp_send_json_success(array('refreshed' => $result)); break; default: wp_send_json_error(__('未知操作', 'wp-article-refresh')); } } /** * 添加设置链接 */ public function add_settings_link($links) { $settings_link = '' . __('设置', 'wp-article-refresh') . ''; array_unshift($links, $settings_link); return $links; } /** * 加载资源文件 */ public function enqueue_assets($hook) { if ('toplevel_page_wp-article-refresh' !== $hook) { return; } wp_enqueue_style('wp-article-refresh-admin', WP_ARTICLE_REFRESH_PLUGIN_URL . 'assets/css/admin.css', array(), WP_ARTICLE_REFRESH_VERSION); wp_enqueue_script('wp-article-refresh-admin', WP_ARTICLE_REFRESH_PLUGIN_URL . 'assets/js/admin.js', array('jquery'), WP_ARTICLE_REFRESH_VERSION, true); wp_localize_script('wp-article-refresh-admin', 'wpArticleRefresh', array( 'ajaxUrl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('wp_article_refresh_ajax'), 'strings' => array( 'confirm' => __('确定要手动刷新吗?', 'wp-article-refresh'), 'refreshing' => __('刷新中...', 'wp-article-refresh'), 'success' => __('刷新成功!', 'wp-article-refresh'), 'error' => __('刷新失败!', 'wp-article-refresh') ) )); } } // 初始化插件 WP_Article_Refresh::get_instance(); // 创建模板目录 function wp_article_refresh_create_templates_dir() { $dir = WP_ARTICLE_REFRESH_PLUGIN_DIR . 'templates'; if (!file_exists($dir)) { mkdir($dir, 0755, true); } } add_action('admin_init', 'wp_article_refresh_create_templates_dir'); Go语言如何解析JSON中类型不定的“result”字段?_创想鸟

Go语言如何解析JSON中类型不定的“result”字段?

go语言如何解析json中类型不定的“result”字段?

Go语言高效解析JSON中类型不确定“result”字段

本文介绍如何使用Go语言解析JSON数据中类型不确定的“result”字段。该字段可能包含不同类型的数据,例如数组或其他复杂结构。为了应对这种不确定性,我们需要利用Go语言的interface{}类型。

首先,编写一个函数,该函数接收JSON字符串并使用interface{}解析“result”字段:

import (    "encoding/json")func parseJSON(jsonString string) (map[string]interface{}, error) {    var data map[string]interface{}    err := json.Unmarshal([]byte(jsonString), &data)    if err != nil {        return nil, err    }    return data, nil}

接下来,调用parseJSON函数解析JSON字符串,并访问“result”字段:

立即学习“go语言免费学习笔记(深入)”;

data, err := parseJSON(jsonString)if err != nil {    // 处理错误}result := data["result"]

由于result的类型为interface{},我们需要根据预期类型进行类型断言:

if resultArray, ok := result.([]interface{}); ok {    for _, val := range resultArray {        switch valType := val.(type) {        case int:            fmt.Println("整数:", valType)        case string:            fmt.Println("字符串:", valType)        case float64:            fmt.Println("浮点数:", valType)        case bool:            fmt.Println("布尔值:", valType)        case map[string]interface{}:            fmt.Println("对象:", valType) //处理嵌套对象        default:            fmt.Println("未知类型:", valType)        }    }}

通过这种方法,我们可以灵活地处理“result”字段中各种类型的数据,从而实现对JSON数据的高效解析。 记得根据实际情况添加更多类型判断,例如float64bool以及其他自定义类型。 对于嵌套对象,可以使用递归调用parseJSON函数进行处理。

以上就是Go语言如何解析JSON中类型不定的“result”字段?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1383111.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
GoLand编辑器中的插入模式是什么?如何切换GoLand的插入模式和正常模式?
上一篇 2025年12月15日 02:55:53
Xorm中如何解决字段隐藏后无法提交的问题?
下一篇 2025年12月15日 02:56:02

相关推荐

  • Bear 博客上的浅色/深色模式分步指南

    我最近使用偏好颜色方案媒体功能与 light-dark() 颜色函数相结合,在我的 bear 博客上实现了亮/暗模式切换。 我是这样做的。 第 1 步:设置 css css 在过去几年中获得了一些很酷的新功能,包括 light-dark() 颜色函数。此功能可让您为任何元素指定两种颜色 &#8211…

    2025年12月24日
    400
  • 利用CSS3编写类似iOS中的复选框及带开关的按钮的代码

    这篇文章主要介绍了使用css3编写类似ios中的复选框及带开关的按钮,需要的朋友可以参考下 checkbox多选 最近写了一个适合移动端的checkbox,如图: ps:中间的勾勾是iconfont,iOS风格的。 具体的HTML: 立即学习“前端免费学习笔记(深入)”; 默认未选中 默认选中 橘黄…

    2025年12月24日
    700
  • HTML如何实现条件判断_JavaScript逻辑控制应用【解析】

    JavaScript提供五种条件判断方法:一、if语句基础分支;二、if-else if-else多条件选择;三、switch匹配离散值;四、三元运算符简化单层赋值;五、逻辑运算符组合复杂条件。 如果您在HTML页面中需要根据特定条件动态显示内容或执行不同操作,则必须借助JavaScript来实现逻…

    2025年12月23日
    300
  • html如何写点击代码_编写HTML元素点击事件代码【事件】

    为HTML元素添加点击响应功能有五种方法:一、内联onclick属性;二、getElementById结合addEventListener;三、事件委托;四、JavaScript中直接赋值onclick;五、结合data属性实现多态响应。 如果您希望为HTML元素添加点击响应功能,则需要通过Java…

    2025年12月23日
    200
  • HTML如何实现图像替换_图文切换技术解析【方法】

    实现图像与文字动态切换有五种方法:一、CSS伪元素与属性选择器;二、JavaScript动态innerHTML替换;三、CSS类名切换配合display控制;四、picture元素响应式切换;五、Canvas绘制切换。 如果您希望在网页中实现图像与文字内容的动态切换,例如点击按钮后图片变为文字描述,…

    2025年12月23日
    000
  • 动态加载HTML头部资源URL指南

    本文旨在提供在html文档头部动态加载css和javascript资源的全面指南,特别关注如何根据`localstorage`变量等动态条件加载不同文件。文章将从解决`document.write`中模板字符串的正确使用方法入手,进而深入探讨更健壮、推荐的dom操作方法(如`document.cre…

    2025年12月23日
    300
  • html如何实现计算器_用HTML与JS实现计算器功能【功能】

    可通过纯HTML与JavaScript实现具备四则运算功能的计算器:构建语义化HTML结构,绑定事件处理点击逻辑,封装安全计算函数,支持键盘输入,并实现连续运算。 如果您希望在网页中嵌入一个具备基础四则运算功能的计算器,可以通过纯 HTML 结构配合 JavaScript 逻辑来实现。以下是构建该计…

    2025年12月23日
    000
  • 自定义HTML 控件:解决键盘事件冲突与精确控制播放

    控件:解决键盘事件冲突与精确控制播放” /> 本文深入探讨了如何自定义HTML “ 元素的默认键盘控制行为,特别是针对左右箭头键的播放时间调整。我们将解释为何单独使用 `event.preventDefault()` 可能无法完全阻止浏览器默认行为,并引入 `event.stop…

    2025年12月23日
    000
  • Angular HTTP POST后GET请求不立即更新数据的异步处理策略

    在angular应用中,当执行http post请求后立即尝试通过http get请求刷新数据时,可能会遇到视图未更新的问题。这通常是由于http请求的异步特性导致的时序问题。本文将深入探讨这一现象的根本原因,并提供一个标准且可靠的解决方案:将get请求嵌套在post请求的`subscribe`回调…

    2025年12月23日
    000
  • 覆盖HTML视频播放器默认控制:深入理解事件处理与自定义快进/快退

    本教程详细讲解如何自定义HTML视频播放器的默认键盘控制行为,特别是左右方向键的快进/快退功能。文章阐明了`event.preventDefault()`和`event.stopPropagation()`在事件处理中的关键作用,并通过代码示例展示如何正确组合使用它们,以避免自定义逻辑与浏览器默认行…

    2025年12月23日
    000
  • 根据文本内容动态改变元素背景色:JavaScript教程

    本教程详细介绍了如何使用javascript,在网页加载时遍历特定html元素(如`div`标签),并根据其内部文本内容动态设置背景颜色。通过示例代码,您将学习如何获取元素集合、判断文本状态并应用相应的样式,从而提升页面内容的视觉表达力。 在网页开发中,根据元素内部的文本内容来动态调整其视觉样式是一…

    2025年12月23日
    000
  • JavaScript中数值输入字段的重置与常见函数命名冲突解析

    本文详细介绍了在javascript中如何有效地重置类型为`number`的输入字段,并深入探讨了因函数命名与javascript内置函数冲突而导致重置功能失效的常见问题。通过实际代码示例,文章提供了避免此类冲突的最佳实践,确保输入字段清空功能的正确实现,帮助开发者编写更健壮的web应用。 在构建交…

    2025年12月23日
    300
  • 自定义HTML视频控件:精确控制键盘快进/快退行为

    本教程详细讲解如何自定义HTML “ 元素的默认键盘控制行为,特别是左右箭头键的视频快进/快退步长。文章指出,仅使用 `event.preventDefault()` 不足以完全阻止浏览器默认行为,还需要结合 `event.stopPropagation()` 来确保自定义逻辑独立生效,从而实现精…

    2025年12月23日
    000
  • Angular HTTP POST后GET请求不立即生效问题解析与最佳实践

    本文深入探讨了angular应用中http post请求完成后,立即执行get请求却无法获取最新数据的常见问题。核心原因在于http请求的异步特性,get请求在post请求完成并更新后端数据之前就被触发。文章提供了将get请求置于post请求的`subscribe`回调中的解决方案,并介绍了利用rx…

    2025年12月23日
    000
  • 根据文本内容动态设置元素背景色的JavaScript教程

    本教程旨在详细讲解如何使用javascript动态地根据html元素(如`div`标签)的文本内容来改变其背景颜色。文章将通过具体的代码示例,展示如何获取特定类的所有元素、遍历它们,并根据其内部文本值应用不同的样式,最终实现在页面加载时自动执行此功能,从而提升网页的交互性和信息展示能力。 概述 在网…

    2025年12月23日
    000
  • JavaScript中重置数字输入框:避免命名冲突的实用指南

    本文探讨了在javascript中重置`type=”number”`类型输入字段时遇到的一个常见问题及其解决方案。当自定义函数与javascript内置函数同名(如`clear()`)时,会导致意料之外的行为。教程将指导开发者如何通过重命名函数来避免此类命名冲突,并提供正确的…

    2025年12月23日
    200
  • React Router实现登录后页面重定向:useHistory 实战指南

    本教程详细介绍了如何在react应用中使用react router的`usehistory` hook实现用户登录后的页面重定向。通过构建一个简单的登录组件和配置应用路由,我们将演示如何利用`history.push()`方法,在用户成功认证后,自动导航到指定的首页或其他目标页面,从而提供流畅的用户…

    2025年12月23日
    000
  • 如何解决DOM中innerText末尾空格被忽略的问题

    如何解决DOM中innerText末尾空格被忽略的问题如何解决DOM中innerText末尾空格被忽略的问题如何解决DOM中innerText末尾空格被忽略的问题如何解决DOM中innerText末尾空格被忽略的问题

    当在DOM元素中使用`innerText`设置内容时,末尾的空格可能会被浏览器默认忽略,导致显示效果不符合预期,尤其在需要精确控制文本间距的场景(如计算器显示)。本文将详细介绍这一常见问题及其解决方案,通过应用CSS属性`white-space: pre`来强制保留所有空白字符,并优化相关JavaS…

    2025年12月23日 用户投稿
    000
  • JavaScript中重置数值型输入字段的正确方法与常见陷阱

    本文深入探讨了在javascript中重置数值型(type=”number”)输入字段的正确方法,并着重分析了一个常见的陷阱:函数命名冲突。通过一个实际的计算器应用示例,文章揭示了使用clear()作为自定义函数名可能导致的问题,因为它与浏览器内置函数冲突。文章提供了解决方案…

    2025年12月23日
    000
  • JavaScript实现多币种价格转换教程

    本教程详细讲解如何使用JavaScript实现多币种价格转换功能。文章将涵盖从远程API获取汇率数据、处理页面上多个价格元素的转换,以及如何避免重复转换导致的错误。核心在于利用`querySelectorAll`选取所有相关元素,并维护原始价格值以确保每次转换都基于准确的初始数据,从而实现稳定、准确…

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信