web-dev-qa-db-ja.com

投稿とカスタム投稿タイプを1つのグループとして注文する方法はありますか?

私はこれをすることを目的としていると思われるいくつかのプラグインを試してみました( this のように)。問題を引き起こします(リンクされたものはランダムに選択するようです。

次のように私は私のindex.phpにWP_Queryを持っています:

<?php
if ( get_query_var('paged') ) $paged = get_query_var('paged');  
if ( get_query_var('page') ) $paged = get_query_var('page');

$query = new WP_Query( array( 'post_type' => array('post','secondposttype'), 'paged' => $page ) );

if ( $query->have_posts() ) : ?>

そのため、私のホームページには通常の投稿とカスタム投稿タイプ "secondposttype"の投稿が表示されます。

条件付きカウントスクリプトも使用しているので、表示される内容などをカスタマイズできます。

<?php if ($count == 1) : ?>

現在使用している解決策はQ2W3 Post Orderプラグインです。これは1つの投稿タイプしかない場合にはうまく機能します。新しい投稿/カスタム投稿タイプの投稿にカスタム分類値を自動的に追加し、index.phpでそのカスタム分類をクエリしてからQ2W3 Post Orderを使用してその分類内の投稿を並べ替えることを試みましたが、うまくいきません。これは本来あるべきものよりはるかに厄介な感じがします。

私の質問は、投稿とカスタム投稿の種類を1つの大きなリストとして並べる方法はありますか?そのように、私が上記のようにそれらを問​​い合わせるとき、私はそれらがどのように表示されるかを注文することができますか?私はこれをしたいというのはまれな出来事であると信じるのは難しいと思うでしょう。

編集:やりたいことの例を示します。私は1つのWP_Queryを介してホームページ上の投稿と2番目の投稿タイプからの投稿を表示したいと思います。そして私はそれを制御できるようにしたいので、順序は次のようになります。

  1. "投稿"投稿タイプから1件投稿
  2. "secondposttype"投稿タイプからの投稿1
  3. "secondposttyle"投稿タイプからの投稿2
  4. "投稿"投稿タイプから投稿2
  5. "secondposttype"投稿タイプからの投稿3

それから、別の日に、私は次の順序になりたいかもしれません。

  1. "secondposttype"投稿タイプからの投稿3
  2. "投稿"投稿タイプから1件投稿
  3. "投稿"投稿タイプ "から2件の投稿
  4. "secondposttype"投稿タイプからの投稿1
  5. "secondposttype"投稿タイプからの投稿2

1つの投稿タイプを順序付けるプラグインがあるので、どの投稿が1、2、3、4などで表示されるかを決めることができます。投稿とその他の投稿タイプをグループ化して、それらが1つだけで表示されるようにしたいです。 stream(これはWP_Queryを介して可能です)ただし、それらは任意の順序で並べ替えることができ、2番目の投稿タイプの投稿と投稿は並べ替えの目的で同じものとして扱われます。

1
Edmund Heaphy

クエリに関しては、これを行うのは非常に簡単ですが、投稿の順序を作成するための独自のインターフェイスを考え出す必要があります。 :

$post_ids = array( 42, 13, 23, 99 );

次に、それらのIDの「ページ」を取得するだけです。

// current page number
$paged = 1;
// number of posts per page
$posts_per_page = 2;
// starting position
$offset = ( $paged - 1 ) * $posts_per_page;
// extract page of IDs
$ids_to_query = array_slice( $post_ids, $offset, $posts_per_page );

次に、これらのIDをpost__inおよびorderby配列を介してクエリに渡します:post__in配列:

$args = array(
    'post_type' => array( 'post','secondposttype' ),
    'post__in' => $ids_to_query
    'orderby' => 'post__in',
    'ignore_sticky_posts' => 1,
    'posts_per_page' => $posts_per_page
);
$ordered_posts = new WP_Query( $args );
2
Milo