リンク集のページでクリック数が多い順に表示するときに作成したものです。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];

			以下省略

	}
?>

以上になります。