「functions.php」タグアーカイブ

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() ){

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

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

管理画面のプロフィールで、Sangoの「肩書き」の部分を「出身地」などに変更し、管理画面のプロフィールでいらない部分を消す WordPress BuddyPressカスタマイズメモ

自分が、人の記事に書いたコメントだけをまとめて表示するページを作る

WordPressのSNSプラグイン、BuddyPressを導入しサンゴのテーマで運用する。

肩書き(入力するとプロフィールに表示)という欄があるのだが、これを出身地にしてみる。

地域コミュニティSNSなので。
 

functions.php へ記述

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

で紹介した通り、子テーマ → 親テーマ の順で functions.php が適用されるので、まず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');

 

ついでに

管理画面のプロフィールでいらないものを消す方法

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

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');

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

//#your-profile .user-profile-picture, /* プロフィール写真 */

の//を消しておく。

BuddyPressのメンバーのタイトルの名前(ユーザーID)に「さん」を追加したり、記事一覧の表示文を追加する方法(SANGOテーマ) WordPress カスタマイズメモ

自分が、人の記事に書いたコメントだけをまとめて表示するページを作る

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

サンゴのテーマの「著者ページ」のタイトルでは、例えばユーザー名が「タツロウ」だとすると、「タツロウが書いた投稿 | ブログ名のような感じになる。

これに「さん」を追加して「タツロウさんが書いた投稿」にしたい。

ついでにカテゴリーページのタイトルなども変更しておく。
 

functions.php へ記述

//メンバーのタイトルに名前追加

function sango_document_title_parts( $title_part ) {
if (is_author()) {
$title_part['title'] .= 'さん'; //サンゴの「著者ページ」でタイトルに「さん」追加
} elseif (is_archive()) {
$title_part['title'] = '「' . $title_part['title'] . '」 記事一覧'; //カテゴリーやタグページでタイトルに「記事一覧」を追加
}
return $title_part;
}
add_filter( 'document_title_parts', 'sango_document_title_parts' );

BuddyPress のメンバー登録時の、ユーザー名で使わせない禁止文字列を設定する WordPress カスタマイズメモ

メンバー登録時の、ユーザー名で使わせない禁止文字列を設定する

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

色々な人が参加するので、アカウントを乗っ取られないように’1111′, ‘1234’など 簡単なユーザーIDは使わせないことはできるのだが、簡単じゃないけど使わせたくない文字列、例えば’administrator’なども禁止文字列として登録したい場合。
 

functions.php へ記述

関連記事の「Widget/ウィジェットなどのリンクのURLの文字列を、別の文字列に置換する方法」では、パーマリンク内の文字列の”member”を”author”に置換する。

だから、ユーザーIDで”member”を使われないように設定しておく必要がある。

例)
ユーザーIDがabcdeの場合
xxx.com/member/abcde →置換後→ xxx.com/author/abcde で、問題なくSangoの著者ページが表示される。

ユーザーIDがabmembercdの場合
xxx.com/member/abmembercd →置換後→ xxx.com/author/abauthorcd となり、ユーザーIDまで置換されてエラーになる。

これを防ぐため。

//ユーザ名禁止文字memberを登録。memberをauthorに置換してるから。

function nendebcom_illegal_user_logins( $illegal_logins ){
$illegal_names = array( 'www', 'web', 'root', 'admin', 'main', 'invite', 'administrator', 'member' ); //元々の禁止文字列 www、admin等に加え、memberも禁止
$illegal_logins = array_merge( $illegal_logins, $illegal_names );
return $illegal_logins;
}
add_filter( 'illegal_user_logins', 'nendebcom_illegal_user_logins' );

関連記事:
WordPress のWidget/ウィジェットなどのリンクのURLの文字列を、functions.phpを使って別の文字列に置換する方法 BuddyPress(テーマはSango)カスタマイズメモ

メンバーなどWidget/ウィジェットのURLをリダイレクトさせる(テーマはSango)

WordPress BuddyPressカスタマイズメモ 返信メール、メニュー、管理画面、投稿画面など (SANGOテンプレート)

