サイト内検索
Cocoonフォーラム
書き込みの前に以下の3点をご確認ください。
何を書き込んだら良いか分からない場合は、以下のテンプレートをコピペしてご利用ください。
不具合・カスタマイズ対象ページのURL:
相談内容:
不具合の発生手順:
解決のために試したこと:
※文字だけでは正しく伝わらない可能性があるため、スクショ画像の添付もお願いします。
※高速化設定をしている場合は無効にしてください。
環境情報:※↑こちらに「Cocoon設定 → テーマ情報」にある「環境情報」を貼り付けてください。
環境情報の取得方法はこちら。
→ https://wp-cocoon.com/theme-report/
高速化設定を無効にするにはこちら。
→ https://wp-cocoon.com/theme-trouble/
フォーラム利用ガイドリンク
- フォーラムガイドライン
- よくある質問と答え(FAQ)
- サポート対象外のケース
- 原因不明の不具合用トラブルシューティング
- トピックにHTMLを貼り付ける方法(推奨ツール:notepad.pw)
- 真っ白画面でのエラーメッセージの確認方法
- ブラウザ環境チェックツール
- Cocoonカスタマイズ依頼
フォーラム質問後、問題等が解決した場合は結果を書き込んでいただけると幸いです。同様の問題で調べている方には、結果が一番気になる部分となります。
トピックスターター 2018年11月20日 22:49
この投稿がカスタマイズ相談で良いのか分かりませんが、一人で考えていても解決しそうにないので、皆さんお暇なら少し相談にのって頂ければ幸いです。
現在、うちのサイトではカテゴリ・タグ・検索など「list.php」で表示される部分で、この投稿の最後に掲載する方法にてソート機能を表示させています。
今回、ご相談したいのはプラグインの「WP-PostViews 1.75」を使ってソートしている閲覧数順の部分で、ググれば見つかるアクセス順のソート方法です。
この方法だと「PostViews」がDBのpostmetaに記録する「views」を元に「meta_value」のカウント数で並べ替えを行っています。
何も考えずにそのまま「PostViews」を使っていても良かったのですが…
Cocoonにもアクセス集計機能が備わっている。
↓
Cocoonにアクセス集計機能が有るならそれを使えば良いじゃない?
↓
そうすれば「WP-PostViews」との集計がズレる事もないし、プラグインを減らせる!
と、言う考えに至り、Cocoonのアクセス集計関連ファイルを探し始めました。
ですが「lib>page-access>access-func.php」やら「cocoon_accesses」やらを見ていると、どうにも簡単には実装できそうな気がしません…。
割り切って今までどおり「WP-PostViews」でソートすれば良いのですが、Cocoonが自前のアクセス集計が有るのに勿体無いと、半分諦めつつ何週間か悩んでおります。
無かったら無かったで構わないのですが、もし簡単にアクセス順でソート出来る方法が思いつく方がいらっしゃったら教えて頂けないでしょうか。
ぼんやりと、functions.phpで「logging_page_access」部分とかに「PostViews」の様な処理を追加してあげれば良いのではないかと思ったのですが…きっと面倒に違いない…。
「コードを書くのは面倒だけど、ヒントやアイデアなら」程度でも十分ありがたいのでお力添え頂ければ嬉しいです。
【functions.phpの追加要素】
function SortArchive( $query ) {
if ( is_admin() || ! $query->is_main_query() )
return;
if ( $query->is_category() || $query->is_tag() || get_search_query() ) {
$sortset = (string)filter_input(INPUT_GET, 'sort');
if ( $sortset !== 'older' && $sortset !== 'popular' && $sortset !== 'unpopular' && $sortset !== 'seijyunlar' && $sortset !== 'gyakujyunlar' ) {
$query->set( 'orderby', 'date' );
} elseif ( $sortset === 'older' ) {
$query->set( 'orderby', 'date' );
$query->set( 'order', 'ASC' );
} elseif ( $sortset === 'popular' ) {
$query->set( 'meta_key', 'views' );
$query->set( 'orderby', 'meta_value_num' );
} elseif ( $sortset === 'unpopular' ) {
$query->set( 'meta_key', 'views' );
$query->set( 'orderby', 'meta_value_num' );
$query->set( 'order', 'ASC' );
} elseif ( $sortset === 'seijyunlar' ) {
$query->set( 'orderby', 'title' );
//$query->set( 'orderby', 'meta_value_num' );
$query->set( 'order', 'ASC' );
} elseif ( $sortset === 'gyakujyunlar' ) {
$query->set( 'orderby', 'title' );
//$query->set( 'orderby', 'meta_value_num' );
$query->set( 'order', 'DESC' );
}
return;
}
}
add_action( 'pre_get_posts', 'SortArchive' );
【list.phpの追加要素】
<?
$url_str = get_pagenum_link(1); //URL
$search_Keyword = get_search_query();//検索ワード
$sortset = (string)filter_input(INPUT_GET, 'sort');
$crt = ' class="sort_current"';
?>
並び替え:
">
" />
value="新着順" />
">
" />
value="投稿順" />
">
" />
value="閲覧多" />
">
" />
value="閲覧少" />
">
" />
value="A→" />
">
" />
value="←Z" />
トピックスターター 2018年11月20日 22:55
申し訳ありません。【list.phpの追加要素】のPHPとformタグが書かれている部分が上手く表示されないみたいです…。
2018年11月21日 23:01
そのカスタマイズは、かなり高度な部類に入るので、サポート対象外のものにあるようにサポート外とさせてください。
ヒントだけ言うと、$wpdbグローバル変数を利用して、wp_postsとwp_cocoon_accessesをテーブル結合し、アクセス数で並び替えるクエリを発行して、結果を取得しlist.phpで出力する必要があると思います。
access-func.php内でやっているようなことを応用すれば、できるのではないかと思います。
しょぼーん reacted
トピックスターター 2018年11月21日 23:29
わいひらさんありがとうございます。
貴重な時間を使ってヒントを考えて頂けただけでもありがたいです。
Cocoonのアクセス集計機能の活用を思いついたまでは良かったのですが、関係有りそうなファイルを探してみたら思った以上に手間そうだったので、対象外だろうと思いつつも、私より詳しい方から何かしらアドバイスを頂けないかと考え、ダメ元でスレッドを立てさせて頂きました。
今回、頂いたヒントを元に調べて何とか自分で解決したいと思います。
問題の解決に至った場合には、トピック冒頭の「解決済み」をクリックしていただけますと幸いです。
また、有用な回答があった場合は返信右下にある「いいね!」もご活用ください。回答者の励みになります。
(CC BY-ND 2.1)準じていれば(リンクを貼っていただければ)転載も自由です。カスタマイズ記事を書く際にコード等をコピペ利用していただいて構いません。
フォーラムの使い方がよくわからない場合は、テストトピックで自由にテストしていただいて構いません。
最近の書き込みはこちら。
詳細なカスタマイズ依頼をするならこちら。