ワイヤード・パンチ

元・大阪人が、岡山の山奥でも生きていけることを証明するためのブログ。

OsclassのReview Pluginで、どのユーザページでも同じレビューが出てしまうことへの対処法。

OsclassでReview Pluginというプラグインを使うと、通常は投稿ページ(item.php)でしか使えないレビュー機能を、ユーザプロフィールページ(user-public-profile.php)でも使えるようになります。

しかし、いざレビュー欄を設置してみたはいいものの、なぜかどのユーザのプロフィールページを開いても、同じレビューが出てきてしまうのです。

Aさんのページを開いたはずなのに、Bさんに対するレビューもCさんに対するレビューも…という感じ。

広告

そもそもレビュー欄を表示するには?

user_review_form()

使用したいテーマのuser-public-profile.phpにて、表示したい箇所で上記の関数を実行するだけです。

これで簡単にレビュー欄自体は出せるのですが、先述のとおり、今開いてるユーザに対してのレビューだけが出て欲しいのに、なぜか全ユーザのレビューが…・。

この関数に対しては何も引数を設定することができず、なおかつプラグインの中身を開いて関数を調べてみるも、特にフックはなさそうなので、functions.phpから値を書き換えることも無理そうで…。

よってここは例のごとく、プラグインのファイルを直接いじくるしかなさそうです。

プラグインを直接編集することは、もしアップデートがあったときに編集内容が消える恐れがあるので、あまり望ましくないのですが、仕方ありません。

Osclassのカスタマイズ性の悪さ、ほんと何なんでしょうか…。

プラグインを直接編集して解決する。

\oc-content\plugins\reviews_plugin\index.php

まずは上記パスのファイルをテキストエディタで開きます。

次に、function user_review_form()の中身を見てみると、下記のように変数を代入している箇所があります。

$total = ModelReviews::newInstance()->getUserComments();
(中略)
$comments = ModelReviews::newInstance()->getUserCommentsByArg($page, '1'); ?>

それぞれの変数の中身をvar_dump()で調べてみると、$totalの方は現在開いているユーザページに対するレビューだけ、$commentの方は全てのユーザに対するレビューが格納されていました。

$commentsの方で使われているgetUserCommentsByArgという関数、引数をいろいろ設定できるようですが、なぜか何を入れても結果は変わらず…。

<div class="reviews_list">
	<?php foreach($comments as $comment){?>
	(後略)

そして実際の画面上にレビューを表示するためにループしている箇所では、$commentを使ってループされていました。

$commentは引数を何に設定しても全レビューになってしまうので、これを正しいレビューが格納されている$totalに差し替えます。

<div class="reviews_list">
	<?php foreach($total as $comment){?>
	(後略)

根本的な原因を見つけられていないので、応急処置的になってしまいましたが、今はこれでOKとしておきます。