修复不正确的相关帖子代码片段

时间:2013-01-01 作者:Arafin Shaon

有人能修复这个错误的相关帖子代码片段吗?

function related_posts() {
if (is_single()) {
    global $post;
    $current_post = $post->ID;
    $categories = get_the_category();
foreach ($categories as $category) :
    ?>
<div class="my-related-posts"><h4>Related Posts</h4><ul>
    <?php
    $posts = get_posts(\'numberposts=5&category=\'. $category->term_id . \'&exclude=\' . $current_post);
foreach($posts as $post) :
    ?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?><?php endforeach; ?>
</ul>
</div>
    <?php
        }
    wp_reset_query();
}
add_action( \'genesis_after_post_content\', \'related_posts\' );
此代码段可以很好地显示特定于父类别的相关帖子。在儿童类别下发布帖子后出现问题(如“社交媒体->Facebook”. # 相关帖子显示两次,一次为父类别,另一次为子类别。这是我不想要的。

enter image description here

相关帖子应根据特定类别明确显示,无论是父类别还是子类别,帖子下都会发布。有人能帮我吗?任何帮助都将不胜感激:)

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

您的第一个问题:

试着写下你想做的事情:你不想打印已经打印的帖子。

所以你必须记住哪些帖子已经打印出来了。在PHP中,通常情况下,数组是一个很好的解决方案,可以记住已经完成的事情。让我们添加一个数组:

$printed_posts = array( $current_post );
添加当前帖子的ID是因为应该始终排除此帖子。

现在,您还必须将打印的帖子添加到该数组中:

array_push( $printed_posts, $post->ID );
但如何处理该阵列呢?您想从查询中排除已打印的帖子。这很容易,因为你有选择exclude= 这样做。因此,让我们从查询中排除已打印的帖子:

$posts = get_posts(\'numberposts=5&category=\'. $category->term_id . \'&exclude=\' . implode( \',\', $current_post ); // excludeded posts as comma separeted list
在继续阅读之前,请尝试在正确的位置将此建议插入到代码中。这就是你学习如何解决问题的方法。

如果只搜索副本(&N);粘贴解决方案,现在开始(未经测试,我不喜欢这样的代码混乱):

<?php

function related_posts() {
    if (is_single()) {
        global $post;
        $current_post = $post->ID;
        $categories = get_the_category();

        foreach ($categories as $category) {

        $printed_posts = array( $current_posts );

        ?>
            <div class="my-related-posts">
                <h4>Related Posts</h4>
                <ul>
                    <?php
                    $posts = get_posts(\'numberposts=5&category=\'. $category->term_id . \'&exclude=\' . implode( \',\', $current_post );

                    foreach($posts as $post) {
                        array_push( $printed_posts, $post->ID );
                        ?><li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li><?php
                    }
                    ?>

                </ul>
            </div>
        <?php

        }

        wp_reset_query();

    }
}

add_action( \'genesis_after_post_content\', \'related_posts\' );
对于你的第二个问题,你可以问谷歌或任何其他类似“获取帖子类别”或“获取帖子父类别”的搜索引擎

SO网友:Arafin Shaon

感谢Tnx mate抽出时间为我写信。你真好。我试过了,但不幸的是,它仍然显示出一个错误:(

分析错误:语法错误,意外的“;”在函数中。php在线84

这是指流线:-

$posts = get_posts(\'numberposts=5&category=\'. $category->term_id . \'&exclude=\' . implode( \',\', $current_post );

结束