Related posts on tags

March 21, 2013

This is a small plugin that adds the capability of fetching posts that have the same or some of the same tags as the ones you send in through ajax as a JSON array. The plugin fetches the posts that match and then sorts them according to weight i.e. number of matching tags.

When I wrote the JSON part of the plugin I was a bit annoyed by wordpress’s auto escape of quotes. After a bit of searching I found the function stripslashes_deep which is a wordpress function that reverts the changes of the auto addslashes.

The plugin is hooked on the ajax function search_tags

// Binding function rpot_search_on_tags to ajax hook
add_action('wp_ajax_search_on_tags', 'rpot_search_on_tags');
add_action('wp_ajax_nopriv_search_on_tags', 'rpot_search_on_tags');

If you want to search for posts and you want to use jquery, it’s as simple as this;

	var url = "http://www.example.dev/wp-admin/admin-ajax.php";
	var getVars = {
		action: "search_on_tags",
		tags: JSON.stringify( [
			'First tag',
			'My other tag',
			'The last tag'
		] )
	}

	$.get(
		url,
		getVars,
		function( response ){
			console.log( response );
		},
		"json"
	);

The ajax response that you will get will look something like this:

	// Response map
	[{
		date: "YYYY-MM-DD HH:MM:SS",    // String, Publish date
		image_full: [                   // Array, Original image (featured image)
			0:'http://',                // String, Url to image
			1:600,                      // Int, Image width
			2:200,                      // Int, Image height
			3:false                     // Boolean, Dunno, comes from wp_get_attachment_image_src()
		],
		image_large: Array[4],          // Array, Large image, see above for description
		image_medium: Array[4],         // Array, Medium image, see above for description
		image_small: Array[4],          // Array, Small image, see above for description
		position: 0,                    // Int, Position in matches
		postid: 438,                    // Int, Post id
		timestamp: 1337893394,          // Int, Publish date as Unix timestamp
		title: "Post title",            // String, Post title
		url: "http://",                 // String, Permalink
		weight: 2                       // Int, Number of tag matches
	}]

And as always, go fetch the code, play with it! It’s all for free on github!

Tags