短码循环的POST变量问题

时间:2011-06-15 作者:Lee

我有一个函数,可以使用wp\\u list\\u页面在侧栏php文件中显示页面的子级:

global $post; ?>
        <div id="subChildren">
        <?php if($post->post_parent)
        $children = wp_list_pages("sort_column=menu_order&title_li=&child_of=".$post->post_parent."&echo=0"); else
        $children = wp_list_pages("sort_column=menu_order&title_li=&child_of=".$post->ID."&echo=0");
        if ($children) { ?>
        
        <ul id="submenu">
        <?php echo $children; ?>
         
        </ul>
我还创建了一个使用查询帖子显示自定义帖子类型的快捷码:

function casestudy_shortcode()
    {
    extract(shortcode_atts(array(
            \'type\' => \'case_studies\',
            \'limit\' => \'1\',
            \'case\' => \'\',
            \'size\' => \'small\'
            ),$atts));
     
            //The Query
        query_posts(\'post_type=\'.$type.\'&showposts=\'.$limit.\'&p=\'.$case);

        //The Loop
       if ( have_posts() ) : while ( have_posts() ) : the_post();
                   //return sb_post_image(\'100\',\'100\');
                //the_post_thumbnail(\'portfolio\'); 
                return  "<div class=\'".$size."\'><a href=\\"".get_permalink()."\\">".get_the_title()."</a>" . get_the_excerpt() ."</div>";;
      
        endwhile; else:
    endif;
     
        wp_reset_query();    
        
    }
    add_shortcode(\'casestudy\', \'casestudy_shortcode\');
我的问题是,当短代码位于页面中时,它会使子页面不显示。我假设它覆盖了$post变量。

我曾尝试使用wp_查询,并为短代码获取_帖子,但我得到了相同的结果。

有办法解决这个问题吗?

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

你真的不应该用query_posts() 对于页面的主查询以外的任何内容。相反,您应该使用wp_query()get_posts() , 此外,由于您在运行wp\\u reset\\u query()之前返回了一个值,因此它实际上从未被重置。

因此,请将您的短代码更改为:

function casestudy_shortcode($atts){
    extract(shortcode_atts(array(
            \'type\' => \'case_studies\',
            \'limit\' => \'1\',
            \'case\' => \'\',
            \'size\' => \'small\'
            ),$atts));

    //save the real $post
    global $post; 
    $real = $post;

    //The Query
    $args = array(
        \'post_type\' => $type,
        \'posts_per_page\' => $limit);
    if ($case != \'\'){
        $args[\'p\'] = $case;
    }

    $s_query = NEW WP_Query($args);


    //The Loop
    if ( $s_query->have_posts() ) : while ( $s_query->have_posts() ) : $s_query->the_post();
        //return sb_post_image(\'100\',\'100\');
        //the_post_thumbnail(\'portfolio\'); 
        $return .= "<div class=\'".$size."\'><a href=\\"".get_permalink()."\\">".get_the_title()."</a>" . get_the_excerpt() ."</div>";
    endwhile; else:
    endif;
     $post = $real;
        wp_reset_query();    
        return $return;

}
    add_shortcode(\'casestudy\', \'casestudy_shortcode\');

结束

相关推荐

Nested Shortcode Detection

如果您熟悉此代码<?php $pattern = get_shortcode_regex(); preg_match(\'/\'.$pattern.\'/s\', $posts[0]->post_content, $matches); if (is_array($matches) && $matches[2] == \'YOURSHORTCODE\') { //shortcode is being used }&#