質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

1001閲覧

wpの関連記事をタグで表示したい。且つ一致したタグの個数が多い順に並び替えたい。

d_jomko

総合スコア14

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/03/16 09:42

前提・実現したいこと

wpの関連記事を致したタグの個数が多い順で表示したいと思っています。

各々の記事には複数のタグがついており、
一致するタグの数が多い順に表示させたいです。

↑投稿日時古 ---------- A(1,2) B(1,2,3) C() D(2,3) E(1) ---------- ↓投稿日時新

回したループ

php

1 <?php 2 $current_tags = get_the_tags(); 3 4 if ($current_tags) : 5 6 foreach ($current_tags as $tag) { 7 $current_tag_list[] = $tag->term_id; 8 } 9 10 $args = array( 11 'tag__in' => $current_tag_list, 12 'post__not_in' => array($post->ID), 13 'posts_per_page' => 5, 14 ); 15 $related_posts = new WP_Query($args); 16 if ($related_posts->have_posts()) : 17 ?>

発生している問題・エラーメッセージ

投稿「A」を表示しているときに下記順番で関連記事が表示されます。

E D B

これを下記順番になるようにしたいです。

B D E

試したこと

tag__inをtag__andに変更してみましたが
これだと当たり前ですが、関連記事なしになりました。
知恵をお借りできると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

標準のソートでは難しいです。
以下の2つの方法が考えられますが、前者はプログラムが簡単ですが、データ量が多くなると重くなりそうなので状況に合わせてご検討ください。

(1)一度全て取得してプログラム上でソートする

PHP

1$args = array( 2 'tag__in' => $current_tag_list, 3 'post__not_in' => array($post->ID), 4 'posts_per_page' => -1 5); 6$posts = get_posts($args); 7// ここで$postsをソートして出力する

(2)記事保存時にフックしてpost_metaにソート後の関連記事のIDを保存し、関連記事を表示する際にpost_metaからIDを取得する。
(実際にコーディングしたわけではありませんので不具合がある可能性もあります。デバッグしつつ調整してください)

PHP

1function my_save_post_related_list($post_ID, $post, $update) { 2 // 無限ループ回避 3 remove_action('save_post', 'my_save_post_related_list'); 4 5 // $post_idに該当する記事だけでなく全ての対象の記事を取得する必要がある 6 $ps = get_posts(['posts_per_page' => -1]); 7 foreach ($ps as $p) { 8 ... 9 $args = array( 10 'tag__in' => $current_tag_list, 11 'post__not_in' => array($p->ID), 12 'posts_per_page' => -1 13 ); 14 $posts = get_posts($args); 15 // ここで$postsをソートして記事IDのリストを作る 16 $related_list = []; 17 ... 18 update_post_meta($p->ID, 'related_list', $related_list); 19 } 20 21 add_action('save_post', 'my_save_post_related_list'); 22} 23add_action('save_post', 'my_save_post_related_list');

投稿2020/03/18 01:24

tabuu

総合スコア2449

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問