从插件动态生成数据库中的quizz内容

时间:2013-07-15 20:08:10

标签: php wordpress plugins

我的客户是一名大学教授,他希望在他的Wordpress支持的网站上为他的学生添加在线测验等等。因此,我构建了一个自定义插件,允许他或任何管理员从管理页面进行这些测验。所有这些信息都保存在自己的表中的mysql数据库中,这里没问题。在向我丢失的博客的学生/普通用户展示测验时。

我想要的是一种生成这些测验的方法。首先,我想出一个$_GET参数,其中包含学生想要做的测验ID,但是那时,哪个会去哪里?我应该在wordpress的主目录中使用单独的php文件(甚至可以工作)?

我应该创建一个常规的旧帖子并使用短代码拍打代码吗?我应该使用自定义帖子类型吗? (但是请记住测验已经在数据库中创建了,我觉得为每个测验做一个帖子,自定义或常规,看起来过于复杂。你甚至可以创建一个wordpress页面动态并传递参数吗?)

或者有没有办法使用钩子来重写主页面以显示我的代码而不是循环(或任何其他地方)?或者我太遥远了,还有另一种方法吗?

1 个答案:

答案 0 :(得分:1)

您可以像使用自定义模板一样轻松完成。例如,创建一个名为“Quiz”的页面和一个名为quiz.php的自定义模板。在该模板中,您只需在查询字符串中查找测验ID,然后显示它:

if($_GET['quiz_id']){
/** code to retrieve and output the quiz */
}
else{
/** code for them to select a quiz */
}

这是一个简单的方法。要以更加流畅的方式执行此操作,您可能会使用重写端点API(http://codex.wordpress.org/Rewrite_API/add_rewrite_endpoint

之类的东西。

一个例子是:

/** add a custom function to the init hook */
add_action('init', 'my_custom_endpoint');


/** custom endpoint for handling forms */
function my_custom_endpoint(){
  add_rewrite_endpoint('forms', EP_ALL);
  /** when pages are loaded, check to see if it's a form page and do something */
  add_action( 'template_redirect', 'process_form' );
}

EP_ALL是端点掩码 - 它告诉WordPress应用新端点的位置。您可以将它仅应用于页面,仅应用于帖子等。在这种情况下,您将在任何地方添加端点。

然后你有一个实际处理端点的函数:

function process_form(){
  global $wp_query;
  /** check for your endpoint. A URL like site.com/forms/12 would set forms = 12 */
  if(isset($wp_query->query_vars['forms'])){
    /** the query var forms has a value, do something to show the form */
    echo get_form($wp_query->query_vars['forms']);

  }

}