「投稿者」タグアーカイブ

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

BuddyPressのメンバーのページを別ページで強制的に運用する

WordPressのSNSプラグイン、BuddyPressは非常に優秀だが、普通のSNSからすると少し奇妙な部分もある。

今回はSangoのテーマでBuddyPressでSNS化させる際に、BuddyPressの「メンバーページ」を使わず、その変わりにSangoの「Authorページ」を使う前提で話を進める。
 

やる事と条件、注意点など

・BuddyPressのメンバーページは使わない。

ダサすぎる。ので、↓↓↓ サンゴテーマの著者ページだけ使う。

・BuddyPressのメンバー機能はBuddyPressのコア部分なので、単純に無効化はできない。

・表向き、メンバーページには行けないようにする。直でURLを入力された場合はリダイレクト。

・ウィジェットのメンバーやログインからのリンクはAuthorに飛ぶように、URLのmemberの文字列をAuthorに置換する。

これとか

ここからのリンク先。
 

functions.php へ記述

まず、BuddyPressが入った状態で、管理画面の「固定ページ一覧」→「メンバー/member」のスラッグがmemberになっているか確認しておく。

memberじゃない場合は、下記のfunctions.phpへの記述コードの’member‘の部分と同じにしておくこと。

アクティベイトのプロセスでエラーが出ることが確認されているので、念のため日本語”メンバー”などは避けた方がいいと思う。

//Widgetの「メンバー」などのパーマリンク、”member”を”author”へ変更してURLを出力。固定ページのメンバースラッグをmemberにしておくこと

function sango_get_member_permalink() {
 global $members_template;
 return apply_filters( 'sango_get_member_permalink', bp_core_get_user_domain( $members_template->member->id, $members_template->member->user_nicename, $members_template->member->user_login ) );
} //functionで、BuddyPressのメンバーのパーマリンク(URL)を取得

function sango_member_permalink() {
 $bpmemberurl = esc_url( sango_get_member_permalink() );
 $sangomemberurl = str_replace( 'member', 'author', $bpmemberurl );
 echo $sangomemberurl;
} //上で取得したBuddyPressのメンバーのパーマリンクの"member"を"author"に置き換える
add_filter( 'bp_get_member_permalink', 'sango_member_permalink' );

メンバーウィジェットだけでなく、ログインウィジェットのアバターのURLなども同じように置換してURLを出力させる。

//login widgetのアバターの”member”のURLを”author”へ置換。固定ページのメンバースラッグをmemberにしておくこと

function sango_get_loggedin_user_domain() {
$bp = buddypress();
return apply_filters( 'sango_get_loggedin_user_domain', isset( $bp->loggedin_user->domain ) ? $bp->loggedin_user->domain : '' );
} //BuddyPressのログインユーザーのページであるhttps://....com/member/user_ID を取得

function sango_loggedin_user_domain() {
$bploginmemberurl = esc_url( sango_get_loggedin_user_domain() );
$sangologinmemberurl = str_replace( 'member', 'author', $bploginmemberurl );
return $sangologinmemberurl;
} //上で取得したBuddyPressのメンバーのパーマリンクの"member"を"author"に置き換える
add_filter( 'bp_loggedin_user_domain', 'sango_loggedin_user_domain' );

これで、ウィジェットやアバターをクリックして飛ぶリンク先のBuddyPressのmemberページのURLは、全てSangoの著者ページであるauthorページに置き換えられる。
 

関連記事:
直接URLに xxx.com/member/user_IDと入力されてしまうと、memberページにいけてしまうので、ついでに .htaccess などで、URL自体をリダイレクトしておくと安心。
・メンバーなどWidget/ウィジェットのURLをリダイレクトさせる

関連記事の「Widget/ウィジェットなどのリンクのURLの文字列を、別の文字列に置換する方法」では、パーマリンク内の文字列の”member”を”author”に置換するので、ユーザーIDで”member”を使われないように設定しておく必要がある。
BuddyPress のメンバー登録時の、ユーザー名で使わせない禁止文字列を設定する

「あなたの記事に書かれた、人からのコメント」で上のコメントメニューの調整・非表示 WordPress BuddyPressカスタマイズメモ

コメントページの上のメニューを非表示にしたりする方法

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

投稿者権限の一般参加ユーザーには、コメントの承認や非承認の権限は必要ないので、メニューごと非表示にしてしまおう。


 ↓↓↓

 

functions.php へ記述

人の書いたコメントの編集権限は一切必要ないので、ゴミ箱、スパム、承認待ち、などを全て非表示にしている。

//あなたの記事へのコメントで上メニュー削除

