I´m setting up a WP based app and due to some limitations on facebook page tabs and mobile phones I´m trying to set up a redirect that directs the pages accourding to device and if its visited through either page_tab, direct url or canvas.


The redirect URL is set in a Custom Field for the specific page visited, if that isnt set it suppose to determin what post type it is before redirecting one or the other way. If its visited by cellphone it should redirect at all but run the page as normal.

If the page is visited directly though browser it shour redirect to the custom field url set (if posttype is page) and to a specific canvas app if the post type is "course"...

If visited (with appdata set / through facebook page tab) it should show as normal...

Because of the redirect it needs to be in header before any other headers are sent (?)

The question is... How can I on a efficient way - redirect users that visit a URL directly ie. //fu.viralapps.no/tamtamtam to the facebookversion //www.facebook.com/TheTamTampage/App123123123. but only when the site is visited through a desktop/laptop computer. And not through a smartphone/pad.

AND the page to redirect to is diffrent for each page (redirect url set as custom field in WP page) //fu.viralapps.no/tamtamtam => //www.facebook.com/TheTamTampage/App123123123 //fu.viralapps.no/tamtamtam2 => //www.facebook.com/TheTamTampage/App232323232 //fu.viralapps.no/tamtamtam3 => //www.facebook.com/TheTamTampage/App3434343434

The facebookpage - tab/app will not redirect its iframed page because it contains a "Signed Request" automaticly through facebook.

Here is my code so far... (some echos for debugging added)

$signed_request = $_REQUEST['signed_request']; // Get the POST signed_request variable.

 if(isset($signed_request)) // Determine if signed_request is blank.
 $pre = explode('.',$signed_request); // Get the part of the signed_request we need.
 $json = base64_decode($pre['1']); // Base64 Decode signed_request making it JSON.
 $obj = json_decode($json,true); // Split the JSON into arrays.
 $page = $obj['page']; // Get the page array. It has a sub array.

 echo("Your App Data: " . $obj['app_data']);


$geturl = "appdata found";



//detect user agent.
if(preg_match('/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4)))

//Mobile detected - Stay on this URL

$geturl = "mobile";


//No mobile - Redirect for Facebook Page Tab / canvas

        //get the url for the current page
        $isgeturl = get_field('redirect_app_url');

            //WE HAVE A SET URL
            $geturl = $isgeturl;
            //WE DONT HAVE A SET URL

            //What are we dealing with?
            $PostType = get_post_type( get_the_ID() );

            if ($PostType == "course") {
                $geturl = "https://apps.facebook.com/fu-kurs/" . the_slug();
            }else {
                $geturl = "https://fu.viralapps.no/?ref=confused";


       // header('location: '.$geturl);
        echo $geturl;

// die('No signed request avaliable.'); //If there is no signed_request, stop processing script.

  • 2
    Welcome to WordPress Development. It's not clear what your question is exactly, but I wonder if you're looking for the template_redirect hook? – birgire Aug 30 '14 at 12:10
  • Hi @birgire - I tried to congretize the question a bit. – BeTA iT Aug 31 '14 at 14:13

The answer is...

Use Javascript for redirect, and redirect in each if statement.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.