我正在编写一个自定义插件。此插件的一个功能是向用户发送电子邮件,要求反馈我们的员工能够解决用户问题的程度。
我不确定这是如何完成的,但我设想能够通过链接向用户发送电子邮件:
<a href="https://example.com/feedback-survey/?id=... ">Take the Survey<a>
有人可以给我一些提示(代码会很棒)会告诉我如何在我的插件中注册一个页面/ slug,这个页面/ slug会在访问时从我的插件中动态生成吗?
我更喜欢不进行身份验证。 URI是一次性镜头。提交反馈表单后,feedback-survey/?id=
将无法再访问。它会产生一个“你已经接受过这项调查。”
这个虚拟页面的确切逻辑可能并不那么重要。那时我可以处理逻辑。具体来说,我只想知道如何注册一个slug / URI,并在我的插件中触发一个函数,以便在访问该URI时呈现页面/表单。
答案 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;
}