web-dev-qa-db-ja.com

プラグインを使用してフォームデータに基づいて動的ページを作成する方法

ユーザーが記入するフォームがあります。終了すると、支払いオプションを設定するためにサードパーティのサイトにリダイレクトされます。支払いプロセスが完了すると、それらはさまざまな$ _POST変数と共に私のサイトに送り返されます。

私のプラグインはそれらのPOST変数に基づいてお礼のページを作成する必要があります。タイトルと数段落のテキストが含まれたシンプルな小さなページです。

これらのページをデータベースに保存したくありません。各トランザクションに固有のものになります。

$ _POSTデータを解析する関数をinitにアタッチしました(もちろんサニタイズの後)。その関数は2つのグローバル変数を作成します:$my_title$my_contentしかし、それらをユーザーのためのページに変える方法はわかりません。

支払いシステムはwww.mysite.com/thank-youにユーザーを送ります

これまでのところ、私は自分のURLを追加するためにrewrite_rules_arrayにフィルタをかけています。

function my_rewrite_rules( $rewrite_rules) {
    $rule = array('thank-you/?$' => 'index.php?formresult=thank-you');
    $rewrite_rules = $rule + $rewrite_rules;
    return $rewrite_rules
}

私は私の追加のためにquery_varsをフィルタリングします。

function my_insert_qv($vars) {
    array_Push($vars, 'formresult');
    return $vars;
}

それから、私はtemplate_redirectに対してアクションを起こすべきだと思います。たぶんこれは間違った道です。

function my_template_redirect() {
    gloval $wp;
    $qvs = $wp->query_vars;
    if (array_key_exists( 'laundry', $qvs && $qvs['laundry'] == 'thank-you' ) {
        global $wp_query;
        $wp_query->set( 'is_404', false );
        // ... now what?
    }
}

アクティブなテーマからデフォルトのページテンプレートを読み込み、動的なタイトルとコンテンツを表示するページをユーザーに表示する方法を教えてください。

1
Peter G

このようなことでうまくいくはずですが、メタ、タイトルなどがどのように振る舞うのかよくわかりませんが、すべてを徹底的にテストする必要があります。

function my_template_redirect() {
    global $wp;
    $qvs = $wp->query_vars;
    if (array_key_exists( 'laundry', $qvs && $qvs['laundry'] == 'thank-you' ) {
        global $wp_query;
        $wp_query->set( 'is_404', false );
        // ... now what?

        $post = new stdClass();
        $post->ID= -99; // fake ID, hehe
        $post->post_content = 'some content';
        $post->post_excerpt = 'an excerpt';
        $post->post_status ='publish';
        $post->post_title = 'My fake page';
        $post->post_type = 'page';
        $wp_query->queried_object = $post;
        $wp_query->post = $post;
        $wp_query->found_posts = 1;
        $wp_query->post_count = 1;
        $wp_query->max_num_pages = 1;
        $wp_query->is_page = 1;
        $wp_query->is_404 = false;
        $wp_query->posts = array($post);
        $wp_query->page = 1;
        $wp_query->is_post = false;

    }
}
1
Milo