collizo4sky/persist-admin-notices-dismissal

一个简单的库,用于在 WordPress 控制面板的页面间持久化管理通知的忽略。

1.4.5 2024-03-10 15:11 UTC

This package is auto-updated.

Last update: 2024-09-10 16:18:35 UTC


README

Latest Stable Version Total Downloads

一个简单的框架库,用于在 WordPress 控制面板的页面间持久化管理通知的忽略。

安装

运行 composer require collizo4sky/persist-admin-notices-dismissal

或者,将此仓库克隆或下载到您的插件中的 vendor/ 文件夹,并像这样包含/要求 persist-admin-notices-dismissal.php 文件

require  __DIR__ . '/vendor/persist-admin-notices-dismissal/persist-admin-notices-dismissal.php';
add_action( 'admin_init', array( 'PAnD', 'init' ) );

或者让 Composer 的自动加载器来完成工作。

如何使用

首先,在插件中安装并激活此库。

假设您有以下标记作为您的管理通知

function sample_admin_notice__success() {
	?>
	<div class="updated notice notice-success is-dismissible">
    	<p><?php _e( 'Done!', 'sample-text-domain' ); ?></p>
	</div>
	<?php
}
add_action( 'admin_notices', 'sample_admin_notice__success' );

要使其在忽略后永久隐藏,请将以下数据属性 data-dismissible="disable-done-notice-forever" 添加到 div 标记,如下所示

function sample_admin_notice__success() {
	if ( ! PAnD::is_admin_notice_active( 'disable-done-notice-forever' ) ) {
		return;
	}

	?>
	<div data-dismissible="disable-done-notice-forever" class="updated notice notice-success is-dismissible">
		<p><?php _e( 'Done!', 'sample-text-domain' ); ?></p>
	</div>
	<?php
}
add_action( 'admin_init', array( 'PAnD', 'init' ) );
add_action( 'admin_notices', 'sample_admin_notice__success' );

自动加载器

当使用框架与自动加载器时,您必须也在外部加载类 admin_noticesnetwork_admin_notices 钩子。原因是这些钩子位于加载 JavaScript 的 admin_enqueue_script 钩子之后。

只需在您的主插件文件中添加以下内容。

add_action( 'admin_init', array( 'PAnD', 'init' ) );

使用说明和示例

如果您在触发某些操作时显示两个通知;首先,选择一个唯一标识它们的字符串,例如 notice-onenotice-two

要使第一个通知在忽略后永远不会出现,其 data-dismissible 属性将为 data-dismissible="notice-one-forever",其中 notice-one 是其唯一标识符,而 forever 是忽略时间长度。

要使第二个通知仅隐藏 2 天,其 data-dismissible 属性将为 data-dismissible="notice-two-2",其中 notice-two 是其唯一标识符,而 2 是它将被隐藏的天数,即忽略时间长度。

您必须将忽略时间长度追加到唯一标识符的末尾,并使用连字符(-)分隔,并且此值必须是整数。唯一的例外是字符串 forever

要实际上使已忽略的管理通知不显示,请使用 is_admin_notice_active() 函数,如下所示

function sample_admin_notice__success1() {
	if ( ! PAnD::is_admin_notice_active( 'notice-one-forever' ) ) {
		return;
	}

	?>
	<div data-dismissible="notice-one-forever" class="updated notice notice-success is-dismissible">
		<p><?php _e( 'Done 1!', 'sample-text-domain' ); ?></p>
	</div>
	<?php
}

function sample_admin_notice__success2() {
	if ( ! PAnD::is_admin_notice_active( 'notice-two-2' ) ) {
		return;
	}

	?>
	<div data-dismissible="notice-two-2" class="updated notice notice-success is-dismissible">
		<p><?php _e( 'Done 2!', 'sample-text-domain' ); ?></p>
	</div>
	<?php
}

add_action( 'admin_init', array( 'PAnD', 'init' ) );
add_action( 'admin_notices', 'sample_admin_notice__success1' );
add_action( 'admin_notices', 'sample_admin_notice__success2' );

请注意,如果您在删除插件后清理,请尽量使存储选项的删除尽可能具体。否则,您可能会删除其他项目中的存储选项。

有一个过滤器钩子可用于返回到 JavaScript 文件的正确 URL。以下是一个用法示例,特别是如果此代码在主题中使用。

add_filter( 'pand_theme_loader', '__return_true' );

如果 pand_theme_loader 运行以下钩子为 true,则将运行以下钩子。您可以通过使用以下方式更改返回值来直接更改 JavaScript 文件的 URL。

add_filter(
	'pand_dismiss_notice_js_url',
	function( $js_url, $composer_path ) {
		return get_stylesheet_directory_uri() . $composer_path;
	},
	10,
	2
);

酷。不是吗?