如何为反馈调查创建虚拟页面

时间:2016-08-26 01:48:36

标签: wordpress

我正在编写一个自定义插件。此插件的一个功能是向用户发送电子邮件,要求反馈我们的员工能够解决用户问题的程度。

我不确定这是如何完成的,但我设想能够通过链接向用户发送电子邮件:

<a href="https://example.com/feedback-survey/?id=... ">Take the Survey<a>

有人可以给我一些提示(代码会很棒)会告诉我如何在我的插件中注册一个页面/ slug,这个页面/ slug会在访问时从我的插件中动态生成吗?

我更喜欢不进行身份验证。 URI是一次性镜头。提交反馈表单后,feedback-survey/?id=将无法再访问。它会产生一个“你已经接受过这项调查。”

这个虚拟页面的确切逻辑可能并不那么重要。那时我可以处理逻辑。具体来说,我只想知道如何注册一个slug / URI,并在我的插件中触发一个函数,以便在访问该URI时呈现页面/表单。

1 个答案:

答案 0 :(得分:1)

您可以为调查创建自定义帖子类型。

register_post_type( 'survey', // POST TYPE NAME
        array(
                'thumbnail',
                'labels' => array(
                        'name' => __( 'Surveys' ),
                        'singular_name' => __( 'survey' )
                ),
                'can_export'          => TRUE,
                'exclude_from_search' => FALSE,
                'publicly_surveyable'  => TRUE,
                'menu_icon'           => 'dashicons-format-chat',
                'survey_var'           => 'survey',
                'show_ui'             => TRUE,
                'public' => true,
                'has_archive' => true,
                'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes', 'excerpt' ),
                'hierarchical' => true,
                'show_in_menu'        => TRUE,
                'show_in_nav_menus'   => TRUE,
                'taxonomies' => array('person_type')
        )
);

然后在调查帖子创建时。 $ thash 是一个随机的帖子名称,它比show ID更好。并链接到 yourpage.net/survey/$thash

function insertSurvey($title, $content) {
    $t = time();
    $thash = md5($t);

    $my_query = array(
        'post_title'    => wp_strip_all_tags( $title ),
        'post_content'  => $content,
        'post_type' => 'survey',
        'post_name' => $thash,
        'post_status'   => 'publish',
        'post_author'   => 1
    );
    $data = wp_insert_post( $my_query );
}

然后发送电子邮件

function contact_form_init() {
    $name = strip_tags($_POST['name']);
    $tel = strip_tags($_POST['tel']);
    $email = strip_tags($_POST['email']);
    $text = strip_tags($_POST['message']);


        $subject = 'Subject';

        $headers = "From: wordpress@yoursite.com \r\n";
        $headers .= "Reply-To: replay@ryoursite.com \r\n";
        $headers .= "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

        $message = '<html><body>';
        $message .= '<h1>Title/h1>';
        $message .= '<p><strong>Name</strong>: '.$name.'</p>';
        $message .= '<p><strong>Phone</strong>: '.$tel.'</p>';
        $message .= '<p><strong>Email</strong>: '.$email.'</p>';
        $message .= '<p><strong>Message</strong>: '.$text.'</p>';
        $message .= '<p>Send on: '.date("F j, Y, g:i a").'</p>';
        $message .= '</body></html>';

        mail($to, $subject, $message, $headers);


    exit;
}