“欢迎小组”在哪里
Wordpress仪表板(包含“欢迎面板”)基本上是
~/wp-admin/index.php
何时显示正如您在查看
source, 有以下检查:
if ( has_action( \'welcome_panel\' ) && current_user_can( \'edit_theme_options\' ) )
如何绕过所需的功能?让它对每个人都可用这意味着最低角色/能力(角色名称也被分配为能力)为
edit_theme_options
. 现在,正如OlegButuzov在他的回答中所显示的那样,您可以将回调挂接到
user_has_cap
过滤器或内部过滤器
get_user_meta()
- 内部有一个过滤器
get_metadata()
- 已命名
apply_filters( "get_{$meta_type}_metadata", null, $object_id, $meta_key, $single );
现在回调如下所示。确保挂钩尽可能靠近欢迎面板动作。
\'all_admin_notices\'
非常适合。
确保仅在仪表板上触发此筛选器回调,并且仅触发一次。否则,您会给用户提供不需要的功能,导致用户可以访问您的实际主题设置。我用了WCM Current Admin Info plugin 检索该数据。
// Hooking as late as possible
add_action( \'all_admin_notices\', \'wpse119694AddCapCheckOverride\' );
function wpse119694AddCapCheckOverride()
{
// Do some check against get_current_screen()
if ( \'dashboard\' !== get_current_screen()->id )
add_filter( \'get_user_metadata\', \'wpse119694AddEditThemeOptionsCap\', 20, 4 );
}
// The callback used to override the cap check
function wpse119694AddEditThemeOptionsCap( $return, $objectId, $metaKey, $single )
{
// Instantly remove to avoid conflicts later on
remove_filter( current_filter(), __FUNCTION__ );
// Only for the current user
if ( wp_get_current_user()->user_id !== $objectId )
return $return;
// Only for the \'edit_theme_options\' cap
if ( \'edit_theme_options\' === $metaKey )
return TRUE;
return $return;
}
附加:始终显示欢迎面板用户可以关闭欢迎面板。有时我们不希望这样,因为我们假设他们没有阅读我们的重要信息/笔记或出于任何原因。注意:你需要把你自己内部化。
add_action( \'all_admin_notices\', \'wpse119694AddCapCheckOverride\' );
function wpse119694AddCapCheckOverride()
{
// Do some check against get_current_screen()
if ( \'dashboard\' !== get_current_screen()->id )
add_filter( \'get_user_metadata\', \'wpse119694ShowWelcomePanel\', 20, 4 );
}
function wpse119694ShowWelcomePanel( $return, $objectId, $metaKey, $single )
{
// Instantly remove to avoid conflicts later on
remove_filter( current_filter(), __FUNCTION__ );
// Only for the current user
if ( wp_get_current_user()->user_id !== $objectId )
return $return;
// ALWAYS show the welcome panel
if ( \'show_welcome_panel\' === $metaKey )
{
// Implement additional checks in here
return TRUE;
}
return $return;
}
“欢迎面板”的自定义内容现在我们需要做的第一件事就是去掉原始内容。然后,我们可以根据用户ID/名称/角色等添加自定义内容
wp_get_current_user()
, 返回的实例
WP_User
装满了我们需要的所有数据。
// Hook as close to the welcome panel as possible
add_action( \'welcome_panel\', \'wpse119684WelcomePanelContents\' );
function wpse119684WelcomePanelContents()
{
remove_all_actions( current_filter() );
$userData = wp_get_current_user();
$html = <<<EOF
<!-- custom HTML -->
EOF;
// Here you start overriding the previous $html based on user capabilities.
if ( \'some-check-against\' === $userData )
$html = <<<EOF
<!-- custom HTML for a specific Role/User/etc.
EOF;
return $html;
}
现在,您应该能够为每个用户/角色/功能自定义“欢迎面板”的每一部分。
参考标记
为用户编写自己的“欢迎面板”内容的一个很好的参考是cores default
wp_welcome_panel()
作用
<div class="welcome-panel-content">
<h3><?php _e( \'Headline\', \'your_textdomain\' ); ?></h3>
<p class="about-description"><?php _e( \'Intro\', your_textdomain\' ); ?></p>
<div class="welcome-panel-column-container">
<div class="welcome-panel-column">
<h4><?php _e( \'Sub Headline\', your_textdomain\' ); ?></h4>
<a class="button button-primary button-hero hide-if-customize" href="<?php echo get_edit_user_link(); ?>">
<?php _e( \'Want to complete your profile? :)\', \'your_textdomain\' ); ?>
</a>
</div>
<div class="welcome-panel-column">
<?php /* Some more content in another column */ ?>
</div>
<div class="welcome-panel-column welcome-panel-last">
<?php /* The last column */ ?>
</div>
</div>
</div>