BuddyPressカスタマイズメモ – ユーザーごとのPVランキングを表示するオリジナルWidgetテンプレートを追加する方法

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 は不要。

サンフランシスコでお土産に最適なものを探そう。話題のレジ無しコンビニ「Amazon Go」の利用方法。

噂の “万引きスーパー” amazon go の利用のしかた

アメリカで amazon go を利用するには、アメリカ(カナダまたはヨーロッパも同じなので流用はOK)のAmazonのアカウントが必要です!

>日本の Amazon.co.jp のアカウントでは原則利用できません。注意!

 

まず、アメリカのAmazon.comにアクセスして、アカウントを作っておきましょう

日本からでも簡単に登録可能。

アメリカの住所が必要な場合(多分なくてもいけたはず)は、ホテルの住所でも入力しておこう。
そこに物が届くわけではないので、別に住所は適当でも大丈夫です。
 

amazon go の使い方


アプリをダウンロードして立ち上げる。


QRコードが表示される。ちなみにネットワークに接続してなくてもOK。オフラインで使える
設定画面から進んでなかった場合はWiFiが必要になるので、amazon go の店舗内にあるFree WiFiを使おう


自動改札のようなものにQRをスキャンして通過。


amazon go アプリを持っていない友達を連れて入店する時は、「QRスキャン→友達入店→再度同じQRスキャン→自分入店」でみんなで入店できる(請求は全部自分に来るけど)。


商品のスキャンは不要(カメラと棚の重量検知で集計)。

一緒に入った友達が棚から商品を取ってもちゃんと集計してくれる。

一度棚から取ったけど、やっぱりいらないやと思ったらそのまま棚に戻せばOK

手に持ってなくても、カバンに入れても、ポケットに入れても大丈夫。


棚に戻さずに、人から人へ商品を渡してはいけません


店から出ると、(出る時も何のスキャンもありません。そのまま出るだけ)

すると後で請求が来ます。

約30分後に、Amazonのアカウントを作った時に登録したメールにも合計金額が届きます。
 

実際にamazon go のお店へ

サンフランシスコ中心部に2軒ある。行きやすい場所なので気軽に徒歩で行ける。

amazon go のお店に入るとすぐに

電車の自動改札のようなものがある。

手前の枠にQRコードをスキャンする。スキャンするQRはAmazon Goアプリで表示される。

ちなみに、QR画面のスクショは取れません。セキュリティ的な問題かな?

サンドイッチやサラダなどが豊富。飲み物やお菓子も充実。
値段は安くもなく高くもなく…

スーパーよりは高い。オーガニックストアなどよりはやや安い。といった感じ。

サラダ2人前ぐらいの多さで6ドル~8ドル、巻き寿司や生春巻きで7ドルぐらい。

スープもある。4ドルぐらいでした。

出口では何もする必要がない。

出たところにスプーン、フォークなどがある。お箸、しょうゆもあります!

電子レンジもあって自由に使える。出力は意外と弱いのでスープだと1分ぐらいやってもいいかも(破裂しても知りません、自己責任で)。

スープとサラダを食べた。味は…. アメリカ・クオリティ。過度の期待は禁物。

おみやげにお勧めなのは、 amazon go 限定チョコレート、お菓子、amazon go 限定エコバッグ、amazon go 限定マグカップなど。

【解決済】WordPressのセキュリティでロックされ {“error”:”Bad Request”,”message”:”Invalid input.”} と言われて復旧できない時の対処法

WordPressでJetpackを導入している時にロックされた時の対処法

Jetpackのセキュリティ設定の中の「総当たり攻撃からの保護」が原因でログインできなくなる症状が時々報告されている。
 


曰く、
Jetpackがログインページをロックしました。
「お客様のIPアドレス(xx.xx.xx.x)はセキュリティ違反の可能性があるため、フラグが立てられました。ログインのロックを解除するには、特殊リンクをメールで自分自身に送信します。さらに詳しく」

 
と出てきてWordpressの管理者のメールアドレスを入力させられる。