BuddyPressのカスタマイズメモ

基本設定と運用の前提

・BuddyPressでユーザー登録(投稿者として)してもらい、みんなで記事を投稿してもらう

・ユーザー同士は顔見知りじゃないので、それぞれの記事は、管理画面では見えないように

・ユーザー(投稿者権限)の管理画面でのメニューを一部非表示に

・ユーザーの投稿画面で表示オプションを非表示に

・Buddypressのmemberページを使わずに、SangoのAuthorページを活用

・アップデートの通知などをユーザーに見えないように

・コメント時のメール通知などの最適化

・アップデート時に問題が起こらないように、子テーマ化して、コアファイルは極力触らず、functions.phpを使う
 

BuddyPressで実現したカスタマイズ一覧

サイトフロント(管理画面以外の見えるWebサイト全て)

・サイドバーにオリジナルWidget、ユーザーごとの記事PVランキング「人気のメンバー」を追加

・サイトフロントのアドミンバー非表示

・ログイン直後に管理画面ではなくサイトフロントへ飛ばす

・サイトフロントのコメントの編集ボタンを削除

・ログイン時は、非ログイン時と違うメニューを表示させる

 

管理画面全体

・管理画面の一部メニュー非表示

・管理画面のサブメニューの非表示

・管理画面のメニューのアドミンバーの、BuddyPress通知の吹き出しを削除

・管理画面のアドミンバー内の「ヘルプ」「表示オプション」「Wロゴ」などのメニューを非表示

・Wordpressやプラグインのアップデート通知を非表示

・「投稿」→「記事」、「コメント」→「あなたの記事へのコメント」へ、メニューの文言変更

・ダッシュボード画面の「アクティビティ」「クイックドラフト」などを非表示

・管理画面用のCSSファイルを、子テーマ化する

・ログイン画面の「W」のロゴを他の画像に変え、リンク先、マウスホバーの文言変更

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

 

投稿画面、投稿権限

・記事投稿でタイトルの入力を必須にする

・投稿者の「投稿」では、自分の投稿のみ表示させる(他ユーザーの投稿は管理画面の投稿一覧では見えない)

・自分のもののみの投稿数を取得して、記事数に代入

・upした画像は投稿者本人しか見えないようにする

・投稿画面で、メタディスクリプション、トラックバック、リビジョン、フォーマットなどの不要なオプションを削除

・cssで投稿画面の不要な文字修飾オプションを非表示に ※・sango のビジュアルエディターのバグ修正(スマホでTinyMCEの文字修飾がおかしい)へリンク

 

コメント関連

・「あなたのコメント」を管理画面のメニューに追加

・「あなたのコメント」に投稿者自身が、人の記事に書いたコメントを表示

・「あなたのコメント」の上のコメントメニュー(スパム、承認待ち等を)削除

・「あなたのコメント」の上のコメントメニュー(スパムチェック、一括操作も)削除

・「あなたのコメント」「あなたの記事へのコメント」の編集権を調整して、「あなたのコメント」に編集権限を与え、「あなたのコメント」に「削除する」だけ残す

・「コメント」に、「あなたの記事へのコメント」のみを表示させる

・コメントページの上のコメント数を「あなたの記事に書かれた、人からのコメント数」のみカウントする

・「あなたの記事に書かれた、人からのコメント」で上のコメントメニュー削除

 

BuddyPressのメンバー機能

・メンバーなどWidget/ウィジェットのURLの文字列を、別の文字列に置換する

・メンバーなどWidget/ウィジェットのURLをリダイレクトさせる

・メンバー登録時の、ユーザー名で禁止文字列を設定する

・メンバーのタイトルの名前(ユーザーID)に「さん」を追加して表示

・文言変更「登録」→「新規登録」に

 

Sangoのバグ修正・カスタマイズ

・sango のビジュアルエディターのバグ修正(スマホでTinyMCEの文字修飾がおかしい)

・新たなプルダウン(フォントサイズ)追加

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

