WordPressにオリジナルのサイドウィジェットの xxxx.php を追加する
<追加したい機能>
WordPressのSNSプラグイン、BuddyPressのメンバーのごとに、記事のPV数を集計して、ウィジェットでランキング表示する。
こんなやつ。
<追加の流れ>
・ユーザーごとの投稿PV数を集計して表示する xxxx.php を作って、子テーマフォルダに追加。
・phpファイルを呼び出すために、ショートコード my_add を追加する。
・ウィジェットの「テキスト」でショートコードを許可する。
・ウィジェットエリアに「テキスト」を追加し、そこからオリジナルのウィジェットのファイルである xxxx.php を呼び出す。
ちなみに、プラグインの「PHP Text Widget」を使って、直接ウィジェットの「テキスト」にPHPコードを書く方法もあるが、これはセキュリティ的にヤバイらしいので、やめておこう。
オリジナルウィジェット xxxx.phpファイルの中身
Sangoの「人気記事」ウィジェットをベースにユーザーごとに集計したPV数でランキング表示する。
HTML出力の部分を改造すれば、見た目は自由に変えることができる。
xxxx.php の中身
<?php
$count_key = 'post_views_count'; //著者一覧を取得
$users =get_users( array('orderby'=>'ID','order'=>'ASC') ); //全著者ループ
$count_user = array();
foreach($users as $user) { //処理するユーザー指定
query_posts( array ( 'author' => $user->ID, 'posts_per_page' => -1 , 'orderby'=>'ID' , 'order'=>'ASC' ) ); //各著者の投稿ループし、アクセス数を計算
while ( have_posts() ) {
the_post();
$post_count = get_post_meta( get_the_ID(), $count_key, true ); //投稿のアクセス数を取得
if ($post_count <> '') {
$count_user[$user->ID]=$count_user[$user->ID] + $post_count; //投稿のアクセス数をインクリメント(+1)
}
}
}
arsort($count_user,SORT_NUMERIC);
//昇順ソート結果を出力(5個出力の場合)
$disp_count=5;
$n=0;
foreach ($count_user as $userid => $val) {
$thisUser = get_userdata( $userid );
echo "<ul id=\"members-list\" class=\"item-list\" aria-live=\"polite\" aria-relevant=\"all\" aria-atomic=\"true\"><li class=\"vcard\"><div class=\"item-avatar\"><a href=\"" . home_url() . "/author/" . $thisUser->user_login . "\">" . get_avatar( $userid, 50 ) . "</a></div><div class=\"item\"><div class=\"item-title fn\"><a href=\"" . home_url() . "/author/" . $thisUser->user_login . "\">" . $thisUser->display_name . " さん " . "</a></div></div>";
echo "<div class=\"item views\"><div class=\"item-title fn\"><p class=\"views\"> Total: ". $val . " views" . "</p></div></div></li></ul>"; //HTML出力見た目はSangoのウィジェットに似るように
$n++;
if ($n == $disp_count) {break;}
}
wp_reset_query();
?>
FTPでアップロード
Sangoの子テーマフォルダ(sango-theme-child)の中にtemplateフォルダを作り、その中にオリジナルの xxxx.php をアップロードしておく。
ここでは、wp-content/themes/sango-theme-child/template 。
場所やフォルダ名は、次の functions.php の記述で決めれる。
functions.php への記述
ウィジェットでショートコード使用を許可して、自分のショートコード my_add の働きを指定しておく。
add_filter('widget_text', 'do_shortcode'); //サイトフロントのサイドバーにテンプレート追加するため、widgetのテキストでショートコードを使えるように
function Include_my_php($params = array()) {
extract(shortcode_atts(array(
'file' => 'default'
), $params));
ob_start();
include(STYLESHEETPATH . "/template/$file.php"); //子テーマのtemplateフォルダの中のファイルを読み取る
return ob_get_clean();
}
add_shortcode('my_add', 'Include_my_php'); //ショートコード my_add を追加
ウィジェットの「テキスト」へのショートコードの記述
functions.php で追加したショートコードを使って、「テキスト」ウィジェットでオリジナルのphpを呼び出す。
[my_add file='xxxx']
でOK。 .php は不要。