2017-07-09 8 views
0

誰かが、以下のコードがmy-accountノードを変更しない理由を説明してください。WordPressの管理ツールバーのマイアカウントのタイトル「Howdy」のテキストを変更するには

私はすべてのチュートリアルのバリエーションを試してみました。私はWordpress 4.8で 'my-account'ノードのテキストを変更することができます。私は、2つの異なるテーマを持つ2つの異なるサイトで、これらのサイト(以下のコードを含む)からさまざまなコードを試してみたところ、動作は同じです - 管理ツールバーの対象ノードに変更はありません。

私は、誰かがそれがなぜうまくいかなかったのかを教えてもらうために、関数の根底にあるノードを単に置き換えるべきであるとコメントされたバリエーションを残しました。私はWordpress Codexを調べてみることもしましたが、役に立たないものです。

また、優先度を999に設定しようとしましたが、それには影響がありませんでした。

/* --- change the greeting for the admin bar --- */ 
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; 
    } 

    $avatar = get_avatar($user_id, 26); 
    $msgtext = fancy_greeting_text(); 

    $newtitle = sprintf(__('%1$s, %2$s'), $msgtext, '<span class="display-name">' . $current_user->display_name . '</span>'); 
    $class = empty($avatar) ? '' : 'with-avatar'; 

    // remove the current my-account node 
    $wp_admin_bar->remove_node('my-account'); 
    // add the node back with the updates 
    $wp_admin_bar->add_node(array( 
     'id'  => 'my-account', 
     'parent' => 'top-secondary', 
     'title'  => $newtitle . $avatar, 
     'href'  => $profile_url, 
     'meta'  => array(
      'class'  => $class, 
     ), 
    )); 

    // lets go ahead and add the users website to the sub-menu if they have one 
    // will need to rebuild the rest of the user-actions menu if we have to remove the node above 
    $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 = $wp_admin_bar->get_node('my-account'); 
//  $msgtext = fancy_greeting_text(); 
//  $newtitle = str_replace('Howdy', $msgtext, $my_account->title); 
//  $args = array(
//   'id' => 'my-account', 
//   'title' => $newtitle, 
//  ); 
//  $wp_admin_bar->add_node($args); 
} 

function fancy_greeting_text() { 
    //date_default_timezone_set('America/Denver'); 
    $date = date('d-m'); 
    $hour = date('G'); 
    switch($date) { 
     case '01-01': 
      $message = 'Happy New Year'; 
      break; 
     case '25-12': 
      $message = 'Merry Christmas'; 
      break; 
     default: 
      //$message = 'Welcome'; 
      //$message = "Logged in as"; 
      if ($hour >= 5 && $hour <= 11) { 
       $message = "Good morning"; 
      } else if ($hour >= 12 && $hour <= 18) { 
       $message = "Good afternoon"; 
      } else if ($hour >= 19 || $hours <= 4) { 
       $message = "Good evening"; 
      } 
    } 
    return $message; 
} 
+1

この回答はあなたに役立つかもしれません。 https://wordpress.stackexchange.com/questions/96869/edit-specific-nodes-in-wp-admin-bar – Difster

+0

ありがとうございますが、残念ながら私はどこにも導かれませんでした...回答は実際には間違っています。既存のノードを変更したり、新しいノードを追加するだけでも、ツールバー全体を再構築する必要はありません。私は最終的になぜ私のコードがうまくいかないのかを理解しました。そして、その過程で、私が行ったことを達成するためのより単純な解決策が出てきました。 – Obewan

答えて

0

だから、オンとオフいじるの日後、私は最終的に起こっていたことを考え出し、それが簡単な、愚かなものだったが、私はプロセスでちょうど少しのコードをクリーンアップする機会を得ました。だから本当の理由これはうまくいかなかった。クライアントからの日付と時刻を操作するための関数が、記事を貼り付けたコードセクションに波線のアポストロフィを持っていたのに対し、ユーザーを取得する方法時間帯に合わせて挨拶をカスタマイズするためのサーバーへの時間。おそらく、この関数の前には違反コードがあり、その後のすべてに影響を与えていたことに注意してください。

最終的に私は、javascriptを使用して私の目標を達成するために、より単純でわずかに異なるアプローチを選択しました...結果のコードは以下に掲載されています。

