-2

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

我想要的是一种生成这些测验的方法。起初,我认为$_GET学生想要做的带有测验 ID 的参数可以解决问题,但是,那会去哪里呢?我是否应该在 wordpress 的主目录中使用单独的 php 文件(甚至可以使用)?

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

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

4

1 回答 1

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']);

  }

}
于 2013-07-15T21:12:06.067 回答