if ( current_user_can( 'author' ) && ($pagenow == 'edit-comments.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.php?comment_status=trash') ),
//  __( 'ゴミ箱' )
);
$status_links['spam'] = sprintf(
//  "<a href=%s>%s <span class='count'></span></a>",
//  esc_url( admin_url( 'edit-comments.php?comment_status=spam') ),
//  __( 'スパム' )
);
$status_links['moderated'] = sprintf(
//  "<a href=%s>%s <span class='count'></span></a>",
//  esc_url( admin_url( 'edit-comments.php?comment_status=moderated') ),
//  __( 'コメント一覧' )
);
$status_links['mine'] = sprintf(
//  "<a href=%s>%s <span class='count'></span></a>",
//  esc_url( admin_url( 'edit-comments.php?comment_status=mine') ),
//  __( '自分' )
);
$status_links['all'] = sprintf(
//  "<a href=%s>%s <span class='count'></span></a>",
//  esc_url( admin_url( 'edit-comments.php?comment_status=all') ),
//  __( 'All' )
);
return $status_links; 
} ); }

頭に「//」がついている場合は、コメントアウトされて空っぽになる(つまり非表示になる)、上のコードで、例えば「全て」も残したい場合は、
頭の

//  "<a href=%s>%s <span class='count'></span></a>",
//  esc_url( admin_url( 'edit-comments.php?comment_status=all') ),
//  __( 'All' )

の行のはじめの「//」を全て消しておく。
 

関連記事:
スパムチェック、一括操作などのバルクメニューと呼ばれるものを削除する方法はこちら参照。

「コメント」に、「あなたの記事に他ユーザーが書いたコメント」のみを表示させる方法はこちらを参照。

投稿者が人のコメントを編集、削除できないようにする方法はこちらを参照。

コメントページの上のコメント数を「あなたの記事に書かれた、他ユーザーのコメント数」のみカウントする方法 WordPress BuddyPressカスタマイズメモ

管理画面のコメントページでコメント数は「あなたの記事に書かれた、他ユーザーのコメント数」のみカウントさせる

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

他人の記事へのコメントを、投稿者に見せる必要はないので、それを非表示にした上で、コメントページの上にある、コメント数のカウントを自分の投稿へのコメントのみカウントするようにする。
 

functions.php へ記述

//投稿者のみ、コメントを「自分の投稿」へのコメント数のみカウント

function myblogs_comments_count() {
 global $pagenow;
 if(is_admin() && current_user_can( 'author' )){ //管理画面かつ投稿者権限の場合
  global $user_ID;
  get_currentuserinfo();
  if ( false === ( $stats = get_transient( 'myblogs_author'.$user_ID.'_comments' ) ) ) {
   $stats = array('moderated'=>0,'approved'=>0,'post-trashed'=>0,'trash'=>0,'total_comments'=>0,'spam'=>0);
   $the_query = new WP_Query( array('author' => $user_ID,'posts_per_page' => -1) );
   if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post();
    $comments = myblogs_count_comments(get_the_id()); //それぞれの状態のコメントをカウント
    $stats['moderated'] = $stats['moderated'] + $comments->moderated;
    $stats['approved'] = $stats['approved'] + $comments->approved;
    $stats['post-trashed'] = $stats['post-trashed'] + $comments->{'post-trashed'};
    $stats['trash'] = $stats['trash'] + $comments->trash;
    $stats['total_comments'] = $stats['total_comments'] + $comments->total_comments;
    $stats['spam'] = $stats['spam'] + $comments->spam;
   endwhile;
   endif;
   wp_reset_postdata();
   set_transient( 'myblogs_author'.$user_ID.'_comments', $stats, 60 * 30 );
  }
  return (object) $stats;
 }
}
add_filter('wp_count_comments','myblogs_comments_count');

//「自分の投稿」へのコメント数をカウントの後半

function myblogs_count_comments( $post_id = 0 ) {
 global $wpdb;
 $post_id = (int) $post_id;
 if ( !empty($stats) )
  return $stats;
  $count = wp_cache_get("comments-{$post_id}", 'counts');
 if ( false !== $count )
  return $count;
  $where = '';
 if ( $post_id > 0 )
  $where = $wpdb->prepare( "WHERE comment_post_ID = %d", $post_id );   $count = $wpdb->get_results( "SELECT comment_approved, COUNT( * ) AS num_comments FROM {$wpdb->comments} {$where} GROUP BY comment_approved", ARRAY_A );
  $total = 0;
  $approved = array('0' => 'moderated', '1' => 'approved', 'spam' => 'spam', 'trash' => 'trash', 'post-trashed' => 'post-trashed');
 foreach ( (array) $count as $row ) { // 全てで、ゴミ箱のものはカウントしない
  if ( 'post-trashed' != $row['comment_approved'] && 'trash' != $row['comment_approved'] )
   $total += $row['num_comments'];
  if ( isset( $approved[$row['comment_approved']] ) )
   $stats[$approved[$row['comment_approved']]] = $row['num_comments'];
 }
 $stats['total_comments'] = $total;
 foreach ( $approved as $key ) {
  if ( empty($stats[$key]) )
   $stats[$key] = 0;
 }
 $stats = (object) $stats;
 wp_cache_set("comments-{$post_id}", $stats, 'counts');
 return $stats;
}

 
なお、
「コメント」に、「あなたの記事に他ユーザーが書いたコメント」のみを表示させる方法はこちらを参照。