web-dev-qa-db-fra.com

Comment créer une page dynamique basée sur les données de formulaire avec un plugin?

J'ai un formulaire que les utilisateurs remplissent. Quand ils ont fini, ils sont redirigés vers un site tiers pour configurer les options de paiement. Une fois le processus de paiement terminé, ils sont renvoyés sur mon site avec diverses variables $ _POST.

Mon plugin doit créer une page de remerciement basée sur ces variables POST. C'est une simple petite page avec un titre et quelques paragraphes de texte.

Je ne veux pas que ces pages soient stockées dans la base de données. Elles seront uniques pour chaque transaction.

J'ai attaché une fonction à init qui analyse les données $ _POST (après la désinfection, bien sûr.) Cette fonction crée deux variables globales: $my_title et $my_content. Cependant, je ne suis pas sûr de savoir comment les transformer en une page pour l'utilisateur.

Le système de paiement enverra les utilisateurs à www.mysite.com/thank-you

Jusqu'à présent, j'ai un filtre sur rewrite_rules_array pour ajouter mon URL:

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

Je filtre query_vars pour ajouter le mien:

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

Ensuite, j'ai une action sur template_redirect où je pense que l'action devrait être. Peut-être que c'est le mauvais chemin.

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?
    }
}

Comment puis-je montrer à l'utilisateur une page qui charge le modèle de page par défaut à partir du thème actif et affiche mon titre et mon contenu dynamiques?

1
Peter G

Quelque chose comme cela devrait fonctionner, bien que je ne sois pas sûr de la façon dont les méta, titres, etc. se comporteront, vous voudrez tout tester à fond!

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