WP_Query freezing

时间:2014-10-29 作者:myol

因此,我在So上偶然发现了许多类似的问题,但我对wp\\U query和高级PHP的理解有限。我想我在PHP对象/数组和get_the_the_ 功能。代码在(根主题等效)功能中。php。

我正在使用var_dump 还有ChromePhp,但当我尝试这样做时,我的页面经常会崩溃或冻结。

function tags() 
{
    // If current post has tags
    if (get_the_tags()) 
    {
        $post_id = get_the_id();
        $posttags = get_the_tags();

        // Loop for each tag the custom post has
        foreach($posttags as $tag) 
        {
            $tag_name = ($tag->slug);

            // Search for posts with the same tag,
            // is a custom type and don\'t return
            // the current post
            $args = array(
                \'post_type\' => \'custom_post\',
                \'tag\' => $tag_name,
                \'post__not_in\' => array( $post_id )
                );

            $query = new WP_Query( $args );

            // Make sure we got results
            if( $query->have_posts() ) 
            {
                // Loop through each returned post
                while ( $query->have_posts() )
                {
                    $query->the_post(); // Returns null

                    ...other things generally lock up the page...


                    $example = ($query->posts[0]); // Crashes the server

                }
            }
            wp_reset_postdata();
        }
    }
}
add_shortcode(\'shortcodetag\', \'tags\');
因此,这似乎在某种程度上是可行的,我可以根据当前标记返回正确的帖子。问题只是访问这些返回帖子中的信息。最后的while循环只是将页面研磨到停止状态30秒,然后我出现服务器错误。

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

从评论中的讨论到您的问题,下面是我的建议和建议

只是为了在建设性的回答中概括并添加所有内容

tag 中的参数WP_Query 接受条款slug, 不是name

始终重置自定义WP_Query, 总是利用wp_reset_postdata() 查询完成后,就在endif

您不能使用tag 作为您的短代码名称,它是reserved name 在Wordpress中

我相信你做事的顺序是导致你头痛的原因。此外,短代码应该return 其输出,而不是echo 信息技术看看Shortcode API 关于如何创建短代码

在检查代码中的任何内容或帖子是否有标记之前,实际上必须先获取当前帖子。没有这个,您的代码将无法工作。所以,首先要做的是打电话给您的全球$post. 一旦你有了它,你就可以把ID传给get_the_tags

完成后,您的代码应该可以正常工作

下面是一个示例:(警告:未测试)

add_shortcode(\'shortcodetag\', \'tags\');
function tags() {
    ob_start();
    global $post;

    $posttags = get_the_tags( $post->ID );
   if ( $posttags ) 
    {
        // Loop for each tag the custom post has
        foreach($posttags as $tag) 
        {
            $tag_name = ($tag->slug);

            // Search for posts with the same tag,
            // is a custom type and don\'t return
            // the current post
            $args = array(
                \'post_type\' => \'custom_post\',
                \'tag\' => $tag_name,
                \'post__not_in\' => array( $post->ID )
                );

            $query = new WP_Query( $args );

            // Make sure we got results
            if( $query->have_posts() ) 
            {
                // Loop through each returned post
                while ( $query->have_posts() )
                {
                    $query->the_post(); // Returns null

                    //LOOP ELEMENTS

                }
                wp_reset_postdata();
            }
        }
    }

     $myvariable = ob_get_clean();

     return $myvariable;

}

EDIT

正如@TomJNowell所建议的,我真的看不到这里使用短代码。你会做一个do_shortcode 在单个模板中。这与直接调用函数完全相同。

下面是一个示例来演示这一点,如果我正确理解了您的评论,那么我将以一个示例来演示如何使用模板标记显示某些帖子元素

function tags() {
global $post;

$posttags = get_the_tags( $post->ID );
   if ( $posttags ) 
    {
        // Loop for each tag the custom post has
        foreach($posttags as $tag) 
        {
            $tag_name = $tag->slug;

            // Search for posts with the same tag,
            // is a custom type and don\'t return
            // the current post
            $args = array(
                \'post_type\' => \'custom_post\',
                \'tag\' => $tag_name,
                \'post__not_in\' => array( $post->ID )
                );

            $query = new WP_Query( $args );

            // Make sure we got results
            if( $query->have_posts() ) 
            {
                // Loop through each returned post
                while ( $query->have_posts() )
                {
                    $query->the_post(); // Returns null
                        //LOOP ELEMENTS
                    the_title(); //display post title
                    if ( has_post_thumbnail() ) { // check if the post has a Post Thumbnail assigned to it.
                        the_post_thumbnail(); //display the featured image
                    } 
                    the_content(); //displays the post\'s content

                }
wp_reset_postdata();
            }
        }
    }
}

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post