リンク集のページでクリック数が多い順に表示するときに作成したものです。WordPressが用意しているAjaxはめんどうなので使用していません。 ページの中に入ればsingle.phpでカウントできるのですが、クリックして直ぐリンク先に飛ばないといけないのでphpでは処理できませんのでjQueryで処理する必要があります。クリックされたことをサーバーに伝えるためAjax通信を使用することになります。
スポンサーリンク
プログラムの概要
今回作成したプログラムは、リンク先のページを一つ一つにカスタム投稿タイプで作成して、カスタムフィールドにリンク先のURLとカウントを作成しました。aタグをクリックしたら、そのURLをサーバーに送信します。サーバーはURLを受信したら直接データベースにアクセスしてURLをさがします。URLを見つけたらその投稿IDでカウントをアップします。
データ送り側 jQueryのソース
link-listのaタグをクリックしたら、URLをサーバーに送信するプログラムです。送信失敗の時は特に何もしないので jQuery.ajaxは使用せず、jQuery.postを使用しています。aタグで定義したURLは、jQuery(this).attr("href")で取得します。
jQuery(document).on("click", ".link-list a", function() {
jQuery.post(
"http://localhost/wp-test/wp-content/themes/theme-test/post.php",
{ "url" : jQuery(this).attr("href") },
function() {
console.log("send ok.");
}
);
});
jQuery.post( url, data, callback, type )
url : 受信側のPHPのURL
data : 送信するデータ POSTにはオブジェクト型が良いです。
callback : 送信が成功したときに呼ばれます。とりあえずログを出力しています。
type : サーバーから返されるデータの形式 今回は未使用です。
データの受け側 PHPのソース
このソースで重要なのは「wp-config.php」を読み込むことです。このファイルを読み込まないとデータベースにアクセスしたところでエラーになります。データベースのpostmetaテーブルにあるカスタムフィールドに保存しているURLと比較して、同じURLがあれば投稿IDが帰って来ます。
<?php
require_once( "../../../wp-config.php" );
if ( isset( $_POST['url'] )) {
$url = esc_url( $_POST['url'] );
$result = $wpdb->get_col( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_value='%s';", $url ));
$postID = $result[0];
以下省略
}
?>
以上になります。
コメントを残す