我有2个张贴区显示在每页。
首先是小部件(它位于每个页面的顶部)。
第二个是posts区域(显示在小部件下方)。
它是独立的查询。小部件上的文章是另一个查询,帖子区域上的文章是主查询。
所以,我不希望这两个区域都有相同的文章(不是重复的),并且小部件上的文章是随机显示的。
我想使用我从小部件获得的文章id来修改主查询。
例如:我有文章id号1、4和10,我想用它来修改主查询,使其不加载要显示的文章id。
我得到了$array_widgetId
来自另一个文件,该文件有一个循环来显示小部件中的文章(另一个查询),我将其设置为全局变量,并在该文件中定义它,该文件用于在帖子区域中显示文章(此处为主查询),还修改主查询以从加载中排除该文章id。
while(have_posts()){
the_post();
//article to show in the posts area.
}
如果不使用
pre_get_posts
?
因为我试图传递要在中使用的小部件id数组function.php
但这是不可能的。
更多信息:我有很多文件可以让这个东西工作(可能这就是为什么维护它让我如此困惑的原因)。
我有一个文件来循环文章以生成列。
warp framework布局中的“\\u posts.php”
$column_order = $this[\'config\']->get(\'multicolumns_order\', 1);
$colcount = is_front_page() ? $this[\'config\']->get(\'multicolumns\', 1) : 1;
$widget_id (this array contains id of article which show on the widget kit)
while (have_posts()) {
the_post();
if (isset($widget_id) && !in_array($post->ID, $widget_id)) {
if ($column_order == 0) {
// order down
if ($row >= $rows) {
$column++;
$row = 0;
$rows = ceil(($count - $i) / ($colcount - $column));
}
$row++;
} else {
// order across
$column = $i % $colcount;
}
if (!isset($columns[$column])) {
$columns[$column] = \'\';
}
$columns[$column] .= $this->render(\'_post\', array(\'is_column_item\' => ($colcount > 1)));
$i++;
if ($i == $default_posts_per_page) {
break 1; // break out \'while\' loop level
}
}
}
// render columns
if ($count = count($columns)) {
echo \'<div class="uk-grid" data-uk-grid-match data-uk-grid-margin>\';
for ($i = 0; $i < $count; $i++) {
echo \'<div class="uk-width-medium-1-\' . $count . \'">\' .
$columns[$i] . \'</div>\';
}
echo \'</div>\';
}else{
// generate standard column
}
以上代码将在后端生成以下设置的列。在此之后,它将调用“\\u post.php”,并且“\\u post.php”将包含自定义布局的HTML标记。
最合适的回答,由SO网友:WebElaine 整理而成
与其尝试设置全局变量,不如对小部件和其他内容使用主查询。只需调整循环即可。
如果您共享更多的代码,也许我们可以帮助您指定这将转到何处,但一般的想法是将循环的开头移到需要显示小部件的任何位置。使用计数器跟踪是否在循环第一个项目(如果是,则在小部件中显示)或不循环(在主内容区域中显示)。
<?php get_header();
//
// your code - perhaps an outer container div, etc.
//
$counter=0; // set a counter
if(have_posts()): // start of normal Loop
while(have_posts()): the_post();
$counter++; // increment counter at each iteration
if($counter==1) { // only for first Post
?><div class="sidebar">
<div class="widget">
<?php the_title(); // add link, etc. as desired ?>
</div>
</div><?php
} else { // now show the rest of the Posts outside of the widget
?>
<div class="maincontent">
<?php the_title(); the_content(); // format as desired ?>
</div>
<?php
}
endwhile;
endif; // end Loop
//
// your code - perhaps an outer container div, etc.
//
get_footer(); ?>