WordPress plugin with Ajax pagination

This plugin can be used in your wordpress site to list posts with pagination

Create folder in wp-content/plugins/  and give a relevant name . let it be “wpcRecentPosts”.
Inside that folder create a file “wpcRecentPosts.php “ and paste the below given code in that file . 

<?php
/**
* Plugin Name: WPC Recent Posts With Pagination
* Plugin URI: http://phpcodez.com/
* Description: A widget that displays Recent Posts With Pagination
* Version: 0.1
* Author: Pramod T P
* Author URI: http://phpcodez.com/
*/

add_action( ‘widgets_init’, ‘wpc_recentposts_widgets’ );

function wpc_recentposts_widgets() {
register_widget( ‘wpcrecentpostsWidget’ );
}

class wpcrecentpostsWidget extends WP_Widget {
function wpcrecentpostsWidget() {
$widget_ops = array( ‘classname’ => ‘wpcClass’, ‘description’ => __(‘A widget that displays Recent Posts With Pagination.’, ‘wpcClass’) );
$control_ops = array( ‘width’ => 300, ‘height’ => 350, ‘id_base’ => ‘wpc-recentposts’ );
$this->WP_Widget( ‘wpc-recentposts’, __(‘Recent Posts With Pagination’, ”), $widget_ops, $control_ops );
}
function widget( $args, $instance ) { ?>
<script type=”text/javascript”>
function getNextPosts(pageno){
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null){
alert (“Your browser does not support AJAX!”);
return;
}
var url=”<?php echo WP_PLUGIN_URL  ?>/wpcRecentPosts/”+”recent-posts.php?”;
url=url+”&page_no=”+pageno;
url=url+”&sid=”+Math.random();
//alert(url);
xmlHttp.onreadystatechange=stateChangedFeaturedMovies;
xmlHttp.open(“GET”,url,true);
xmlHttp.send(null);
}

function stateChangedFeaturedMovies(){
if (xmlHttp.readyState==4)
document.getElementById(“recentPost”).innerHTML=xmlHttp.responseText;
}

if(!window.GetXmlHttpObject) {
function GetXmlHttpObject(){
var xmlHttp=null;
try {// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e) {// Internet Explorer
try {
xmlHttp=new ActiveXObject(“Msxml2.XMLHTTP”);
}
catch (e){
xmlHttp=new ActiveXObject(“Microsoft.XMLHTTP”);
}
}
return xmlHttp;
}
}
</script>
<div id=”recentPost”>
<?php
global $wpdb;
$itemPerPage=3;
$recentPostQuery = “SELECT distinct(post_title) ,ID,post_title FROM $wpdb->posts WHERE post_type=’post’  AND post_status=’publish’  “;
$recentPostCount = $wpdb->get_results($recentPostQuery, OBJECT);
$totalrecentPost = sizeof($recentPostCount);
$lastPage=ceil($totalrecentPost/$itemPerPage);
?>
<table>
<tr>
<td width=”50%”><a href=”javascript:getNextPosts(2);”>Next</a></td>
<td><a href=”javascript:getNextPosts(<?php echo $lastPage; ?>);”>Previous</a></td>
</tr>
<?php
$recentPostQuery=$recentPostQuery . ” ORDER BY post_date DESC LIMIT $itemPerPage” ;
$recentPostResults = $wpdb->get_results($recentPostQuery, OBJECT);
foreach( $recentPostResults as $recentPost ) {
?>
<tr><td colspan=”2″><a href=”<?php echo get_permalink($recentPost->ID) ?>”> <?php echo $recentPost->post_title;  ?></a></td></tr>
<?php } ?>

</table>
</div>
<?php
}

function update( $new_instance, $old_instance ) {}

function form( $instance ) {echo “No Backend Options Available”;}
}

?>

After that create a file that run behind the scene when we call a javascript function and here we use “recent-posts.php”. Paste the below given code in that file

<?php
require_once(dirname(__FILE__).DIRECTORY_SEPARATOR.’..’.DIRECTORY_SEPARATOR.’..’.DIRECTORY_SEPARATOR.’..’.DIRECTORY_SEPARATOR.’wp-load.php’);
$pageNo=$_REQUEST[‘page_no’];
global $wpdb;
$itemPerPage=3;
$recentPostQuery =  “SELECT distinct(post_title) ,ID,post_title FROM $wpdb->posts WHERE post_type=’post’  AND post_status=’publish’  “;
$recentPostCount = $wpdb->get_results($recentPostQuery, OBJECT);
$totalrecentPost = sizeof($recentPostCount);
$lastPage =  ceil($totalrecentPost/$itemPerPage);
$start = ($pageNo-1)*$itemPerPage;
if($lastPage<$pageNo){ $start=0;$pageNo=1;}
if($totalrecentPost<$start){ $start=0;$pageNo=1; }
if($start<0){$pageNo=$lastPage;$start= ($lastPage-1)*$itemPerPage;}
?>
<table>
<tr>
<td width=”50%”><a href=”javascript:getNextPosts(<?php echo $pageNo+1 ?>);”>Next</a></td>
<td><a href=”javascript:getNextPosts(<?php echo $pageNo-1 ?>);”>Previous</a></td>
</tr>
<?php
$recentPostQuery=$recentPostQuery . ” ORDER BY post_date DESC LIMIT $start,$itemPerPage” ;
$recentPostResults = $wpdb->get_results($recentPostQuery, OBJECT);
foreach( $recentPostResults as $recentPost ) {
?>
<tr><td colspan=”2″><a href=”<?php echo get_permalink($recentPost->ID) ?>”> <?php echo $recentPost->post_title;  ?></a></td></tr>
<?php } ?>
</table>

Share

Leave a Reply

Your email address will not be published. Required fields are marked *