wp_link_manager_disabled_message()
云策文档标注
概述
wp_link_manager_disabled_message() 函数用于在 WordPress 链接管理器被禁用时输出相关消息。它检查当前页面和用户权限,并根据插件状态(未安装或未激活)提供相应的安装或激活链接,否则显示权限错误。
关键要点
- 函数仅在特定管理页面(如 link-manager.php)触发,通过检查 $pagenow 变量实现。
- 使用 add_filter() 临时设置 link_manager_enabled 选项为 true,以准确判断用户是否有 manage_links 权限。
- 根据插件状态(通过 get_plugins() 和 is_plugin_inactive() 检查)和用户能力(如 install_plugins 或 activate_plugins),输出定制化的 wp_die() 消息。
- 如果用户无权限或插件问题未解决,最终显示默认的权限错误消息。
代码示例
function wp_link_manager_disabled_message() {
global $pagenow;
if ( ! in_array( $pagenow, array( 'link-manager.php', 'link-add.php', 'link.php' ), true ) ) {
return;
}
add_filter( 'pre_option_link_manager_enabled', '__return_true', 100 );
$really_can_manage_links = current_user_can( 'manage_links' );
remove_filter( 'pre_option_link_manager_enabled', '__return_true', 100 );
if ( $really_can_manage_links ) {
$plugins = get_plugins();
if ( empty( $plugins['link-manager/link-manager.php'] ) ) {
if ( current_user_can( 'install_plugins' ) ) {
$install_url = wp_nonce_url(
self_admin_url( 'update.php?action=install-plugin&plugin;=link-manager' ),
'install-plugin_link-manager'
);
wp_die(
sprintf(
__( 'If you are looking to use the link manager, please install the Link Manager plugin.' ),
esc_url( $install_url )
)
);
}
} elseif ( is_plugin_inactive( 'link-manager/link-manager.php' ) ) {
if ( current_user_can( 'activate_plugins' ) ) {
$activate_url = wp_nonce_url(
self_admin_url( 'plugins.php?action=activate&plugin;=link-manager/link-manager.php' ),
'activate-plugin_link-manager/link-manager.php'
);
wp_die(
sprintf(
__( 'Please activate the Link Manager plugin to use the link manager.' ),
esc_url( $activate_url )
)
);
}
}
}
wp_die( __( 'Sorry, you are not allowed to edit the links for this site.' ) );
}注意事项
- 此函数自 WordPress 3.5.0 版本引入,主要用于处理链接管理器插件的禁用场景。
- 依赖于多个核心函数,如 current_user_can()、wp_die() 和 wp_nonce_url(),确保安全性和用户界面一致性。
- 开发者应避免直接调用此函数,除非在自定义插件或主题中需要模拟类似行为。
原文内容
Outputs the ‘disabled’ message for the WordPress Link Manager.
Source
function wp_link_manager_disabled_message() {
global $pagenow;
if ( ! in_array( $pagenow, array( 'link-manager.php', 'link-add.php', 'link.php' ), true ) ) {
return;
}
add_filter( 'pre_option_link_manager_enabled', '__return_true', 100 );
$really_can_manage_links = current_user_can( 'manage_links' );
remove_filter( 'pre_option_link_manager_enabled', '__return_true', 100 );
if ( $really_can_manage_links ) {
$plugins = get_plugins();
if ( empty( $plugins['link-manager/link-manager.php'] ) ) {
if ( current_user_can( 'install_plugins' ) ) {
$install_url = wp_nonce_url(
self_admin_url( 'update.php?action=install-plugin&plugin;=link-manager' ),
'install-plugin_link-manager'
);
wp_die(
sprintf(
/* translators: %s: A link to install the Link Manager plugin. */
__( 'If you are looking to use the link manager, please install the <a href="%s">Link Manager plugin</a>.' ),
esc_url( $install_url )
)
);
}
} elseif ( is_plugin_inactive( 'link-manager/link-manager.php' ) ) {
if ( current_user_can( 'activate_plugins' ) ) {
$activate_url = wp_nonce_url(
self_admin_url( 'plugins.php?action=activate&plugin;=link-manager/link-manager.php' ),
'activate-plugin_link-manager/link-manager.php'
);
wp_die(
sprintf(
/* translators: %s: A link to activate the Link Manager plugin. */
__( 'Please activate the <a href="%s">Link Manager plugin</a> to use the link manager.' ),
esc_url( $activate_url )
)
);
}
}
}
wp_die( __( 'Sorry, you are not allowed to edit the links for this site.' ) );
}
Changelog
| Version | Description |
|---|---|
| 3.5.0 | Introduced. |