/**
* 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');
根据用户角色动态显示导航栏页面_创想鸟
创想鸟 首页用户投稿
根据用户角色动态显示导航栏页面
程序猿
•
2025年12月11日 09:12:15
•
用户投稿 •
阅读 0
本文将详细介绍如何在PHP应用程序中,根据用户的角色动态地显示或隐藏导航栏中的特定页面链接。正如摘要所说,通过条件判断,我们可以轻松实现不同用户拥有不同的导航菜单,从而达到权限控制的目的。
实现原理
核心思想是在生成导航栏HTML代码时,根据用户的角色进行判断,决定是否包含某些特定的导航链接。这通常涉及到以下几个步骤:
获取用户角色: 从Session、数据库或其他方式获取当前登录用户的角色信息。条件判断: 使用if…elseif…else语句或类似结构,根据用户角色决定要显示的导航链接。动态生成HTML: 根据条件判断的结果,动态生成相应的HTML代码,并将其包含在导航栏中。
代码示例
假设我们已经成功获取了用户的角色信息,并将其存储在$_SESSION[‘user_role’]中。现在,我们可以使用以下代码来动态生成导航栏:
在这个例子中,只有当$_SESSION[‘user_role’]的值为admin时,才会显示admin_page.php 的链接。其他用户将看不到这个链接。
更复杂的场景
如果需要根据多个角色显示不同的导航链接,可以使用elseif语句:
在这个例子中,管理员可以看到admin_page.php的链接,编辑可以看到editor_page.php的链接,而其他用户都看不到这两个链接。
注意事项
安全性: 仅仅隐藏导航链接并不能完全保证安全性。务必在服务器端对用户权限进行验证,防止用户通过直接访问URL绕过权限控制。用户体验: 确保用户能够理解为什么 他们看不到某些链接。可以提供适当的提示信息,例如“您没有权限访问此页面”。代码维护: 当角色和权限变得复杂时,建议将权限控制逻辑提取到单独的函数或类中,以提高代码的可维护性。Session管理: 确保正确地启动和管理Session,以便能够正确地获取用户角色信息。
总结
通过使用条件判断语句,我们可以轻松地实现根据用户角色动态显示导航栏页面。这是一种简单而有效的方法,可以帮助我们构建更安全、更用户友好的Web应用程序。记住,客户端的隐藏只是第一步,服务器端的权限验证 才是关键。
以上就是根据用户角色动态显示导航栏页面的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1293569.html
赞 (0)
打赏
微信扫一扫
支付宝扫一扫
根据用户角色动态显示导航栏内容
上一篇
2025年12月11日 09:12:08
基于用户角色动态显示导航栏页面
下一篇
2025年12月11日 09:12:22
相关推荐
CSS mask属性无法获取图片 在使用CSS mask属性时,可能会遇到无法获取指定照片的情况。这个问题通常表现为: 网络面板中没有请求图片:尽管CSS代码中指定了图片地址,但网络面板中却找不到图片的请求记录。 问题原因: 此问题的可能原因是浏览器的兼容性问题。某些较旧版本的浏览器可能不支持CSS…
网页中使用本地字体 本文将解答如何将本地安装字体应用到网页中,避免使用 src 属性直接引入字体文件。 问题: 想要在网页上使用已安装的“荆南麦圆体”字体,但 css 代码中将其置于第一位的“font-family”属性,页面仍显示“微软雅黑”字体。 立即学习“前端免费学习笔记(深入)”; 答案: …
特定 DIV 无法显示:用户代理样式表的困扰 当你在 Edge 浏览器中打开项目中的某个 div 时,却发现它无法正常显示,仔细检查样式后,发现是由用户代理样式表中的 display none 引起的。但你疑问的是,为什么会出现这样的样式表,而且只针对特定的 div? 背后的原因 用户代理样式表是由…
inline-block元素错位背后的原因 inline-block元素是一种特殊类型的块级元素,它可以与其他元素行内排列。但是,在某些情况下,inline-block元素可能会出现错位显示的问题。 错位的原因 当inline-block元素设置了overflow:hidden属性时,它会影响元素的…
解决 css mask 属性未请求图片的问题 在使用 css mask 属性时,指定了图片地址,但网络面板显示未请求获取该图片,这可能是由于浏览器兼容性问题造成的。 问题 如下代码所示: 立即学习“前端免费学习笔记(深入)”; icon [data-icon=”cloud”] { –icon-cl…
inline-block 元素错位成因剖析 在使用 inline-block 元素时,可能会遇到它们错位显示的问题。如代码 demo 所示,当设置了 overflow 属性时,a 标签就会错位下沉,而未设置时却不会。 问题根源: overflow:hidden 属性影响了 inline-block …
css 设置元素放大效果的疑问解答 原提问者在尝试给元素添加 10em 字体大小和过渡效果后,未能在进入页面时看到放大效果。探究发现,原提问者将 CSS 代码直接写在页面中,导致放大效果无法触发。 解决办法如下: 将 CSS 样式写在一个单独的文件中,并使用 标签引入该样式文件。这个操作与原提问者观…
元素设置 em 和 transition 后不放大 一个 youtube 视频中展示了设置 em 和 transition 的元素在页面加载后会放大,但同样的代码在提问者电脑上没有达到预期效果。 可能原因: 问题在于 css 代码的位置。在视频中,css 被放置在单独的文件中并通过 link 标签引…
width:100%在父元素为inline或inline-block下的显示问题 问题提出 当父元素为inline或inline-block时,内部元素设置width:100%会出现不同的显示效果。以代码为例: 测试内容 这是inline-block span 效果1:父元素为inline-bloc…
从零开始学习CSS,掌握网页基本框架制作技巧 前言: 在现今互联网时代,网页设计和开发是一个非常重要的技能。而学习CSS(层叠样式表)是掌握网页设计的关键之一。CSS不仅可以为网页添加样式和布局,还可以为用户呈现独特且具有吸引力的页面效果。在本文中,我将为您介绍一些基本的CSS知识,以及一些常用的代…
在当今数字时代,互联网成为了人们生活中不可或缺的一部分。作为互联网的基本构成单位,网页承载着我们获取和分享信息的重要任务。而网页开发作为一门独特的技术,离不开一些必备的语言。本文将揭秘Web标准涵盖的语言,让我们一起了解网页开发所需的语言范围。 首先,HTML(HyperText Markup La…
Web标准中的语言大揭秘:掌握网页开发所需的语言有哪些? 随着互联网的快速发展,网页开发已经成为人们重要的职业之一。而要成为一名优秀的网页开发者,掌握网页开发所需的语言是必不可少的。本文将为大家揭示Web标准中的语言大揭秘,介绍网页开发所需的主要语言。 HTML(超文本标记语言)HTML是网页开发的…
了解Web标准的语言要点:常见的哪些语言应用在网页开发中? 随着互联网的不断发展,网页已经成为人们获取信息和交流的重要途径。而要实现一个高质量、易用的网页,离不开一种被广泛接受的Web标准。Web标准的制定和应用,涉及到多种语言和技术,本文将介绍常见的几种语言在网页开发中的应用。 首先,HTML(H…
探索Web标准语言的世界:网页开发中常用的语言有哪些? 在现代社会中,互联网的普及程度越来越高,网页已成为人们获取资讯、娱乐、交流的重要途径。而网页的开发离不开各种编程语言的应用和支持。在这个虚拟世界的网络,有许多被广泛应用的标准化语言,用于为用户提供优质的网页体验。本文将探索网页开发中常用的语言,…
Web标准是指互联网上的各个网页所需遵循的一系列规范,确保网页在不同的浏览器和设备上能够正确地显示和运行。这些标准包括HTML、CSS和JavaScript等语言。本文将深入解析Web标准涵盖的语言范围。 首先,HTML(HyperText Markup Language)是构建网页的基础语言。它使…
CSS 超链接属性解析:text-decoration 和 color 超链接是网页中常用的元素之一,它能够在不同页面之间建立连接。为了使超链接在页面中有明显的标识和吸引力,CSS 提供了一些属性来调整超链接的样式。本文将重点介绍 text-decoration 和 color 这两个与超链接相关的…