私は私のカスタム投稿タイプのために新しい "関連投稿"ウィジェットを作成しようとしています。私は見つけました これ 解決策。
しかし、私が追加したいのは、投稿が関連性の高い順に並んでいるということです。私は、それらが共通して有する分類用語の数によって関連性を決定する:共通の分類用語が多いほど、関連性が高い。
例:現在の投稿にはタグ(1)、(2)、(3)、(4)があります。タグ(1)、(3)および(4)を有する関連投稿は、タグ(1)および(2)のみを有する関連投稿より関連性が高い。
また、可能であれば、カスタム分類法の用語の1つに特別な厳格度/強調を追加したいと思います(これを投稿の「主要」用語と見なします)。
例:現在の投稿にはタグ(1)、(2)、(3)、(4)があります。 (1)が投稿の主な用語です。投稿に少なくともこの主な用語が共通している場合は、投稿は関連する投稿としてのみ表示されるべきです。タグ(1)および(3)を持つ関連投稿は、タグ(1)のみを持つ関連投稿よりも関連性があります。 (オプション:タグ(2)、(3)、(4)の付いた投稿は、関連する投稿とは見なされません。または、この投稿の主な用語(1)が共通の投稿よりも関連性が低くなります)。
これを手伝ってください。前もって感謝します! :)
よろしく、ルネ
関連性であなたの投稿をソートする
これは各投稿に追加のプロパティを追加する必要があります。この新しいプロパティによってオブジェクトをソートするよりも。秘訣は、クエリオブジェクト内で投稿を直接ソートすることです。
function get_posts(){
// get the posts but do NOT order them
$query_posts = new WP_Query( array( 'numberposts' => 5 ) );
// calculate the relevance for each post
foreach( $query_posts->posts as $post )
$post->relevance = calculate_relevance( $post );
// sorting the posts
usort( $query_posts->posts, 'compare' );
return $query_posts;
}
function calculate_relevance( $post ){
// calculate the relevance of the post here
return Rand( 0, 100 );
}
function compare( $a, $b ){
if( $a->relevance == $b->relevance )
return 0;
return ( $a->relevance > $b->relevance ) ? -1 : 1;
}
$posts = get_posts();
// output the sorted posts
while( $posts->have_posts() ){
$posts->the_post();
echo the_title() . '<br>';
}
これにより、計算された関連性の高い順に投稿が出力されます。
重要度/強調
重大度や重要度を計算するのは、単にif then else
ブロックの集まりです。
擬似コード:
...
$post->emphasis = get_post_emphasis( $post, 'main_term' );
...
function get_post_emphasis( $post, $main_term ){
$emphasis = 0;
$terms = get_posts_terms( $post ); // $terms is an array
if( in_array( $main_term, $terms ) )
$emphasis++;
if( in_array( $main_term, $terms ) && 2 < count( $terms) )
$emphasis++;
return $emphasis;
}
しかし、どのようにして用語を「主要用語」としてマークしたいですか。