新鲜的wordpress安装调用未定义的功能

时间:2013-10-29 17:15:58

标签: php jquery ajax wordpress themes

大家好!

似乎我无法在functions.php 中使用任何wordpress功能。我正在为wordpress创建一个主题,我在其中使用缩略图,因为在使用wordpress版本3.7时,我必须在functions.php文件中声明为此添加主题支持。我这样做是通过使用。这适用于我,我可以添加图像到我的帖子。

但是当我添加一个使用ajax向functions.php。(I use the method described in this article)发送电子邮件的脚本时,问题就出现了。 这里的问题是我没有得到应该成功的消息,电子邮件也不会发送。当我用ajax返回来自functions.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

的functions.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        #
    ###################

修改 Heres a github link to the theme for easier viewing.

2 个答案:

答案 0 :(得分:2)

你做的AJAX错了!

您正在将url: "/max/wp-content/themes/PortfolioTheme/functions.php",称为ajax网址。这将在技术上调用functions.php而不加载WordPress,因此没有WordPress函数可用。

在WordPress中,所有Ajax调用都应该发送到admin-ajax.php,并且必须传递一个名为action的变量来区分不同的Ajax调用。

查看Codex for examplesmy answer there

答案 1 :(得分:0)

通过电子邮件发送已填写的表单,我只是将提交链接到formmail。它已经设置了所有内容,您无需在functions.php文件中添加一堆代码。我不需要ajax风格的形式,所以它对我有用。