これは私のipn.phpで、Paypalの取引が完了したときにユーザーにメールを送信しています。
問題は、私はWPデータベースで注文の状態を変更する必要があり、電子メールを送信するだけではないことです。
私はそのトランザクションのユニークな$code
変数(整数)を知っていて(フォームが送られユーザーがPaypalページでプロセスを終了するようにリダイレクトした)そしてPaypalはそれをカスタムフィールド$_POST['custom']
内のipn.phpファイルに送り返しています。
したがって、ipn.php(トランザクションが成功したときにnotify_urlとしてPaypalからアクセスされる)のコードは次のようになります。
<?php
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
// post back to Paypal system to validate
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('ssl://www.sandbox.Paypal.com', 443, $errno, $errstr, 30);
// CUSTOM VARIABLE
$code = $_POST['custom'];
if (!$fp) {
// ERROR
} else {
$email = "[email protected]" ;
$subject = "Test" ;
$message = "Your code is {$code}" ;
mail($email, $subject, $message, "From:" . $email);
fclose ($fp);
}
そのため、Eメールは想定どおりのコード値で「OK」で送信されます。
ただし、すべてのユーザー(投稿の種類)に固有の$ codeに基づいてWPデータベースからユーザーの電子メールを取得し、dbの注文の状態を変更する必要もあります。
その方法は知っていますが、問題はWPがロードされていないため、データベースにアクセスしてこれらの操作を実行できないことです。
どうやってするか?
つまり、WP dbにアクセスするにはどうすればいいですか?
} else {
// BEFORE SENDING I NEED TO ACCESS WP DB HERE...
// AND THEN SEND THE EMAIL
$email = "[email protected]" ;
$subject = "Test" ;
$message = "Your code is {$code}" ;
mail($email, $subject, $message, "From:" . $email);
fclose ($fp);
}
これをスクリプトの先頭に追加してみてください。
require('/path/to/httpdocs/wp-blog-header.php');
global $wpdb;
その後、次のようにしてクエリを実行できます。
$sql = "Your SQL Query Here";
$wpdb->get_results($sql)