• 解決済 yumiko245

    (@yumiko245)


    皆様

    大変お世話になっております。

    似た内容の投稿があるようですが自己解決されておりますので投稿させて頂きます。

    現在、ウィジットに通常のプラグイン機能で表示、記事内にはショートコードを使用して表示させています。

    通常、カテゴリを複数入れると aとb どちらかが含まれているカテゴリ全部が表示されてしまいますが、aとb 両方を含んだカテゴリのみ表示させたいと思っております。

    wpp cat=a,b,-c
    のように記述(本当はもっとカテゴリを入れてゴチャゴチャしています)し、なんとかaとbのカテゴリを両方含んだカテゴリを表示させ、表示が難しいものはPopular Posts用に別途aとbを含んだカテゴリ、aとcを含んだカテゴリなどを作成していますが、見る側にも作る私側にも無駄なカテゴリが増えてしまって悩んでいます。

    色々探したのですが、Popular Posts用のショートコードで解決するのは難しそうです。
    何か良い記述方法は無いものでしょうか。

    お手数ですが、御教授下さい。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • 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

    トピック投稿者 yumiko245

    (@yumiko245)

    gblsm様

    返信遅れて申し訳ありません。

    私のスキルでは難しいかもしれませんが、ちょっと見てみます!
    有難う御座います。

    こんにちは

    gblsmさんが提示されている関数の末尾にwpp_query_postsというフィルターフックが用意されていますね。(1772行目)

    orをandにしたいだけなら $resultをループしてget_the_categoryで両方のカテゴリを保持しているものだけを返すようにすればできる・・・と思いましたが、やってみてはいないので本当にできるかは分かりませんが、試してみてはいかがでしょうか。

    • この返信は7年、 10ヶ月前にmunyaguが編集しました。

    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に渡してやってください。

    トピック投稿者 yumiko245

    (@yumiko245)

    munyagu様

    ここまで記述して頂ければ、私にも出来そうです!本日中にいじってみようと思います。
    有難う御座いました。

    • この返信は7年、 10ヶ月前にyumiko245が編集しました。
    トピック投稿者 yumiko245

    (@yumiko245)

    長期放置申し訳ありませんでした。

    私的にはちょっと複雑でしたので、試行錯誤でかなりの時間が経過してしまいましたが、一応なんとかなりそうです。

    皆様 有難う御座いました。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「wp Popular Posts カテゴリーを”or” ではなく”and”表示」には新たに返信することはできません。