.
*/
// Actions
//----------
add_action('admin_menu', 'add_edit_box_ppr');
add_action('save_post', 'ppr_save_postdata', 1, 2); // save the custom fields
// Variables
//----------
global $wpdb;
global $wp_query;
$page_post_redirect_current = split('/', page_post_redirect_get_currentURL());
if(count($page_post_redirect_current)>=3){
$page_post_redirect_after_base = $page_post_redirect_current[count($page_post_redirect_current)-2];
}else{
$page_post_redirect_after_base =''; //either home or no permalinks on
}
$page_post_redirect_meta = page_post_redirect_get_meta();
// Functions
//----------
function ppr_get_ID_by_page_name($page_name){
global $wpdb;
$page_name_id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_name = '$page_name'");
return $page_name_id;
}
function page_post_redirect_get_meta(){
global $wpdb;
$page_post_redirect_limit = (int) apply_filters( 'postmeta_form_limit', 30 );
$query_for_meta = "SELECT postm.post_id,postm.meta_value,postp.post_type,postp.post_name FROM $wpdb->postmeta postm, $wpdb->posts postp WHERE (postm.meta_key='pprredirect_active' and postm.meta_value='1') and (postp.post_type='page' OR postp.post_type='post') and (postp.post_status='publish' OR postp.post_status='private') and postm.post_id=postp.ID ORDER BY postm.post_id";
$page_post_redirect_keys = $wpdb->get_results ($query_for_meta, ARRAY_A);
return $page_post_redirect_keys;
}
function page_post_redirect_get_currentURL() {
$s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
$protocol = page_post_redirect_strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s;
$port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]);
return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI'];
}
function page_post_redirect_strleft($s1, $s2) {
return substr($s1, 0, strpos($s1, $s2));
}
if(count($page_post_redirect_meta)>0){
foreach($page_post_redirect_meta as $page_post_redirect_to){
$ppr_postpage=$page_post_redirect_to["post_type"];
$ppr_id=$page_post_redirect_to["post_id"];
$ppr_url=get_post_meta($ppr_id,'pprredirect_url',true);
$ppr_type=get_post_meta($ppr_id,'pprredirect_type',true);
$ppr_postname=$page_post_redirect_to["post_name"];
if($ppr_type==0){$ppr_type='200';}
//check if the page that is loading needs a redirect.
if (isset($_GET['page_id'])){
// no permalinks - using page ids
$thisidis_current=$_GET['page_id'];
}elseif(isset($_GET['p'])){
// no permalinks - using post ids
$thisidis_current=$_GET['p'];
}else{
if($page_post_redirect_after_base==''){
// either home or no permalinks
}else{
$thisidis_current = ppr_get_ID_by_page_name($page_post_redirect_after_base);
}
}
if ($thisidis_current!='' || $page_post_redirect_after_base === $ppr_postname || $page_post_redirect_after_base == $ppr_id){
//echo $thisidis_current .'|'.$ppr_id.' ';
if($ppr_type=='meta' && $thisidis_current === $ppr_id){
//metaredirect
echo '';
exit; //stop loading page so meta can do it's job without rest of page loading.
}elseif ($thisidis_current == $ppr_id){
//check for http:// - as full url - then we can just redirect if it is //
if( strpos($ppr_url, 'http://')=== 0 || strpos($ppr_url, 'https://')=== 0){
$offsite=$ppr_url;
header('Status: '.$ppr_type);
header('Location: '.$offsite, true, $ppr_type);
exit; //stop loading page
}elseif(strpos($ppr_url, 'www')=== 0){ // check if they have full url but did not put http://
$offsite='http://'.$ppr_url;
header("Status: $ppr_type");
header("Location: $offsite", true, $ppr_type);
exit; //stop loading page
}elseif(is_numeric($ppr_url)){ // page/post number
if($ppr_postpage=='page'){ //page
$onsite=get_bloginfo('url').'/?page_id='.$ppr_url;
header("Status: $ppr_type");
header("Location: $onsite", true, $ppr_type);
exit; //stop loading page
}else{ //post
$onsite=get_bloginfo('url').'/?p='.$ppr_url;
header("Status: $ppr_type");
header("Location: $onsite", true, $ppr_type);
exit; //stop loading page
}
//check permalink or local page redirect
}else{ // we assume they are using the permalink / page name??
$onsite=get_bloginfo('url'). $ppr_url;
header("Location: $onsite", true, $ppr_type);
exit; //stop loading page
}
}else{
//echo "nothing - we don't redirect";
}
}
}
}
// Add options to post/page edit pages
// Adds a custom section to the Post and Page edit screens
function add_edit_box_ppr() {
if( function_exists( 'add_meta_box' )) {
add_meta_box( 'edit-box-ppr', __( 'Quick Page/Post Redirect', 'sp' ), 'edit_box_ppr_1', 'page', 'normal', 'high' ); //for page
add_meta_box( 'edit-box-ppr', __( 'Quick Page/Post Redirect', 'sp' ), 'edit_box_ppr_1', 'post', 'normal', 'high' ); //for post
}
}
// Prints the inner fields for the custom post/page section
function edit_box_ppr_1() {
global $post;
$ppr_option1='';
$ppr_option2='';
$ppr_option3='';
$ppr_option4='';
$ppr_option5='';
// Use nonce for verification ... ONLY USE ONCE!
echo '';
// The actual fields for data entry
if(get_post_meta($post->ID, 'pprredirect_active', true)!=''){$pprediractive="checked";}else{$pprediractive="";}
echo ' ';
echo ' (check to turn on)
';
echo ' ';
if(get_post_meta($post->ID, 'pprredirect_url', true)!=''){$pprredirecturl=get_post_meta($post->ID, 'pprredirect_url', true);}else{$pprredirecturl="";}
echo ' (i.e., http://example.com or /somepage/ or p=15 or 155. Use full URL including http:// for all external redirects. )
';
echo ' ';
if(get_post_meta($post->ID, 'pprredirect_type', true)!=''){$pprredirecttype=get_post_meta($post->ID, 'pprredirect_type', true);}else{$pprredirecttype="";}
switch($pprredirecttype):
case "":
$ppr_option2=" selected";//default
break;
case "301":
$ppr_option1=" selected";
break;
case "302":
$ppr_option2=" selected";
break;
case "307":
$ppr_option3=" selected";
break;
case "0":
$ppr_option4=" selected";
break;
case "meta":
$ppr_option5=" selected";
break;
endswitch;
echo ' (301 Permanent, 302 or 307 Temporary, no code or Meta Redirect. default is 302)
';
}
// When the post is saved, saves our custom data
function ppr_save_postdata($post_id, $post) {
// verify authorization
if ( !wp_verify_nonce( $_POST['pprredirect_noncename'], plugin_basename(__FILE__) )) {
return $post->ID;
}
// check allowed to editing
if ( 'page' == $_POST['post_type'] ) {
if ( !current_user_can( 'edit_page', $post->ID ))
return $post->ID;
} else {
if ( !current_user_can( 'edit_post', $post->ID ))
return $post->ID;
}
// find & save the form data
// Put it into an array
$mydata['pprredirect_active'] = $_POST['pprredirect_active'];
$mydata['pprredirect_url'] = $_POST['pprredirect_url'];
if($mydata['pprredirect_url']!=''){
$mydata['pprredirect_type'] = $_POST['pprredirect_type'];
}
// Add values of $mydata as custom fields
foreach ($mydata as $key => $value) { //Let's cycle through the $mydata array!
if( $post->post_type == 'revision' ) return; //don't store custom data twice
$value = implode(',', (array)$value); //if $value is an array, make it a CSV (unlikely)
if(get_post_meta($post->ID, $key, FALSE)) { //if the custom field already has a value
update_post_meta($post->ID, $key, $value);
} else { //if the custom field doesn't have a value
add_post_meta($post->ID, $key, $value);
}
if(!$value) delete_post_meta($post->ID, $key); //delete if blank
}
}
?>