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

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 へ記述

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

//「自分の投稿」へのコメントの編集権削除と、後半「自分のコメント」の編集権付与
// $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 へ記述

後々、人が書いたコメントを編集したり削除したりできなくするので、スパムチェック、一括操作等も削除しておく。

//投稿一覧画面とコメント画面のバルクメニューを非表示

if (!current_user_can('administrator')) {
add_filter( 'bulk_actions-edit-post', '__return_empty_array', 100 ); //投稿のバルクメニュー
add_filter( 'bulk_actions-edit-comments', '__return_empty_array', 100 ); //コメントのバルクメニュー
add_filter( 'filter_by_comment-type-edit-comments', '__return_empty_array', 100 ); //コメントの編集用フィルター
add_filter( 'bulk_actions-edit-comments-mine', '__return_empty_array', 100 ); //あなたのコメントでのバルクメニュー
}

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

if (!current_user_can('administrator')) {

}

を削除すればいい。

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

メディアからアップロードした画像は、ライブラリでもアップロードした投稿者本人しか見えないようにする 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した画像は投稿者本人しか見えないようにする

こちらも参照。

WordPress BuddyPressカスタマイズメモ 個別記事ページのコメントの編集ボタンを削除

ログイン中でもコメント編集ボタンを非表示

<追加したい機能>

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

管理者以外では、編集者や投稿者であってもコメントの編集権限を剥奪したい。

ただし、自分自身のコメントの編集権は残したいので、全ての権限を剥奪はしない。

管理画面だけでなく、サイトフロントからも編集できるので、この「編集」リンクを削除する。
 

functions.php へ記述

//個別記事ページのコメント編集ボタンを削除

if (!current_user_can('administrator')) {
  add_filter( 'edit_comment_link', '__return_false');
}

管理者でも編集権を剥奪したいのであれば、

if (!current_user_can('administrator')) {

}

を消して、中の1行だけを記述しておけばOK。

WordPress BuddyPressカスタマイズメモ – サイトフロントのアドミンバー非表示

WordPress(BuddyPress)でユーザー登録した一般ユーザー(投稿者権限)で、管理バー(Adminバー)を非表示にする

<実現したい機能>

・WordpressのSNSプラグイン、BuddyPressのメンバーで、ユーザー登録した一般ユーザー(投稿者権限)にはサイトフロントで管理バーを表示させない。

・管理者としてログインしてる時は見えていていい。

 

functions.php へ記述

サイトフロントでのアドミンバーの非表示は、functions.php に1行書くだけでOK。

if ( ! current_user_can( 'administrator' ) ) { //管理者以外
  add_filter( 'show_admin_bar', '__return_false' );//サイトのアドミンバー非表示
}

管理者でも非表示したいのであれば、

if ( ! current_user_can( 'administrator' ) ) {

}

を削除して、真ん中の1行だけ書いておけばいい。