閃きは大事だw
このサイトは、あくまでもCMSであるWordPressの構築やクラウドであるAWSの運用ノウハウ取得が目的であって、投稿そのものには大した意味はないのだけれど、そうは言っても投稿した記事がどのぐらい見られているか気になるので「閲覧数を記録してみる」で書いたように、プラグインを使って閲覧数を記録している。「今週のトップ10」(現在はトップ5)では週単位での集計結果を表示できるようにしたりしている。
この週単位の集計の際に、結果重視と言うことでページの右下に表示される「今週のトップ5」の表示を中心にコードを改変したため、管理画面の投稿一覧では総合計が週単位の集計となり、本来の総合計での並べ替えが出来なくなっていた。
修正したコードを再掲する。まずは修正前から、これがオリジナルのコードで、ループの中で「並べ替え」が選ばれていると、queryの条件として「’ AND pvc.type = 4’」が追加される仕様となっている。
// is it sorted by post views?
if ( ( $sql === '' && isset( $query->pvc_orderby ) && $query->pvc_orderby ) || apply_filters( 'pvc_extend_post_object', false, $query ) === true )
$sql = ' AND pvc.type = 4';
これまでの集計では、この部分を以下のように変更して、週単位の集計による並べ替えを実現している。これはサイトの右下にあるウィジェットによる表示結果に影響を及ぼす事になる。この変更を行わないと、投稿の並び順は総合計で行われてしまい「今週のトップ5」が実現できなくなる。
// is it sorted by post views?
$datew = date( 'oW' );
if ( ( $sql === '' && isset( $query->pvc_orderby ) && $query->pvc_orderby ) || apply_filters( 'pvc_extend_post_object', false, $query ) === true )
$sql = ' AND pvc.period = ' . $datew;
一方でこの変更を行うと、前述の通り、管理画面の投稿一覧も週単位の集計となってしまう。今回はこの部分を解決したいと思う。サイトの右下のウィジェットによる「今週のトップ5」は残したい、管理画面の投稿一覧は総合計で並べ替えたい。これが今回の要件である。結論から言うと、実現方法はとても単純で、現在管理画面にいるかどうかの判定に使う「is_admin()」を使う。今日までなんで閃かなかったんだろうw
// is it sorted by post views?
$datew = date( 'oW' );
if ( ( $sql === '' && isset( $query->pvc_orderby ) && $query->pvc_orderby ) || apply_filters( 'pvc_extend_post_object', false, $query ) === true ) {
if ( is_admin() ) {
$sql = ' AND pvc.type = 4';
} else {
$sql = ' AND pvc.period = ' . $datew;
}
}
シンプルな解決策で気に入っています。