このコードが改善される可能性のある領域があることは知っていますが、以前のホスティングアカウントを使用しているため、シンプルさと下位互換性が重要な要素です。私はまた、fancy_greeting_text関数を変更し、クライアント上でjavascriptが無効になっている、または何らかの理由で実行に失敗したイベントのフォールバックとして保持しました。 sprintfはスパンタグで挨拶を包むように変更されたので、JavaScriptは後でそれにアクセスして変更することができました。変更された何か、私のアカウントのノードを削除する行が不要だった、私の望む変更でツールバーをレンダリングすることに影響を与えなかったようだった。とにかく

、休日ベースのクライアントを含め、勤務し、次のように日の挨拶の時間があり、更新のfunctions.phpコード:Wordpressのに新しいしている人のために

//----------------------------------------------------------------------------- 
/* --- change the greeting for the admin bar --- */ 
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; 
    } 

    $avatar = get_avatar($user_id, 26); 
    $greeting = fancy_greeting_text(); 
    /* tokens: [%1: greeting text] [%2: current user's display name] */ 
    $newtitle = sprintf(__('%1$s, %2$s'), '<span id="title-greeting" class="greeting">' . $greeting . '</span>', '<span class="display-name">' . $current_user->display_name . '</span>'); 
    $class = empty($avatar) ? '' : 'with-avatar'; 

    // update the node with the changes 
    $wp_admin_bar->add_node(array( 
     'id'  => 'my-account', 
     'parent' => 'top-secondary', 
     'title'  => $newtitle . $avatar, 
     'href'  => $profile_url, 
     'meta'  => array(
      'class'  => $class, 
     ), 
    )); 

    // 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) 
     )); 
    }  
} 
function fancy_greeting_text() { 
    /* -- greeting message based on server values - fallback -- */ 
    if (!date_default_timezone_get()) { 
     //set a default timezone 
     date_default_timezone_set('America/Chicago'); 
    } 
    $date = date('d-m'); 
    $hour = date('G'); 
    switch($date) { 
     case '01-01': 
      $message = 'Happy New Year'; 
      break; 
     case '25-12': 
      $message = 'Merry Christmas'; 
      break; 
     default: 
      $message = 'Welcome'; 
    } 
    //debug//$message.= " (".$hour.")"; // view the hour variable used to determine greeting 

    return $message; 
} 
//----------------------------------------------------------------------------- 

//----------------------------------------------------------------------------- 
/* --- Display custom Time of Day Greeting in Wordpress Admin Toolbar --- */ 
add_action('wp_after_admin_bar_render', 'custom_title_greeting', 9999); 
function custom_title_greeting() { 
?> 
<script type=text/javascript> 
var now = new Date(); 
var mm = now.getMonth()+1;//January is 0!` 
var dd = now.getDate(); 
var hr = now.getHours(); 
var holidate = dd+'-'+mm; 
//console.log('hr->'+hr); 
switch (holidate) { 
    case '01-01': 
     $greeting = 'Happy New Year'; 
     break; 
    case '25-12': 
     $greeting = 'Merry Christmas'; 
     break; 
    default: 
     if (hr >= 5 && hr <= 11) { 
      $greeting = 'Good Morning'; 
     } else if (hr >= 12 && hr <= 18) { 
      $greeting = 'Good Afternoon'; 
     } else if (hr >= 19 && hr <= 4) { 
      $greeting = 'Good Evening'; 
     } else { 
      $greeting = 'Welcome'; 
     } 
} 
// update the existing fallback greeting with new client based greeting 
document.getElementById('title-greeting').innerHTML = $greeting; 

</script> 
<?php 
} 
//----------------------------------------------------------------------------- 

、自分自身のように、私もすべきおそらく、管理ツールバーはレンダリングされているページの終わり近くまでレンダリングされていないので、にはに次のWordpressアクションリファレンスを使用する必要があることを指摘しておいてください。 - wp_after_admin_bar_render - ツールバーを更新するfunctions.phpファイルの中からjavascriptを使ってください。そうしないと、未定義の "null" admin_bar_menu - - アクション参照タイトル挨拶はあなただけ使用した場合、それを必要とする時にDOMに利用できないでしょうIDなどのエラー。

私はこれがより良い解説を書くことができると確信していますが、これは最初にうまくいかなかった理由と、コードを改善し、エラーを修正し、

関連する問題