我想在单一帖子模式下返回2条最新帖子,但不包括当前帖子。我做到了。问题是,它刚刚停止工作。它没有更改代码,它在服务器和本地主机上都停止了。
以下是代码:
<section id='recent_posts'>
<header class='recent_header'>
Recent posts
</header>
<?php
$id = $post->ID;
$recent_posts = wp_get_recent_posts("numberposts=2&exclude=$id");
foreach( $recent_posts as $recent ) { ?>
<article class='single_recent'>
<header>
<a href="<?php echo get_permalink($recent["ID"]); ?>"><?php echo $recent["post_title"]; ?></a>
</header>
<p>
<?php echo get_excerpt_by_id($recent["ID"]); ?>
</p>
</article>
<?php } ?>
</section>
有没有人有解释?
我试图删除这个论点,但仍然没有。它返回一个空数组。
我应该使用哪些其他功能来达到同样的效果?
编辑:
<?php
get_header();
get_sidebar();
?>
<?php the_post() ?>
<article class='post-single'>
<header class='post_header'>
<h1><?php the_title(); ?></h1>
<div class='post_header_bottom'>
<strong class='post_category'><?php echo get_the_category_list(', '); ?></strong>
<strong class='post_author'><span class='symbol'>U</span> by <?php the_author(); ?></strong>
</div>
</header>
<?php if (has_post_thumbnail()) : ?>
<figure class='post_single_image'>
<?php the_post_thumbnail(); ?>
<figcaption>No Will No Skill</figcaption>
</figure>
<?php endif; ?>
<div class='post_perex'>
<?php the_content(); ?>
</div>
<footer class='post_footer'>
<div class='post_footer_top'>
<div class='post_tags'>
<?php the_tags('', '', ''); ?>
</div>
<div class='post_time'>
<time datetime='<?php the_time('Y-m-d'); ?>' pubdate>
<span class='symbol'>P </span>
<?php relative_post_the_date(); ?>
</time>
</div>
</div>
<div class='post_share'>
<div class='share_show'>
<span class='symbol'>f</span> Like
|
<span class='symbol'>g</span> +1
|
<span class='symbol'>t</span> Tweet
<?php
if(function_exists('display_social4i'))
echo display_social4i("large","align-left");
?>
</div>
</div>
</footer>
</article>
<?php comments_template(); ?>
<section id='recent_posts'>
<header class='recent_header'>
Recent posts
</header>
<?php
global $post;
$id = $post->ID;
$qargs = array(
'post__not_in'=> array($id),
'posts_per_page' => 2
);
$recent_posts = new WP_Query($qargs);
if ($recent_posts->have_posts()) echo 'yes'; else echo 'nope';
if($recent_posts->have_posts()) : while($recent_posts->have_posts()) : $recent_posts->the_post(); ?>
<article class='single_recent'>
<header>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</header>
<p>
<?php the_excerpt(); ?>
</p>
</article>
<?php endwhile;endif; ?>
</section>
<div class='space'></div>
</div>
<?php
get_footer();
?>
答案 0 :(得分:0)
你错过了你的循环,或者至少是当前post对象的全局实例。虽然我更喜欢自己使用循环,但你可以使用后者。
变化:
$id = $post->ID;
$recent_posts = wp_get_recent_posts("numberposts=2&exclude=$id");
要:
global $post;
$id = $post->ID;
$recent_posts = wp_get_recent_posts("numberposts=2&exclude=$id");
<强>更新强>
可以在单个视图中使用循环来从默认的query_posts对象中获取信息。即使它只是一个帖子,循环通常用于填充the_content和其他信息。
你是正确的,在这个例子中ID应该是无关紧要的,因为wp_get_recent_posts()仍然应该返回一些没有任何参数的结果(当然,除非你正在处理自定义的帖子类型)。
另一种解决方案是尝试使用WP_Query获取最近的帖子:
<section id='recent_posts'>
<header class='recent_header'>
Recent posts
</header>
<?php
global $post;
$id = $post->ID;
$qargs = array(
'post__not_in'=> array($id),
'posts_per_page' => 2
);
$recent_posts = new WP_Query($qargs);
if($recent_posts->have_posts()) : while($recent_posts->have_posts()) : $recent_posts->the_post(); ?>
<article class='single_recent'>
<header>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</header>
<p>
<?php the_excerpt(); ?>
</p>
</article>
<?php endwhile;endif; ?>
</section>
WP_Query将默认为标准的'orderby'=&gt;'date'和'order'=&gt;'DESC'参数,因此不需要明确说明(但是,如果您愿意,可以添加它们) )。
如上所述和我的评论中,我不确定您是否只想要最新的帖子,或者您是否想要查询最近的自定义帖子类型。如果最近的帖子是'post'类型,那就是你想要的,那么这是WP_Query的'post_type'参数以及wp_get_recent_posts的默认值。
否则,您需要明确说明'post_type'参数,以便$ qargs看起来像:
$qargs = array(
'post__not_in'=> array($id),
'posts_per_page' => 2,
'post_type' => array('post', 'custom_post_type_slug', ...)
);
只是要检查,如果要确保返回SOMETHING,也可以将'post_type'设置为'all'。如果WP_Query或wp_get_recent_posts没有返回任何内容,并且'post_type'设置为'all',则问题会更大,我需要查看single.php模板中的所有代码。
希望这有帮助。
NEW UPDATE:
尝试完全注释掉代码块并替换:
wp_get_archives(array('type'=>'postbypost'));
如果这不起作用,那么我的想法很新鲜。你的文件主机端可能发生了一些事情,可能会解释一些无中生有的事情。检查并查看他们是否有关于此类活动的任何通知。我知道许多文件主机正在替换PHP4和旧版本的MySQL,这可能会导致一些不可预知的问题。
我会尝试使用干净,单独的Wordpress安装和主题副本创建一个新的子域。一旦设置完毕,只需创建一个新帖子,看看是否出现同样的问题。
如果是这样,那么在你的single.php文件中注释掉代码块(可能从get_sidebar通过你的第一个<article>...</article>
块开始注释),并找出可能弹出的任何错误。如果我们处理的代码块突然开始填充,那么发布阻止它发生的代码块,我会尝试与你进一步合作(也就是说,如果你仍然遇到麻烦)。
否则,如果干净安装修复了您的问题,那么您的wp_options表中可能存在某种差异。我会开始合并表(首先是wp_posts,然后是wp_postmeta,然后是wp_terms ....),直到问题再次出现为止。
不幸的是,我认为详尽的测试可能是为了让这种异常情况得到理顺。对不起,我没有纯粹的代码解决方案。这是一个非常奇怪的问题,你正在经历。让我发布,我会尽力帮助。