カテゴリAのアーカイブページに対して pre_get_posts
で「01」を除外し、カテゴリAを表示するテーマファイルを作り、その投稿一覧を表示する箇所の先頭に「01」を単独で表示させる。
という方法を思いつきました。
こんにちは
ORDER BY に CASE 式を指定する方法はどうでしょうか。
function my_posts_orderby( $orderby, $query ) {
if ( !is_admin() && $query->is_main_query() ) {
// 111 はカテゴリAの ID
if ( $query->query_vars['cat'] == 111 ) {
global $wpdb;
// 222 は投稿記事「01」の ID
// $orderby = "CASE {$wpdb->posts}.ID WHEN 222 THEN 1 ELSE 2 END,{$wpdb->posts}.post_date DESC";
$orderby = "CASE {$wpdb->posts}.ID WHEN 222 THEN 1 ELSE 2 END," . $orderby;
}
}
return $orderby;
}
add_filter( 'posts_orderby', 'my_posts_orderby', 10, 2 );
LABEさん、ありがとうございます。
ishitakaさん、ありがとうございます。
思ったように動作させることができました。