在php AJAX表单中使用get_heme_mod不起作用

时间:2016-09-14 作者:Ben

我在wordpress网站的一个页面上有一个表单,它用一个php文件发送邮件,该文件还可以验证表单的详细信息。

我无法理解为什么它不起作用,直到我发现如果我删除这一行:

$site_name      = get_theme_mod( \'cz_pros_names_man\' );
从发送邮件并进行表单验证的php文件来看,一切都很好。

So my quetion is:是否get_theme_mod 函数假定在非模板文件的文件中工作?如果是这样的话,是什么让它不起作用:)?

This is my form:

<div class="contact_body">
<input placeholder="שם" type="text" name="name" required="required" class="clientconin first"/>
<input placeholder="משפחה" type="text" name="lastname" required="required" class="clientconin"/>
<input placeholder="מייל" type="email" name="email" required="required" class="clientconin first"/>
<input placeholder="טלפון" type="text" name="phone" maxlength="15"  required="required" class="clientconin" />
<textarea placeholder="הודעה" name="message" class="textarea-field"></textarea>
<input type="hidden" name="promailto" value="<?php $thisprouserid = get_post_field( post_author, $post->ID ); $user_info = get_userdata($thisprouserid); echo $user_info->user_email; ?>">
<input type="submit" class="clietact_sbmt_btn" value="שלח" /><div class="contact_results"></div>
</div>

And this is the mail php file:

<?php
if($_POST)
{

    //check if its an ajax request, exit if not
    if(!isset($_SERVER[\'HTTP_X_REQUESTED_WITH\']) AND strtolower($_SERVER[\'HTTP_X_REQUESTED_WITH\']) != \'xmlhttprequest\') {

        $output = json_encode(array( //create JSON data
            \'type\'=>\'error\', 
            \'text\' => \'משהו לא בסדר, צור קשר עם האתר הראשי.\'
        ));
        die($output); //exit script outputting json data
    } 

    //Sanitize input data using PHP filter_var().
    $site           = \'פנייה מאתר\';
    $site_name      = get_theme_mod( \'cz_pros_names_man\' );
    $user_name      = filter_var($_POST["user_name"], FILTER_SANITIZE_STRING);
    $user_lastname  = filter_var($_POST["user_lastname"], FILTER_SANITIZE_STRING);
    $user_email     = filter_var($_POST["user_email"], FILTER_SANITIZE_EMAIL);
    $phone_number   = filter_var($_POST["phone_number"], FILTER_SANITIZE_NUMBER_INT);
    $message        = filter_var($_POST["msg"], FILTER_SANITIZE_STRING);
    $subject        = \'פניית לקוח מהכרטיס שלך\';
    $to_email       = filter_var($_POST["pro_mailto"], FILTER_SANITIZE_STRING);

    //additional php validation
    if(!filter_var($user_email, FILTER_VALIDATE_EMAIL)){ //email validation
        $output = json_encode(array(\'type\'=>\'error\', \'text\' => \'כתובת המייל לא תקינה!\'));
        die($output);
    }
    if(!filter_var($phone_number, FILTER_SANITIZE_NUMBER_FLOAT)){ //check for valid numbers in phone number field
        $output = json_encode(array(\'type\'=>\'error\', \'text\' => \'מספר טלפון שגוי!\'));
        die($output);
    }
    if(strlen($phone_number)<9){ //check emtpy message
        $output = json_encode(array(\'type\'=>\'error\', \'text\' => \'מספר טלפון שגוי!\'));
        die($output);
    }

    //email body
    $message_body = "הודעה:\\r\\n\\r\\n".$message."\\r\\n\\r\\nשם : ".$user_name." ".$user_lastname."\\r\\nטלפון :".$phone_number."\\r\\n\\r\\nניתן להשיב למייל זה ישירות ללקוח!" ;

    //proceed with PHP email.
    $headers .= \'From: "\'.$site." ".$site_name.\'"<\'.$user_email.\'>\'."\\r\\n";
    $headers .= \'Reply-To: "\'.$user_name." ".$user_lastname.\'"<\'.$user_email.\'>\'."\\r\\n";
    $headers .= \'X-Mailer: PHP/\' . phpversion();

    $send_mail = mail($to_email, $subject, $message_body, $headers);

    if(!$send_mail)
    {
        //If mail couldn\'t be sent output error. Check your PHP email configuration (if it ever happens)
        $output = json_encode(array(\'type\'=>\'error\', \'text\' => \'משהו לא בסדר, צור קשר עם האתר הראשי.\'));
        die($output);
    }else{
        $output = json_encode(array(\'type\'=>\'message\', \'text\' => \'ההודעה נשלחה בהצלחה!\'));
        die($output);
    }
}
?>
谢谢。

1 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

您永远不应该直接访问主题文件、表单提交、ajax,甚至just get请求都会在服务器级别被某种安全强化措施阻止。

暂时忽略这一点,代码失败的原因是wordpress没有引导,因此没有可用的核心函数。实际上,从安装了wordpress文件的主题文件中查找并引导它并不是100%的故障安全过程,这也是不尝试直接访问主题文件的另一个原因。

你需要决定一个“普通”的wordpress url以提交到表单(pos所在的帖子?),可能会在init 钩子,或者使用ajax并编写适当的ajax钩子和处理程序。

相关推荐

尝试在WordPress中实现AJAX注释,遇到WP错误

我试图在WordPress中为我的评论实现Ajax,使用this tutorial. 但我在将教程中的代码集成到自己的预构建主题时遇到了问题。问题是,我要么得到一个WP错误“检测到重复注释;看来你已经说过了!”或标准500错误。以下是我得到的:下面是我对ajax的评论。js文件如下所示: * Let\'s begin with validation functions */ jQuery.extend(jQuery.fn, { /* * check i