web-dev-qa-db-ja.com

AJAXスクリプト(Wordpress内)のファイルパス

私はこのjquery-ajaxスクリプトを使用して電子メールを送信します:

    $.ajax({
        url: process.php,    
        type: "POST",
        data: data,        
        cache: false,
    ...

in urlメールを送信するphpファイルを呼び出しますが、ajaxはフルパスを指定した場合にのみそれを取得します。

url: "http://www.domain.com/wp-content/themes/site_theme/templates/process.php",

しかし、私は次のような構文を使用する必要があります。

url: "../../templates/process.php",

または、変数を使用してhtmlヘッダー/フッターで宣言します

Html

<script type="text/javascript">
  var urlMail = '<?php bloginfo('template_url'); ?>/templates/process.php';
</script>

スクリプト

url: "../../templates/process.php",

ただし、上記の両方の場合で、ブラウザコンソールはこのエラーを取得します。

POST http://www.domain.com/templates/process.php 404 Not Found 1.56s

私はどこが間違っていますか?

11
Fred K

それはワードプレスでajaxを実装する方法ではありません。すべてのajaxリクエストはadmin-ajax.phpに対して行う必要があります。

テンプレートファイル内:

<script type="text/javascript">
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
</script>

あなたのjsで:

$.ajax({
        url: ajaxurl,    
        type: "POST",
        cache: false,
        data: data + '&action=sendmail' //action defines which function to use in add_action
});

あなたのfunctions.phpで:

function send_my_mail(){
#do your stuff
}

add_action('wp_ajax_sendmail', 'send_my_mail');
add_action('wp_ajax_nopriv_sendmail', 'send_my_mail');

Ajax in Plugins についてお読みください。

25
RRikesh

すべての「グローバル」値を1か所に保存するには、レジストリなどのシステムを使用することをお勧めします。

レジストリデザインパターン

これがあなたにとって興味深いかもしれないなら、私の小さなjQueryプラグインがあります。 GitHub rep

<script type="text/javascript">
    $.Registry.set('urlMail', '<?php get_bloginfo('template_url'); ?>/templates/process.php';
</script>

また、レジストリから値を取得するには、$。Registry.get( 'urlMail');を使用する必要があります。

0

RRikesh によって提供されるコードを使用して解決しましたが、置き換えます

data: data 

data: data + '&action=sendmail'
0
Fred K