2012-05-14 40 views
7

私は今何日も立ち往生していないという問題があります... 私は単純なajaxPOST関数を使用してMySQLデータベースにデータを送信しようとしています(WPデータベースではありません)。WordPressテーマにajaxを追加するには

このコードは、すべての投稿の前にチェックする必要があるため、テーマの「single-post.php」内にあります。

$.ajax({ url: 'library/functions/admin_checkuser.php', 
    data: {action: userID}, 
    type: 'post', 
    success: function(output) { 
        alert(output); 
    } 
}); 

私は単純に順番にデータベース上の措置をとる別のスクリプトを呼び出す「admin_checkuser.php」スクリプトに変数を送信しています。

これは「admin_checkuser」のコードです:

$userid = $_POST['action']; 

echo $userid;//for testing 
$oMySQL = new MySQL(); 
$query = "Select * FROM videotable WHERE uid = '$userid'"; 
$oMySQL->ExecuteSQL($query); 
$bb = $oMySQL->iRecords; 
$aa = $oMySQL->aResult; 
echo $bb; 

if ($bb == 0){ 
$query = "INSERT INTO videotable VALUES ('','$userid','true')"; 
$oMySQL->ExecuteSQL($query); 
echo 'true'; 
    exit(); 

}else{ 
$sharing = mysql_result($aa,0,"share"); 
echo $sharing; 
exit(); 

} 

しかし、私は、呼び出しがスクリプトに通過とは思いません。 これらのスクリプトは、WordPressの外でテストされて動作したので、WordPressの中でajax呼び出しをブロックするものでなければなりません。 ところで、私は "admin_checkuser.php"を多くの異なるフォルダに配置しようとしましたが、何も機能しませんでした。

ありがとうございます。

+1

Firebugのネットタブ(HTTPFox)のようなものを使って、実際にajax呼び出しが行われたかどうかを確認したり、サーバーのアクセスログを見たりします。 –

答えて

2

あなたのajax呼び出しのURLを確認する必要があります。

相対URLの代わりに完全なURLを使用することもできます。

あなたのテーマの場所が原因で、URLが正しくない可能性があります。私はあなたのajaxコードがあなたのテーマフォルダにあると仮定しています。

テーマディレクトリを取得するいくつかのワードプレス関数があります。

たとえば、このページでhttp://yourwebpage/test/の場合、ajaxコールはhttp://yourwebpage/test/library/functions/admin_checkuser.phpになります。これは私が間違った場所になると思います。

このため、スクリプトに絶対URLを追加する必要があります。あなたのテーマにある場合は、この方法get_template_directory_uri()を使用してテンプレートディレクトリを取得することができます。

はこちらをご覧ください:http://codex.wordpress.org/Function_Reference/get_template_directory_uri

+0

10倍!私はこれで多くの時間を無駄にした – user1108310

24

あなたは作り付けのWordpressのAJAX要求を使用してオフにはるかに優れています。

だからあなたのテーマfunctions.phpファイル、例えば、呼び出されるあなたの機能を追加して:その後

function checkUser() { 

    $userid = $_POST['user']; //validation also :) 
    $oMySQL = new MySQL(); 
    $query = "Select * FROM videotable WHERE uid = '$userid'"; 
    $oMySQL->ExecuteSQL($query); 
    $bb = $oMySQL->iRecords; 
    $aa = $oMySQL->aResult; 
    echo $bb; 

    if ($bb == 0){ 
    $query = "INSERT INTO videotable VALUES ('','$userid','true')"; 
    $oMySQL->ExecuteSQL($query); 
    echo 'true'; 
     exit(); 

    } else { 
    $sharing = mysql_result($aa,0,"share"); 
    echo $sharing; 
    exit(); 

    } 
} 

、あなたが

add_action('wp_ajax_check_user', 'checkUser'); 
add_action('wp_ajax_nopriv_check_user', 'checkUser'); 

wp_ajax_nopriv_%s作り付けのAJAXシステムに接続すると、あなたのフックを追加フロントエンドから呼び出すことができます。

そして、あなたのjavascriptファイルでは、あなたはajaxリクエストを起動します。

$.post(ajaxurl, { action: 'check_user', user: userId }, function(output) { 
    alert(output); 
}); 

ajaxurlが定義されていない場合、あなたはこのような何かが動作するはずです、あなたのテンプレートファイルでそれを作成する必要がありますが、他の方法があります。

add_action('wp_head','ajaxurl'); 
function ajaxurl() { 
?> 
<script type="text/javascript"> 
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>'; 
</script> 
<?php 
} 

wordpressのバックエンドは残りを行います。

AJAX要求で渡されたアクションを受け取り、対応する`wp_ajax(_nopriv)_%sフックを探して、フックに割り当てられている関数を呼び出します。

また、AJAXリクエストのタイプによっては、$_POSTまたは$_GETのいずれかが渡されます。

AJAX inside of Wordpressについてもう少し詳しく読むことができます。

+0

すばらしい答えをありがとう! admin-ajaxに「add_action」を入れるのはどこですか?ちょうどそこにそれを投げる? – user1108310

+0

これはテーマの 'functions.php'ファイルに入っています。関数定義の下または下には、整然と保つことができます。 – Stoosh

+0

ええ、私はここStooshに同意します。この道を行く方が良いです。 – Gohn67

関連する問題