在新闻网站主页上分配帖子位置的最佳方式?(没有分类,没有粘帖)

时间:2014-02-19 作者:molokom

我目前正在重新设计一个本地新闻网站。旧的设计使用了大量的类别来处理静态主页中内容的位置,如“热门新闻”、“中间框”、“左框”等。

这在某种程度上是可行的,但在我看来,这非常丑陋,在语义层面上是非常错误的:类别应该用来分类。

另一种选择是使用粘性贴子,但你只能有一种“粘性”与“非粘性”的情况,这是有限的。

我不会使用自定义的帖子类型:基本上所有的帖子都是新闻,如果有一个单独的CPT在主页上定位我的内容,那就太过分了。

完美的解决方案是:

可以在n个位置(我需要4个)之间进行选择,默认状态是将帖子放在“其他新闻”框中,控制进入特定框的帖子数量:主新闻框仅包含一条新闻,如果有新的“主新闻”,则旧的不应从主页中消失,而是切换到较低的位置

我曾考虑将高级自定义字段作为让编辑器选择位置的解决方案,但我不确定它在前端是否可行。

谢谢

2 个回复
最合适的回答,由SO网友:molokom 整理而成

经过大量的挖掘和尝试,我想我找到了一个解决方案。

它涉及我使用的自定义字段Advanced Custom Field 但它是可选的。

为了简化网站的编写,我在实际新闻之前放置了一个元数据库

enter image description here

现在,在我的主页中,我有5个区域:其中4个区域只包含一条新闻,第5个区域是“其他新闻”框,其中包含10条新消息。

因此,前4个框非常简单:

$recentPosts = new WP_Query();
$recentPosts->query(array( 
    \'meta_key\' => \'position\',
    \'meta_value\' => \'Top1\',
    \'showposts\' => 1
    )
);
具有正确位置的元值。

主要问题是:如何将旧的“Top1”新闻推送到“其他新闻”框中,而不必手动切换自定义字段?

$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);
也许代码可以清理一下,但它可以按照我的需要工作。我希望这是有用的。

SO网友:kraftner

我建议添加Custom Fields 然后在首页创建逻辑。php如何显示它们。

在帖子中添加自定义字段,例如。"main_news"

EDIT: To skip some posts in a query use the offset parameter:

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

More info in the Pagination Section of the Codex on WP_Query

结束

相关推荐

POSTS_NAV_LINK();不显示在静态页面上

我有两个不同的循环。主页上的默认值,但存档页面上的二次循环。它抓住了所有的内容,就像这样:<?php // WP_Query arguments $args = array ( \'posts_per_page\' => \'3\' ); // The Query $archiveQuery = new WP_Query( $args ); // The Loop if ( $archiveQuery-&