2011-02-16 60 views
1

我已经在wordpress上多次安装了WordPress,通过SVN和替换文件夹...数据库始终保持不变。突然从SVN新副本不能在两台不同的机器用下面的代码工作,从WP调查和测验工具什么使WordPress的add_shortcode停止工作?

function wpsqt_main_site_quiz_page($atts) { 

    extract(shortcode_atts(array(
        'name' => false 
    ), $atts)); 

    if (!$name){ 
     require_once WPSQT_DIR.'/pages/general/error.php'; 
    } 

    require_once WPSQT_DIR.'/includes/site/quiz.php'; 
    ob_start(); 
    wpsqt_site_quiz_show($name); 
    $content = ob_get_contents(); 
    ob_end_clean(); 
    return $content; 
} 

add_shortcode('wpsqt_page' , 'wpsqt_main_site_quiz_page');// Deprecated and will be removed 
add_shortcode('wpsqt_quiz' , 'wpsqt_main_site_quiz_page'); 

如果我使用echo看到那里正在达成的代码,add_shotcode是正达而里面的功能是不是和页面只是显示这个:

​​

而是与预期quiz.php替换它。

现在我刚刚删除了数据库得到了全新安装的wordpress和插件,当然一切正常。如果我得到的SVN版本并不是全部修改过的(它只有1个插件 - Magic Fields和一个自定义的主题),请删除插件并重新安装它,但它仍然不起作用!

这里可能会出现什么问题?什么是使add_shortcode工作所需的一切?

回答

0

自昨天以来,这个问题一直困扰着我。最后找出原因,(现在)显然在自定义模板上。

头部包含对query_posts的调用,该调用据说每页加载只能调用一次。然后有wp_reset_queryrescue。可是等等!似乎这两个函数都被弃用,都不应该使用!相反,我们应该始终使用WP_query object

所以,这个工作,但它的错误

<?php query_posts('showposts=10'); ?> 
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> 
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li> 
<?php endwhile; endif; ?> 
<?php wp_reset_query(); ?> 

这是正确和恰当的方式

<?php $r = new WP_Query(array('showposts' => '10', 'what_to_show' => 'posts', 'nopaging' => 0, 'post_status' => 'publish', 'caller_get_posts' => 1)); ?> 
<?php if ($r->have_posts()) : while ($r->have_posts()) : $r->the_post(); ?> 
    <li><a href="<?php the_permalink() ?>"><?php the_title() ?></a></li>  
<?php endwhile; endif; ?> 

没有这个,页面本身是对后续query_posts没有正确加载,因此内部的[wpsqt_quiz name="test"](在页面文章中)永远不会被调用。

此外,它似乎不能添加到模板页面[wpsqt_quiz name="test"]

就是这样。

+1

不建议使用'query_posts'或'wp_reset_query'。 'query_posts'旨在修改哪些帖子在主循环中,创建一个新的'WP_Query'(或者使用'get_posts')是你想要在模板中创建一个_new_独立循环时应该做的事情。 –

+0

@richard这就是为什么我说“看起来” - 懒得对它做适当深入的研究。感谢您的意见。最终我可能会修正我的答案以反映你的教导! :P – cregox