. */ // 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 } } ?>