BuddyPressでブログの投稿記事をお気に入り(Favorite)させる方法
BuddyPressでブログの投稿記事をお気に入り(Favorite)させる方法
BuddyPressをせっかくインストールしたのでBuddyPressのデフォルトテーマをちょこちょこカスタマイズしてみます。
BudddyPressには標準でお気に入り(Favorite)の機能が付いています。
デフォルトの状態では、WordPressで追加されたブログ記事単体(single.php)、トップページ(index.php)から直接お気に入りに追加することは出来ません。
ユーザーページに入って、投稿記事にフィルタリングしてからやっとここで投稿記事をお気に入りに追加できるのです。
これではちょっと面倒なので、記事単体やトップページ、カテゴリー記事一覧など、
ログインしている状態なら、WordPressの記事(Post)一覧からお気に入り(Favorite)出来るようにカスタマイズしてみたいと思います。
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
あとは、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;?>
実行結果
その他
今回非常に注目なのは、function.phpからActicityのIDを取得する方法でした。
おそらくユーザー画面から、Acticityの連番を引っ張ることが出来れば、この処理は出来るのと思ったのですが、これが本当に分からなかったです。
ActicityのIDの取得はこれでばっちりなので、関連したカスタマイズもこれで出来そうです。
非常に参考になったサイト
BuddyPressをローカル(XAMPP)にインストールしてみた
先日(10/11なので、随分前になってしまいますが)
の第一回勉強会に参加してきました。
なんと、廃校になった学校が利用されているんだとか。まんま学校で ビックリ!
なぜか差し入れのドーナツ(と、うまい棒)の写真撮影をする面々
と、まあこんなカンジ。ドーナツばかりですみません。WordPress界で全く無名のITかあさんも、『ドーナツの人』できっと定着したことでしょう(たぶん)
たまたま席が 『ころぐ』の西川さんのお隣になったのですが、
と、27にしてババア呼ばわりされました。(そこまで言ってない)
そんなわけで、FacebookやTwitter上ではやりとししたり、知っているものの、なかなかお会いする機会もなかった方ともお会いできただけでも十分有意義な勉強会でした。
今回初めてBuddyPressの存在すら知ったかあさんですが、今回の勉強会を機会にBuddyPressを少し勉強してみようと思います。
そして今年中にBuddyPressによるWEBサービスを一本公開することが目標です。