WP_Admin_Bar
global $wp_admin_bar
インスタンスのリンクを編集するのは 簡単にできる ?
はい 最近、管理バーのユーザー情報セクションにあるプロフィールリンクを変更したい状況に遭遇しました。問題は、すべてのノードを取得し、それらを追加および削除することしかできないということです。編集しないでください。また、$wp_admin_bar->nodes
プロパティは非公開なので変更できません。
簡単にそれらを削除して追加すると、あなたはあなたの注文を失い、全体が恐ろしいように見えます。これが私の解決策です。
// void jw_edit_admin_bar ( mixed $id , string $property , string $value )
if(!function_exists('jw_edit_admin_bar')) {
function jw_edit_admin_bar($id, $property, $value) {
global $wp_admin_bar;
if(!is_array($id)) {
$id = array($id);
}
$all_nodes = $wp_admin_bar->get_nodes();
foreach($all_nodes as $key => $val) {
$current_node = $all_nodes[$key];
$wp_admin_bar->remove_node($key);
if(in_array($key, $id)) {
$current_node->$property = $value;
}
$wp_admin_bar->add_node($current_node);
}
}
}
add_action('admin_bar_menu', function() { jw_edit_admin_bar(array('user-info', 'my-account'), 'href', 'http://www.nyan.cat'); });
わかりました、それで私は最近Wordpress Admin Toolbarのためにカスタムの休日/時刻グリーティングを作成しようとしている問題に遭遇しました。ノードを編集するために管理者ツールバーを破棄して再構築する必要はありません。
Julienの問題を解決する簡単な方法は、functions.phpファイルに5行追加して、目的のURLを置き換えることです。
//-----------------------------------------------------------------------------
/* change location of user profile page in admin toolbar */
add_filter( 'edit_profile_url', 'update_admin_bar_user_profile_url', 10, 3 );
function update_admin_bar_user_profile_url( $url, $user_id, $scheme ) {
$url = site_url( '/edit-user-profile/' );
return $url;
}
//-----------------------------------------------------------------------------
管理ツールバーの編集/操作をもう少し深くしたいのであれば、ユーザーのWebサイトのURLをユーザーのプロファイルページにノードとして追加すると、ユーザーのWebサイトのURLが追加されます。パネル(別名「サブメニュー」のリンク):
/* --- add the user website link node in the admin toolbar --- */
add_action( 'admin_bar_menu', 'update_admin_bar_user_node', 250 );
function update_admin_bar_user_node( $wp_admin_bar ) {
$user_id = get_current_user_id();
$current_user = wp_get_current_user();
$profile_url = get_edit_profile_url( $user_id );
if ( ! $user_id )
return;
if ( current_user_can( 'read' ) ) {
$profile_url = get_edit_profile_url( $user_id );
} elseif ( is_multisite() ) {
$profile_url = get_dashboard_url( $user_id, 'profile.php' );
} else {
$profile_url = false;
}
// Add the users website/link to the user-actions sub-menu if they have one
$my_account = $wp_admin_bar->get_node( 'my-account' );
if( ! empty( $current_user->user_url ) && $my_account ){
$wp_admin_bar->add_node( array(
'parent' => 'user-actions',
'id' => 'user-url',
'title' => '<span class="user-url">' . __( 'My Website' ) . '</span>',
'href' => esc_url( $current_user->user_url )
) );
}
}
これは、その変更が "my-account" "user-actions"メニューにどのように表示されるかのスクリーンショットです。