そもそも管理者のメールアドレスなんか覚えてない場合が多い。
覚えてたとして、メールを送信してきても、その「特殊リンク」とやらをクリックすると
 
Google Chromeでは
{“error”:”Bad Request”,”message”:”Invalid input.”}

FireFoxで
error “Bad Request”
message “Invalid input.”

などと表示され、全然ロックを解除できない。
 
解決法は3つあるのでそれぞれ紹介。
 

解決法1:Wordpress.com から IPのセーフリストに追加

 
まず調べると出てくるのは、Wordpressにログインして、管理画面の「総当たり攻撃からの保護」の欄にセーフIPを記入しろと言われる。
しかし、そのログインができねんじゃー!である。

まあ…一時的にスマホを使ってログインしてもいいのだが。

Akismetなどを利用している場合など、高確率で WordPress.com のアカウントを持っているかと思う。

WordPress.com からも同様にセーフリストにIPを記入することができる。

WordPress.com のアカウントなど無い!もしくはあるかもしれんが忘れたわ!という人は無理なので、次の解決法2か3を参照のこと。

まず、Wordpress.com からログインする。

ログイン後、左上の「My Sites」へ移動。


問題のブログが表示されていればOKだが、されていなければ、その下の「Switch Site」で、該当ブログを選択。


下の方の「設定(Settings)」をクリック。


セキュリティ(Security)の中の「総当たり攻撃からの保護(Prevent brute force login attacks)」の下向き矢印をクリックして開く。


ここの「IPアドレスのホワイトリスト(Whitelisted IP addresses)」に自分のIPを記入する。
ちなみに自分のIPはすぐ上に記載されている。

※ここで注意が必要なのだが、JetpackのセキュリティではじかれているIPとこのIPが一致していない場合は、自分のIPではなく、サーバーのIPをはじいている場合がある。
この場合はサーバーのIPのロック画面に記載されている。(xx.xx.xx.x)も合わせて記入しておこう。

これで解決できれば完了。以下の解決法は見なくていい。

WordPress.com のアカウントとブログのリンクがうまくいってない場合は、設定ができない場合もあるので、その時は解決法2か3を試してみること。

 

解決法2:wp-config.phpにセーフIPを記入

 
FTPソフト、またはWebサーバーのファイルが見れる場所から、wp-config.php をダウンロード。

テキストファイルなどで開いて、中ほどの空白行(/* */とか書いてない場所)に下記のコードをコピペして上書きでアップロードしなおす。

define('JETPACK_IP_ADDRESS_OK', 'X.X.X.X');

x.x.x.xの部分を自分のIPにすること。


こんな感じ。色々書いてあるものは、サーバーや環境によって結構違うので、注意されたし。

これでログインできるようになる。

ログインした後は、管理画面から、Jetpackの設定で「総当たり攻撃からの保護」欄のホワイトリストIPに改めて追加しておく方が無難。

※この方法では、wp-config.phpに記載したIPアドレス1個しか、セーフリストに載らない。複雑な環境下などで、複数のIPアドレスを記載する必要がある場合は、下記を参照。

 

解決法3:プラグインのjetpackごと一時無効化

 
色々あって、どうしても無理な場合は最後の手段。

FTPソフトなどで、Webサーバーにつなぎ、wp-content/plugins/jetpack
の「jetpack」のフォルダ名を変更
する。例えば「jetpack_backup」などに。

するとプラグインの読み込み自体がなくなるので、セキュリティ設定も死に、無事ログインできるようになる。

ログインできるようになった後は、WordPress.comのアカウントを作成した後で、「解決法1」の方法で複数のセーフIPを登録する。

最後に「jetpack_backup」などのフォルダ名を元の「jetpack」に戻すと、jetpackの他の機能も含めて元に戻ってくれる。
 

上記の3つの方法のうちどれか1つで確実に解決できるはずだ。

明日試したくなるカスタマイズ、ネットな日々に役立つ小技と、たまに旅行の妄想と。