「プロフィール」タグアーカイブ

Sangoの著者ページ「author/…」でその著者の投稿が無いと、アバターが正しく表示されないバグ修正 WordPress BuddyPressカスタマイズメモ

サンゴのバグ修正、著者ページで投稿がないとアバターやプロフィールが表示されない

そのユーザー(著者)の投稿した記事があれば、記事一覧の上に、アバターの写真とユーザー名、プロフィールの詳細が表示されるが…

投稿した記事がない場合は、アバターもデフォルトのものになるし、プロフィールの詳細が表示されない…

 

修正するファイル

wp-content/themes/sango-theme/parts/archive に入っている

archive-header.php

がこれにあたる。

これを同じ階層で子テーマにコピペで突っ込む。
 

修正する箇所

元の4行目あたり

 <p class="author_page_img">
  <?php
   //著者画像
   $iconimg = get_avatar( get_the_author_meta( 'ID' ), 125 );
   if($iconimg) echo $iconimg;
  ?>
 </p>

 ↓↓↓

 <p class="author_page_img">
   <?php
   //著者画像
   $iconimg = get_avatar( get_the_author_meta('ID',$author) );
   if($iconimg) echo $iconimg;
  ?>
 </p>

get_avatar( get_the_author_meta( ‘ID’ ), 125 );

だと、その記事の著者になってしまうので、

$iconimg = get_avatar( get_the_author_meta(‘ID’,$author) );

として、そのURL author/userID の userID 部分の人のアバターを取得するように変更。