・管理画面のプロフィールで、Sangoの「肩書」の部分を「出身地」などに変更、管理画面のプロフィールでいらない部分を消す

Sangoの著者ページ「author/…」でその著者の投稿が無いと、プロフィール詳細とアバターが正しく表示されないバグ修正

 

通知メールのカスタマイズ

・コメント通知メールの差出人(wordpress@yourdomain.com)を変更

・トラックバック、ピンバック、コメントの通知メール内容を変更

 

プラグインのカスタマイズ(子テーマ及びfunctions.phpで)

・メールに返信した時にコメントを書いた人のメールアドレスが出ないようにする(Better Notifications for WordPressの設定の問題点を修正するため、管理画面で特定のページの時のみ、jsを上書きする)

「あなたのコメント」「あなたの記事へのコメント」の編集権の調整 WordPress BuddyPressカスタマイズメモ

コメントの編集権の調整。投稿者が人のコメントを編集、削除できないようにする

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

自分の投稿に対しての、人のコメントは編集させたくない。

人の投稿につけた、自分のコメントは編集できるようにしておく。
 

functions.php へ記述

管理者権限以外の場合、コメントページ(自分の投稿へつけてくれた、人のコメント一覧を表示している)の編集権を剥奪する。

//「自分の投稿」へのコメントの編集権削除と、後半「自分のコメント」の編集権付与
// $allcaps[$cap] = true; が権限与える、 unset( $allcaps[$cap] ); が剥奪

if ( 'edit-comments.php' == $pagenow && !current_user_can('administrator')  ){
function only_edit_comment() {
function remove_comment_cap( $allcaps, $caps, $args ) {
 global $pagenow;
 if ( 'edit_comment' == $args[0] && get_current_user_id() == $args[1] && 'edit-comments.php' == $pagenow ) {
  foreach ( $caps as $cap ) {
   unset( $allcaps[$cap] ); //コメント編集権剥奪
  }
 }
 if ( 'edit_comment' == $args[0] && get_current_user_id() == $args[1] && 'edit-comments-mine.php' == $pagenow ) {
  foreach ( $caps as $cap ) {
   $allcaps[$cap] = true; //「あなたのコメント」ページでは編集権付与
  }
 }
 return $allcaps;
}
add_filter( 'user_has_cap', 'remove_comment_cap', 10, 3 );
}
add_action( 'admin_head-edit-comments.php', 'only_edit_comment', 10, 3);
}

//コメント編集権限与えるため、「あなたのコメントページ」に「edit(編集)とtrash(削除する)」だけ残す

