大家好!
似乎我不能在函数中使用任何wordpress函数.php。我正在为 wordpress 创建一个主题,其中我使用缩略图,因为在使用 wordpress 版本 3.7 时,我必须在函数.php文件中声明以为此添加主题支持。我通过使用.这对我有用,我可以在我的帖子中添加图像。
但是当我添加了一个使用 ajax 向函数发送电子邮件的脚本时,问题就开始了.php。(我使用本文中描述的方法)。这里的问题是我没有收到我应该收到的成功消息,并且电子邮件不会发送。当我使用 ajax 从函数返回数据时.php(如果我实时查看它,我会收到相同的消息)我得到消息:
<b>Fatal error</b>: Call to undefined function add_theme_support() in <b>C:'xampp'htdocs'max'wp-content'themes'PortfolioTheme'functions.php</b> on line <b>2</b><br />
所以我尝试洗牌函数并添加上面的邮件脚本,但随后我只收到wp_mail函数的相同消息:
<b>Fatal error</b>: Call to undefined function wp_mail() in <b>C:'xampp'htdocs'max'wp-content'themes'PortfolioTheme'functions.php</b> on line <b>16</b><br />
所以我尝试了其他一些wordpress函数,同样的事情发生了,我不知道为什么!
我尝试重新安装wordpress和更改文件等。问题可能与主题本身有关,但我不知道是什么原因造成的。感谢任何帮助!
Php 版本:5.4.19
WordPress版本:3.7
功能.php:
<?php
// Email Submit
// Note: filter_var() requires PHP >= 5.2.0
if ( isset($_POST['email']) && isset($_POST['name']) && isset($_POST['text']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {
// detect & prevent header injections
$test = "/(content-type|bcc:|cc:|to:)/i";
foreach ( $_POST as $key => $val ) {
if ( preg_match( $test, $val ) ) {
exit;
}
}
//send email
wp_mail( "MYEMAIL@something.se", "Contact Form: ".$_POST['name'], $_POST['text'], "From:" . $_POST['email'] );
}
add_theme_support( 'post-thumbnails' );
?>
JavaScript(jquery):
<script type="text/javascript">
$(document).ready(function(){
// Contact Form
$("#contact").submit(function(e){
e.preventDefault();
var name = $("#name").val();
var email = $("#email").val();
var text = $("#text").val();
var dataString = 'name=' + name + '&email=' + email + '&text=' + text;
function isValidEmail(emailAddress) {
var pattern = new RegExp(/^((([a-z]|'d|[!#'$%&''*'+'-'/='?'^_`{'|}~]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])+('.([a-z]|'d|[!#'$%&''*'+'-'/='?'^_`{'|}~]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])+)*)|(('x22)(((('x20|'x09)*('x0d'x0a))?('x20|'x09)+)?((['x01-'x08'x0b'x0c'x0e-'x1f'x7f]|'x21|['x23-'x5b]|['x5d-'x7e]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(''(['x01-'x09'x0b'x0c'x0d-'x7f]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF]))))*((('x20|'x09)*('x0d'x0a))?('x20|'x09)+)?('x22)))@((([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])([a-z]|'d|-|'.|_|~|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])*([a-z]|'d|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])))'.)+(([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])|(([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])([a-z]|'d|-|'.|_|~|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])*([a-z]|['u00A0-'uD7FF'uF900-'uFDCF'uFDF0-'uFFEF])))'.?$/i);
return pattern.test(emailAddress);
};
if (isValidEmail(email) && (text.length > 1) && (name.length > 1)){
$.ajax({
type: "POST",
url: "/max/wp-content/themes/PortfolioTheme/functions.php",
data: dataString,
success: function(data){
console.log(data);
//this wont run b/c of the php error
funcs.success();
}
});
} else{
funcs.fault();
}
return false;
});
var funcs={
success:function(){
$("#name").val("");
$("#email").val("");
$("#text").val("");
$('.success').addClass('MsgShow');
$('.error').removeClass('MsgShow');
},
fault:function(){
$('.error').addClass('MsgShow');
$('.success').removeClass('MsgShow');
}
}
});
</script>
主题结构:
###################
#css #
#fonts #
#images #
#js #
# #
#404.php #
#footer.php #
#functions.php #
#header.php #
#index.php #
#page.php #
#single.php #
#style.css #
###################
编辑这是主题的 github 链接,以便于查看。
你做错了AJAX!
您正在调用url: "/max/wp-content/themes/PortfolioTheme/functions.php",
作为 ajax url。这将在技术上调用functions.php
而不加载WordPress,因此没有WordPress功能可用。
在WordPress中,所有Ajax调用都应该admin-ajax.php
,并且必须传递一个名为action
的变量来区分不同的Ajax调用。
看看法典的例子和我的答案。
对于通过电子邮件填写的表单,我刚刚将提交链接到表单邮件。它已经设置了所有内容,您不必向函数.php文件添加一堆代码。我不需要ajax风格的表单,所以它对我有用。