BuddyPressでブログの投稿記事をお気に入り(Favorite)させる方法 ITかあさん

ITかあさん

BuddyPressでブログの投稿記事をお気に入り(Favorite)させる方法

BuddyPressでブログの投稿記事をお気に入り(Favorite)させる方法


BuddyPressをせっかくインストールしたのでBuddyPressのデフォルトテーマをちょこちょこカスタマイズしてみます。

BudddyPressには標準でお気に入り(Favorite)の機能が付いています。

ユーザーページからフィルターをかけた時にお気に入り(Favorite)出来るようです。

デフォルトの状態では、WordPressで追加されたブログ記事単体(single.php)、トップページ(index.php)から直接お気に入りに追加することは出来ません。
ユーザーページに入って、投稿記事にフィルタリングしてからやっとここで投稿記事をお気に入りに追加できるのです。

これではちょっと面倒なので、記事単体やトップページ、カテゴリー記事一覧など、
ログインしている状態なら、WordPressの記事(Post)一覧からお気に入り(Favorite)出来るようにカスタマイズしてみたいと思います。

functions.php

C:\htdocs\buddy_press\wp-content\plugins\buddypress\bp-themes\bp-default\functions.php

BuddyPressのテーマフォルダのfunctions.phpの最終行に以下の記述を追加します。

function my_bp_activity_is_favorite($activity_id) {
  global $bp, $activities_template;
  return apply_filters( 'bp_get_activity_is_favorite', in_array( $activity_id, (array)$activities_template->my_favs ) );
  }
function my_bp_activity_favorite_link($activity_id) {
  global $activities_template;
  echo apply_filters( 'bp_get_activity_favorite_link', wp_nonce_url( site_url( BP_ACTIVITY_SLUG . '/favorite/' . $activity_id . '/' ), 'mark_favorite' ) );
  }
function my_bp_activity_unfavorite_link($activity_id) {
  global $activities_template;
  echo apply_filters( 'bp_get_activity_unfavorite_link', wp_nonce_url( site_url( BP_ACTIVITY_SLUG . '/unfavorite/' . $activity_id . '/' ), 'unmark_favorite' ) );
  }

index.php

C:\htdocs\buddy_press\wp-content\plugins\buddypress\bp-themes\bp-default\index.php

あとは、WordPressの記事のループ中に以下の記述を入れてあげればOK!
私はindex.phpに記述を追加してあげました。

<?
  //For single.php - put within the WP loop
  global $bp;
  $activity_id = bp_activity_get_activity_id( array(
  'user_id' => $post->author_id,
  'type' => 'new_blog_post',
  'component' => 'blogs',
  'item_id' => 1,
  'secondary_item_id' => $post->ID
  ) );
  ?>
<?php if ( is_user_logged_in() ) : ?>
  <?php bp_has_activities();
  if ( !my_bp_activity_is_favorite($activity_id) ) : ?>
<a href="<?php my_bp_activity_favorite_link($activity_id) ?>" class="fav button" title="<?php _e( 'Mark as Favorite', 'buddypress' ) ?>"><?php _e( 'Favorite', 'buddypress' ) ?></a>
  <?php else : ?>
  <a href="<?php my_bp_activity_unfavorite_link($activity_id) ?>" class="unfav button" title="<?php _e( 'お気に入りを解除', 'buddypress' ) ?>"><?php _e( 'Un-favorite', 'buddypress' ) ?></a><br>
  <a href="<?php echo bp_loggedin_user_domain() . BP_ACTIVITY_SLUG . '/favorites/' ?>" style="font-size: 12px;">お気に入り一覧</a>
  <?php endif; ?>
  <?php endif;?>

実行結果

WordPressの記事一覧からお気に入りの追加が可能に

こんな風に表示されます。

クリックでお気に入りに追加

通常通り、後はクリックでお気に入りに追加されます。

その他

今回非常に注目なのは、function.phpからActicityのIDを取得する方法でした。
おそらくユーザー画面から、Acticityの連番を引っ張ることが出来れば、この処理は出来るのと思ったのですが、これが本当に分からなかったです。
ActicityのIDの取得はこれでばっちりなので、関連したカスタマイズもこれで出来そうです。

非常に参考になったサイト

初夏のJavaScript祭 in サーキュレーションビル ForPro