我已经多次在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工作所需的一切是什么?
答案 0 :(得分:1)
从昨天开始,这个问题一直困扰着我。终于找到了原因,(现在)显然在自定义模板上。
标题包含对query_posts
的调用,据说每页加载只能调用一次。然后是wp_reset_query
到rescue。可是等等!似乎这两个函数都被弃用了,不应该使用它们!相反,我们应该始终使用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"]
添加到模板页面。
就是这样。