web-dev-qa-db-ja.com

ニュースサイトのホームページで役職を割り当てる最良の方法は? (カテゴリなし、付箋なし投稿)

私は現在地元のニュースサイトをリデザインしています。古いデザインでは、 "トップニュース"、 "ミドルボックス"、 "レフトボックス"などのように、静的ホームページ内のコンテンツの位置を処理するために多くのカテゴリが使用されていました。

これはどういうわけかうまくいっていますが、私の考えでは意味論的レベルでは非常に間違っています。カテゴリー化するためにカテゴリーを使うべきです。

別の選択肢はスティッキーポストを使うことですが、あなたは一種の制限された「スティッキー」対「非スティッキー」状況しか持てません。

私はカスタムの投稿タイプを使用しません。基本的にすべての投稿はニュースであり、ホームページに自分のコンテンツを掲載するには別のCPTが必要になります。

完璧な解決策は次のとおりです。

  • n位置から選択できること(私は4が必要です)
  • "other news"ボックスに投稿するデフォルトのステータスを持つ
  • 特定のボックスに入る投稿の数を制御します。メインのニュースボックスにはニュースが1つだけ含まれます。新しい「メインニュース」がある場合、古いものはホームページから消えずに低い位置に切り替えます。

要約すると、私は5つの箱を持っています、それらのうちの4つは「より高いレベル」の単一のニュースコンテナです、最後のものは逆の年代順に10のニュースを保持します。これらの10のニュースは「普通の」ニュースと「上のレベル」のニュースが上のボックスから押し出されるはずです。

私はAdvanced Custom Fieldをエディタにポジションを選択させるための解決策として考えていましたが、フロントエンドでそれが可能かどうかはわかりません。

ありがとうございます。

1
molokom

掘り下げて試行錯誤を重ねた結果、解決策が見つかったと思います。

それは私が使用したカスタムフィールドを含みます 高度なカスタムフィールド がそれはオプションです。

サイトの作者にわかりやすくするために、実際のニュースの前にメタボックスを付けました。

enter image description here

今、私のホームページで私は5つの領域を持っています:それらのうちの4つはちょうど1つのニュースを含み、5番目は10の新しい「他のニュース」ボックスです。

最初の4つのボックスはとても簡単です。

$recentPosts = new WP_Query();
$recentPosts->query(array( 
    'meta_key' => 'position',
    'meta_value' => 'Top1',
    'showposts' => 1
    )
);

私は必要な正しい位置のメタ値を使って。

主な問題は、カスタムフィールドを手動で切り替えなくても、どうすれば古い "Top1"ニュースを "other news"ボックスにプッシュできるかということです。

$top1 = get_posts(array(
 'meta_key' => 'position',
 'meta_value' => 'Top1',
 'offset' => 1
));
$top2 = get_posts(array(
 'meta_key' => 'position',
 'meta_value' => 'Top2',
 'offset' => 1
));
$top3 = get_posts(array(
 'meta_key' => 'position',
 'meta_value' => 'Top3',
 'offset' => 1
));
$top4 = get_posts(array(
 'meta_key' => 'position',
 'meta_value' => 'Top4',
 'offset' => 1
));
$other = get_posts(array(
 'meta_key' => 'position',
 'meta_value' => 'Other news'
));
$mergedposts = array_merge( $top1, $top2, $top3, $top4, $other ); 
$postids = array();
foreach( $mergedposts as $item ) { $postids[]=$item->ID; }
$uniqueposts = array_unique($postids);

$posts = get_posts(array(
 'post__in' => $uniqueposts,  
 'showposts' => 3
));
foreach( $posts as $post ) :
setup_postdata($post);

たぶんコードは少し片付けられるかもしれません、しかしそれは私が必要とするように働きます。私はそれが便利だと思います。

0
molokom

私はカスタムフィールドを投稿に追加することを提案し(慣例であるか専用のメタボックスを作成することによって)、それからそれらを表示する方法をfront.page.phpでロジックを作成します。

  1. カスタムフィールドを投稿に追加します。 "main_news"
  2. Front-page.phpに複数のループを設定して、基準に合う投稿をボックスに入れるようにフィルタリングするだけです。

編集:クエリ内のいくつかの投稿をスキップするには、offsetパラメータを使用します。

$query = new WP_Query( 'offset=1' ) );

WP_Queryに関するコーデックスの ページネーションセクションの詳細情報

0
kraftner