次にプロフィールの詳細の部分で、記事投稿がない場合には、別途プロフィールの詳細を表示させる。(投稿がある場合は、従来のSANGOのテンプレのものがそのまま表示される)

 <h1 class="dfont">
  <?php echo esc_attr(get_the_author_meta('display_name',$author)); ?> <?php fa_tag("check-circle","check-circle",false) ?>
 </h1>
 <?php else : //著者ページ以外?>
 <h1>
  <?php
   if( output_archive_title() ){

 ↓↓↓

 <h1 class="dfont">
  <?php echo esc_attr(get_the_author_meta('display_name',$author)); ?> <?php fa_tag("check-circle","check-circle",false) ?>
 </h1>
 <?php 
  if( !have_posts() ) { //投稿がない場合以下を実行
   echo '<div class="taxonomy-description entry-content">'.strip_tags(get_the_author_meta( 'description', get_the_author_meta('ID',$author) )).'</div>'; // プロフィールの詳細を表示
  }
 ?>
 <?php else : //著者ページ以外?>
  <h1>
   <?php
    if( output_archive_title() ){

これで、記事がなくてもプロフィールアバターとプロフィールの詳細が表示される。

この記事も読まれています

管理画面のプロフィールで、子テーマのfunctions.phpでsangoの親テーマによるfunctionsの追加項目を削除する WordPress BuddyPressカスタマイズメモ

管理画面のプロフィールで、sangoによる追加項目を一旦削除

WordPressの管理画面のプロフィールで、親テーマによって追加される項目を削除したい。

remove_filter('user_contactmethods', 'add_user_contactmethods');

でフィルターフックを削除できるのだが、

functions.phpに記述したものは、子テーマ → 親テーマ の順で適用される。

子テーマでいくら remove_filter しても、親テーマで上書き add_filter されてしまうので、効果がない。

親テーマの後に remove する必要がある。
 

functions.php へ記述

add_action( 'after_setup_theme', '' );

にフックすると、テーマの読み込み後(つまり、親テーマのfunctions.php後)に処理してくれる。

//管理画面のプロフィールのsangoの追加項目を一旦削除

function remove_sango_add_user_contactmethods()
{
 remove_filter('user_contactmethods', 'add_user_contactmethods');
}
add_action( 'after_setup_theme', 'remove_sango_add_user_contactmethods' );

これで、OK

管理画面のユーザー/プロフィールの項目でいらない部分を消す WordPress BuddyPressカスタマイズメモ

管理画面のユーザー/プロフィールの項目で「姓」「名」などのいらない部分を非表示にしたり、変更したりする

WordPressのSNSプラグイン、BuddyPressを導入すると不特定多数のメンバーが参加することになる。

できるだけシンプルにしたい。

Sangoテンプレートを使っていると、 TwitterのURL、FacebookのURL、InstagramのURL、肩書
なども追加されるので、それを一旦削除して上書きしたりする。
 

functions.php へ記述

普通に子テーマの functions.php に書いても、親テーマの functions.php で上書きされてしまう。

add_action の after_setup_thmem で、親テーマの functions.php の sango の追加項目の、TwitterのURL、FacebookのURL、InstagramのURL、肩書あたりを一旦削除しておく。

Sangoで追加されるプロフィールを変更したり、削除したりしなくていい場合はこれは不要。

//管理画面のプロフィールのsangoの追加項目を一旦削除

function remove_sango_add_user_contactmethods()
{
 remove_filter('user_contactmethods', 'add_user_contactmethods');
}
add_action( 'after_setup_theme', 'remove_sango_add_user_contactmethods' );

 

「ユーザー」→「あなたのプロフィール」で表示されている項目は、そのままremoveできないので、CSSで非表示にするしかない。

//管理画面のプロフィールでいらない部分を消す

function user_profile_hide_style() {
  echo '<style>
  #your-profile .user-rich-editing-wrap, /* ビジュアルエディター */
  #your-profile .user-comment-shortcuts-wrap, /* キーボードショートカット */
  #your-profile .show-admin-bar, /* ツールバー */
  #your-profile .user-first-name-wrap, /* 名 */
  #your-profile .user-last-name-wrap, /* 姓 */
  #your-profile .user-profile-picture, /* プロフィール写真 */
  #your-profile .user-sessions-wrap /* セッション */ {
    display: none;
  }
  </style>'.PHP_EOL;
}
add_action('admin_print_styles', 'user_profile_hide_style');

 

続いて、Sango で追加されるプロフィールを再度追加。

不要なモノがあればコメントアウトする。

ここでは、FeedlyのURL が不要なので // でコメントアウトしている。

yourtitle は Sango では「肩書」だが、「出身地」に変更している。

//プロフィールの肩書の部分を「出身地」に変更

function yuya_add_profile($user_contactmethods)
{
 return array(
 'yourtitle' => '出身地',
 'twitter' => 'TwitterのURL',
 'facebook' => 'FacebookのURL',
 'instagram' => 'InstagramのURL',
 //'feedly' => 'FeedlyのURL',
 'youtube' => 'YouTubeのURL',
 'line' => 'LINEのURL',
 );
}
add_filter('user_contactmethods', 'yuya_add_profile');

管理画面のアドミンバー内の「更新」「ヘルプ」「表示オプション」「Wロゴ」などのメニューを非表示 WordPress BuddyPressカスタマイズメモ

管理者以外は、プラグイン、ユーザーなどのサブメニューを非表示にする

WordPressのSNSプラグイン、BuddyPressを導入すると不特定多数のメンバーが参加することになる。

できるだけシンプルにしたいので、管理画面の上の「更新」「ヘルプ」「表示オプション」「Wのロゴ」などを非表示にする。

remove_menuでPHPの読み込みをさせないようにできる場合は、そちらを優先。

remove_menuが使えない「ヘルプ」や「表示オプション」は、仕方ないのでCSSで非表示にしておく。

 

functions.php へ記述で、PHPを読み込ませない

//管理者以外の管理画面のアドミンバー内のメニュー非表示

if ( ! current_user_can( 'administrator' ) ) {
 function my_remove_adminmenu( $wp_admin_bar ) {
  $wp_admin_bar->remove_node('wp-logo');        //左上の「W」のロゴ
  //$wp_admin_bar->remove_menu( 'site-name' );  // サイト名
  $wp_admin_bar->remove_menu( 'view-site' );    // サイト名 -> サイトを表示
  $wp_admin_bar->remove_menu( 'dashboard' );    // サイト名 -> ダッシュボード (公開側)
  $wp_admin_bar->remove_menu( 'themes' );       // サイト名 -> テーマ (公開側)
  $wp_admin_bar->remove_menu( 'customize' );    // サイト名 -> カスタマイズ (公開側)
  //$wp_admin_bar->remove_menu( 'comments' );   // コメント
  $wp_admin_bar->remove_menu( 'updates' );      // 更新
  $wp_admin_bar->remove_menu( 'view' );         // 投稿を表示
  $wp_admin_bar->remove_menu( 'new-content' );  // 新規
  $wp_admin_bar->remove_menu( 'new-post' );     // 新規 -> 投稿
  $wp_admin_bar->remove_menu( 'new-media' );    // 新規 -> メディア
  $wp_admin_bar->remove_menu( 'new-link' );     // 新規 -> リンク
  $wp_admin_bar->remove_menu( 'new-page' );     // 新規 -> 固定ページ
  $wp_admin_bar->remove_menu( 'new-user' );     // 新規 -> ユーザー
  $wp_admin_bar->remove_menu( 'my-account' );   // マイアカウント
  $wp_admin_bar->remove_menu( 'user-info' );    // マイアカウント -> プロフィール
  $wp_admin_bar->remove_menu( 'edit-profile' ); // マイアカウント -> プロフィール編集
  $wp_admin_bar->remove_menu( 'logout' );       // マイアカウント -> ログアウト
  $wp_admin_bar->remove_menu( 'search' );       // 検索 (公開側)
  $wp_admin_bar->remove_menu( 'bp-notifications' ); // BuddyPressの通知
}
add_action( 'admin_bar_menu', 'my_remove_adminmenu', 1000 );

頭に「//」がついている場合は、コメントアウトされて非表示にならないので、上のコードで、例えば「コメント」も非表示にしたい場合は、
頭の

//$wp_admin_bar->remove_menu( 'comments' );

の//を消しておく。
 

functions.php へ記述でCSSで非表示にする。

//cssで、ヘルプや表示オプション、管理画面のフッターなどの不要なモノを見えなくする

if (!current_user_can('administrator')) {
function my_admin_print_styles(){
	echo '<style type="text/css">';
		//投稿のエディタボタン関連
		echo '#contextual-help-link-wrap,';//ヘルプ
		echo '#screen-options-link-wrap,';//表示オプション
		echo '#collapse-menu,';//管理画面のメニューを閉じるボタン
		echo '#wpfooter';//フッター
		echo '{display:none !important;}';
	echo '</style>';
}
add_action('admin_print_styles', 'my_admin_print_styles', 21);
}

“管理者”でもメニューを削除したい場合は、一番上と一番下の

if (!current_user_can('administrator')) {

}

を削除すればいい。

プラグインなどで勝手に追加されるメニューのIDを調べる方法

functions.phpへ

function check_post_label_id() {
    global $wp_admin_bar;

    var_dump($wp_admin_bar);
}
add_action( 'admin_menu', 'check_post_label_id' );

これを書いて、ページ(ソース)を見ると

array(数字) {[0]->string(数字)"メニューの単語"[1]=>string(数字)"スラッグ"......}

って感じの文字の羅列が見えるので、

“メニューの単語” の前にある array(数字)数字が”メニューの単語”のIDになっている。