WordPress Popular Posts プラグインのコードを眺めてみたところ、自前でデータベースクエリを作って MySQL から投稿を取得しています。このコードを力技で書き換えればご希望の ‘AND’ 検索が可能だと思いますが……
wordpress-popular-posts.php (バージョン3.3.4) の1591行目から1632行目です。
https://plugins.trac.wordpress.org/browser/wordpress-popular-posts/tags/3.3.4/wordpress-popular-posts.php#L1591
gblsm様
返信遅れて申し訳ありません。
私のスキルでは難しいかもしれませんが、ちょっと見てみます!
有難う御座います。
こんにちは
gblsmさんが提示されている関数の末尾にwpp_query_postsというフィルターフックが用意されていますね。(1772行目)
orをandにしたいだけなら $resultをループしてget_the_categoryで両方のカテゴリを保持しているものだけを返すようにすればできる・・・と思いましたが、やってみてはいないので本当にできるかは分かりませんが、試してみてはいかがでしょうか。
wpp_query_posts
だと SQLからデータを取得した後なので、ちょっと違いそうです。
こんな感じでフィルターすればwpp_query_postsで出来ます。
get_the_categoryはリンクを取得するもので、間違っていました。
in_categoryを使っています。
function my_wpp_query_posts( $result, $instance ) {
$new_result = array();
if ( $result ) {
foreach ( $result as $post_data ) {
$post = get_post( $post_data->id );
// 両方のカテゴリに属している投稿のみ追加
if ( in_category( 'site', $post_data->id ) && in_category( 'server_side', $post_data->id ) ) {
$new_result[] = $post_data;
}
}
}
return $new_result;
}
add_filter( 'wpp_query_posts', 'my_wpp_query_posts', 10, 2 );
書き忘れましたが、上記コードではカテゴリをスラッグで直接指定していますが、ショートコードで指定したカテゴリは$instanceにこんな感じで入っています。
array (size=16)
'title' => string '' (length=0)
'limit' => int 10
'range' => string 'daily' (length=5)
'freshness' => boolean false
'order_by' => string 'views' (length=5)
'post_type' => string 'post,page' (length=9)
'pid' => string '' (length=0)
'author' => string '' (length=0)
'cat' => string '9,10' (length=1)
このcatを分解してin_categoryに渡してやってください。
munyagu様
ここまで記述して頂ければ、私にも出来そうです!本日中にいじってみようと思います。
有難う御座いました。
長期放置申し訳ありませんでした。
私的にはちょっと複雑でしたので、試行錯誤でかなりの時間が経過してしまいましたが、一応なんとかなりそうです。
皆様 有難う御座いました。