if ( 'edit-comments-mine.php' == $pagenow && !current_user_can('administrator')  ) {
//comment-edit-mineのページのみ
function only_edit_comment_mine() {
//メニュー表示非表示切り替え
function self_comment_del( $actions, $comment ) {
unset($actions['reply']);
unset($actions['approve']);
unset($actions['unapprove']);
unset($actions['quickedit']);
//unset($actions['edit']);
unset($actions['spam']);
//unset($actions['trash']);
 return $actions;
}
add_filter( 'comment_row_actions', 'self_comment_del', 10, 2 );

//編集権を与える時に使う処理

function add_comment_cap( $allcaps, $caps, $args ) {
 global $pagenow;
 foreach ( $caps as $cap ) {
  $allcaps[$cap] = true;
 }
 return $allcaps;
}
add_filter( 'user_has_cap', 'add_comment_cap', 10, 3 );

関連記事:
・「あなたのコメント」を管理画面のメニューに追加

・「あなたのコメント」に投稿者自身が、人の記事に書いたコメントを表示

・「あなたのコメント」の上のコメントメニュー(スパム、承認待ち等を)削除

・「あなたのコメント」の上のコメントメニュー(スパムチェック、一括操作も)削除

WordPressのコメントページ上の、コメントメニュー(スパム、承認待ち等)を非表示に BuddyPressカスタマイズメモ

コメントページ上の、コメントメニュー(スパム、承認待ち等)を非表示にする方法

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

・「あなたのコメント」を管理画面のメニューに追加

・「あなたのコメント」に投稿者自身が、人の記事に書いたコメントを表示

で追加した、自分が「人の記事に対して」書いたコメント一覧を表示するページの上のメニューをシンプルにする。

functions.php へ記述

下記の例では、trash(ゴミ箱)、spam(スパム)、approved(承認済み)、moderated(承認待ち)、mine(自分)、all(全て)のうち、ゴミ箱と、全て、以外はコメントアウト「//」して削除している

//「あなたのコメント」の上のメニュー削除

if ( current_user_can( 'author' ) && ($pagenow == 'edit-comments-mine.php')) {
add_filter( 'comment_status_links',
function( $status_links ) {
$status_links['trash'] = sprintf(
  "<a href=%s>%s <span class='count'></span></a>",
  esc_url( admin_url( 'edit-comments-mine.php?comment_status=trash') ),
  __( 'ゴミ箱' )
);
$status_links['spam'] = sprintf(
//  "<a href=%s>%s <span class='count'></span></a>",
//  esc_url( admin_url( 'edit-comments-mine.php?comment_status=spam') ),
//  __( 'スパム' )
);
$status_links['approved'] = sprintf(
//  "<a href=%s>%s <span class='count'></span></a>",
//  esc_url( admin_url( 'edit-comments-mine.php?comment_status=approved') ),
//  __( '承認済み' )
);
$status_links['moderated'] = sprintf(
//  "<a href=%s>%s <span class='count'></span></a>",
//  esc_url( admin_url( 'edit-comments-mine.php?comment_status=moderated') ),
//  __( '承認待ち' )
);
$status_links['mine'] = sprintf(
//  "<a href=%s>%s <span class='count'></span></a>",
//  esc_url( admin_url( 'edit-comments-mine.php?comment_status=mine') ),
//  __( '自分' )
);
$status_links['all'] = sprintf(
  "<a href=%s>%s <span class='count'></span></a>",
  esc_url( admin_url( 'edit-comments-mine.php?comment_status=all') ),
  __( 'All' )
);
return $status_links; 
} );
}

ついでに、一括操作、スパムとしてマーク、などのメニュー(バルクメニュー)か下記で非表示にできる。

その方法はこちらで紹介。

・上のコメントメニュー(スパムチェック、一括操作も)削除

WordPress 管理画面にオリジナルメニュー「あなたのコメント」を追加 BuddyPressカスタマイズメモ

管理画面にオリジナルメニュー「あなたのコメント」を追加

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

普通「コメント」は、全てのコメントが見える。

その「コメント」を「自分の投稿へ、他人がつけてくれたコメント」にした上で、別途オリジナルメニューの「あなたのコメント」を追加する。

「あなたのコメント」は「自分が、他人の投稿へつけたコメント」とする。
 

functions.php へ記述

//「あなたのコメント」をメニューに追加

add_action( 'admin_menu', 'register_my_custom_menu_page' );
function register_my_custom_menu_page() {
add_menu_page('自分で書いたコメント', 'あなたのコメント', 'edit_posts', 'edit-comments-mine.php', '', 'dashicons-admin-customizer', 53);
}

add_menu_page();の使い方と説明は下記。詳細はWordpress公式の関数リファレンスを参照。

add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );

$page_title:(必須) メニューが選択されたとき、ページのタイトルタグに表示されるテキスト。
$menu_title:(必須) メニューとして表示されるテキスト
$capability:(必須) メニューを表示するために必要な権限。
$menu_slug:(必須) メニューのスラッグ名またはphpファイルへのパス。
$function:(オプション) メニューページを表示する際に実行される関数。
$icon_url:(オプション) メニューのアイコンを示す URL。
$position:(オプション) メニューが表示される位置。省略したら最下部に表示。
$positionの数字による場所:
2 – ダッシュボード
4 – (セパレータ)
5 – 投稿
10 – メディア
15 – リンク
20 – 固定ページ
25 – コメント
59 – (セパレータ)
60 – 外観(テーマ)
65 – プラグイン
70 – ユーザー
75 – ツール
80 – 設定
99 – (セパレータ)
(例:ダッシュボードの次に入れたいなら、「3」にする)

ここでは、メニューに追加する方法だけを紹介しているが、今回の例では、別途phpファイル「edit-comments-mine.php」を用意する必要がある

「あなたのコメント」に投稿者自身が、人の記事に書いたコメントを表示

で紹介。

メディアからアップロードした画像は、ライブラリでもアップロードした投稿者本人しか見えないようにする WordPress BuddyPressカスタマイズメモ

ップロードした画像は、アップロードした投稿者本人しか見えないようにする

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

管理者ではなく、参加するメンバーが記事を投稿した場合、誰でも全員の投稿を見れるようになっているのをカスタマイズして、自分の投稿のみ表示するようにした。

投稿者の「投稿画面」では、自分の投稿のみ表示させる方法で紹介した。

でも、そのままでは、アップロードした画像などのメディアが全て見えてしまうので、そこを修正。


 ↓↓↓

 

functions.php へ記述

//upした画像は自分のみ表示

function show_only_authorimage( $where ){
global $current_user;
if(is_admin()){ //管理画面
if(current_user_can('author') ){ //投稿者権限の場合のみ
if( isset( $_POST['action'] ) && ( $_POST['action'] == 'query-attachments' ) ){
$where .= ' AND post_author='.$current_user->data->ID; //UPした人のIDと今のIDが同じ場合のみ表示
}}}
return $where;
}
add_filter( 'posts_where', 'show_only_authorimage' );

これで自分でアップロードした画像のみ表示される(上の例では投稿者権限の場合のみ)。
 

合わせて変更が必要なカスタマイズ案

投稿者の「投稿画面」では、自分の投稿のみ表示させる方法

自分のもののみの投稿数を取得して、記事数に代入

こちらも参照。

投稿一覧の投稿数は、自分のもののみ表示にして、自分の投稿数を取得して表示する WordPress BuddyPressカスタマイズメモ

投稿一覧画面で、自分の投稿数のみカウントして表示する

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

管理者ではなく、参加するメンバーが記事を投稿した場合、誰でも全員の投稿を見れるようになっているのをカスタマイズして、自分の投稿のみ表示するようにした。

投稿者の「投稿画面」では、自分の投稿のみ表示させる方法で紹介した。

でも、そのままでは、投稿数が変になるので、そこを修正。


 ↓↓↓

 

functions.php へ記述

wp_count_postsで、投稿一覧のページで表示される記事数

//自分の投稿のみの投稿数を取得してその数に代入して表示

function count_author_posts( $counts, $type = 'post', $perm = '' ) {
 if ( !is_admin() || current_user_can('administrator') ) {
  return $counts; //管理者や管理画面じゃない場合はそのまま出力
 }
 global $wpdb;
 if ( ! post_type_exists( $type ) )
  return new stdClass;
 $cache_key = _count_posts_cache_key( $type, $perm ) . '_author';
 $counts = wp_cache_get( $cache_key, 'counts' );
 if ( false !== $counts ) {
  return $counts;
 }
 $query = "SELECT post_status, COUNT( * ) AS num_posts FROM {$wpdb->posts} WHERE post_type = %s";
 $query .= $wpdb->prepare( " AND ( post_author = %d )", get_current_user_id() );
 $query .= ' GROUP BY post_status';
 $results = (array) $wpdb->get_results( $wpdb->prepare( $query, $type ), ARRAY_A );
 $counts = array_fill_keys( get_post_stati(), 0 );
 foreach ( $results as $row ) {
  $counts[ $row['post_status'] ] = $row['num_posts'];
 }
 $counts = (object) $counts;
 wp_cache_set( $cache_key, $counts, 'counts' );
 return $counts;
}
add_filter( 'wp_count_posts', 'count_author_posts', 10, 3 );

これで投稿数を、自分の投稿のみをカウントして出力できる。
 

合わせて変更が必要なカスタマイズ案

投稿者の「投稿画面」では、自分の投稿のみ表示させる方法

・upした画像は投稿者本人しか見えないようにする

こちらも参照。