2

我想在单个帖子模式下返回 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();
?>
4

1 回答 1

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'=>'date' 和 'order'=>'DESC' 参数,因此不需要明确说明(不过,您可以根据需要添加它们)。

如上所述以及在我的评论中,我不确定您是否只想要最新的帖子,或者您是否正在尝试查询最近的自定义帖子类型。如果最近的帖子是“po​​st”类型并且这就是您想要的,那么这是 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 模板中的所有代码。

希望这可以帮助。

新更新:

尝试完全注释掉代码块并替换为:

wp_get_archives(array('type'=>'postbypost'));

如果这不起作用,那么我的想法很新鲜。您的文件主机端可能发生了一些事情,这可能解释了无中生有的事情。检查并查看他们是否有任何关于此类活动的公告。我知道许多文件主机正在替换 PHP4 和旧版本的 MySQL,这可能会导致一些不可预见的问题。

我会尝试使用干净、单独的 Wordpress 安装和您的主题副本创建一个新的子域。设置好后,只需创建一个新帖子,看看是否会出现同样的问题。

如果是这样,那么在你的 single.php 文件中注释掉代码块(可能从 get_sidebar 注释到你的第一个<article>...</article>块开始)并找出可能弹出的任何错误。如果我们处理的代码块突然开始填充,那么发布阻止它发生的代码块,我会尝试进一步与您合作(也就是说,如果您仍然遇到问题)。

否则,如果全新安装解决了您的问题,那么您的 wp_options 表中可能存在某种差异。我会开始合并表(首先是 wp_posts,然后是 wp_postmeta,然后是 wp_terms....),直到问题再次出现。

不幸的是,我认为详尽的测试可能是为了纠正这种异常情况。抱歉,我没有纯代码解决方案。这是您正在经历的一个非常奇怪的问题。随时关注我,我会尽我所能提供帮助。

于 2012-07-29T16:27:23.603 回答