是什么让wordpress add_shortcode停止工作?

时间:2011-02-16 19:45:39

标签: wordpress wordpress-plugin shortcode

我已经多次在wordpress上安装WordPress,通过SVN并替换文件夹...数据库始终保持不变。突然,来自SVN的新副本无法使用以下代码在两台不同的计算机上运行,​​来自 wp survey and quiz tool

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且页面只显示此内容:

[wpsqt_quiz name="test"]

而不是将其替换为预期的quiz.php

现在我刚删除数据库得到了全新的wordpress和插件安装,当然一切正常。如果我得到SVN版本,这不是所有修改过的(它只有一个插件 - 魔术字段 - 和一个自定义主题),删除插件并再次安装,它仍然无效!

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

1 个答案:

答案 0 :(得分:1)

从昨天开始,这个问题一直困扰着我。终于找到了原因,(现在)显然在自定义模板上。

标题包含对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"]添加到模板页面。

就是这样。