wp_get_recent_posts停止工作

时间:2012-07-29 14:35:45

标签: wordpress

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

1 个答案:

答案 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 ....),直到问题再次出现为止。

不幸的是,我认为详尽的测试可能是为了让这种异常情况得到理顺。对不起,我没有纯粹的代码解决方案。这是一个非常奇怪的问题,你正在经历。让我发布,我会尽力帮助。