-2

私のクライアントは大学の教授で、Wordpress を利用したウェブサイトに学生向けのオンライン クイズを追加したいと考えています。そこで私は、彼や管理者が管理ページからこれらのクイズを作成できるようにするカスタム プラグインを構築しています。この情報はすべて、mysql データベースの独自のテーブルに保存されます。ここでは問題ありません。迷子になったのは、学生・ブログの一般ユーザーにクイズを見せているときです。

私が欲しかったのは、これらのクイズを生成する方法でした。最初は$_GET、生徒がやりたいクイズの ID をパラメーターとして使用するとうまくいくと思いましたが、それではどこに行くのでしょうか。wordpress のメイン ディレクトリに別の php ファイルを使用する必要がありますか (それでうまくいきますか)?

通常の古い投稿を作成し、コードをショートコードで平手打ちする必要がありますか? カスタム投稿タイプを使用する必要がありますか? (ただし、クイズはデータベースに既に作成されていることを思い出してください。クイズごとに、カスタムまたは定期的に 1 つの投稿を作成するのは過度で複雑に思えます。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 に答える