logo
Ask your WordPress questions! Pay money and get answers fast! (more info)

Warning: Please do not give out any FTP or ssh credentials to anyone, unless you trust them completely. Giving out login details is dangerous.

If the asker does not get an answer then they have 10 days to request a refund.

$35
Multisite homepage link

This question is a slight variation of an earlier problem raised at wpquestions.com/question/show/id/3081. The original question wasn't quite resolved unfortunately.

I have a WordPress Multisite install with the following characteristics:

1) Two types of sites, properties and cities
2) subfolder URL structure e.g. multisite.com/property1, multisite.com/property2, multisite.com/property3, multisite.com/city1, multisite.com/city2
3) property sites are all unique, but link to common city information when they share the same location e.g. if property1 & property2 are located in the same city, both will link to common information held on, say, multisite.com/city1
4) all sites (properties & locations) share the same theme

Across all sites (properties and cities) I require a custom homepage link. This homepage link should be created via a theme function or simple multisite-compatible plugin.

When a visitor browses from a property site to a city site, the homepage link on the city site should always link back to the referring property site homepage. Information about the referring property site should be stored (via cookie or session variable perhaps??), so no matter how many posts/pages/categories are browsed, the homepage link on the city site always references the homepage of the referring property site.

If a visitor is browsing a property site, say multisite.com/property1, the homepage link of property1 should be multisite.com/property1.

If a visitor browses to a city site directly from outside the multisite network (e.g. via a Google referral), the city site homepage link should link to the city site homepage.

It is highly unlikely a visitor would browse directly between similar sites e.g. from property1 to property2 or from city1 to city2 and thus this scenario can be ignored.

Hopefully the above problem makes some sort of sense. I’m guessing the solution maybe involves some combination of cookies, session variables and wp_get_referer().

Have a quick look at Abdessamad Idrissi’s answer to my initial question at wpquestions.com/question/show/id/3081 as I think this was getting pretty close to what I require.

Thank you.

This question has been answered.

designbuildtest | 01/17/12 at 3:56am Edit

Previous versions of this question: 01/17/12 at 4:06am | 01/17/12 at 4:09am

(2) Possible Answers Submitted...

See a chronological view of answers?

Warning: Please do not give out any FTP or ssh credentials to anyone, unless you trust them completely. Giving out login details is dangerous.

  • avatar
    Last edited:
    01/17/12
    4:19am
    John Cotton says:

    You marked the previous one as solved, but then don't say here why it turned out not to be....

    Can you tell us?

    • 01/17/12 4:27am

      designbuildtest says:

      Hi John, to be honest I can't remember exactly why it didn't work, unfortunately it just didn't work as hoped. I considered not including the link to the previous question as a) it might confuse people and b) the updated question is worded differently.

      I'm not sure if the old question/thread is useful, or if people would prefer to discard the historical stuff and look at the question afresh.

      Thanks.

    • 01/17/12 5:05am

      John Cotton says:

      So why can't you just use the first site_url you come across in a session and stick with that?

      ie

      function get_custom_home_link() {
      if( !isset($_SESSION['homelink']) {
      $_SESSION['homelink'] = site_url();
      }

      return $_SESSION['homelink'];
      }

    • 01/17/12 5:07am

      John Cotton says:

      Sorry, that's missing a bracket:

      function get_custom_home_link() {
      if( !isset($_SESSION['homelink']) ) {
      $_SESSION['homelink'] = site_url();
      }

      return $_SESSION['homelink'];
      }

    • 01/17/12 5:20am

      designbuildtest says:

      Hi John, just tested your code.

      I began on property1 and the homelink URL was property1 - great.

      Next, I clicked a hyperlink on property1 to a page on city1 and the homelink URL changed to city1 rather than pointing back to the property1 homepage.

    • 01/17/12 5:28am

      John Cotton says:

      Are all your sites really on the same domain or have you just written it that way?

      If they aren't then my code won't work as it relies on the session variable which, obviously, gets changed when you change domains!

      What I don't know (but will try to find out) is whether WordPress does a session reset if you are using the sub-directory approach as you seem to be...

    • 01/17/12 5:31am

      designbuildtest says:

      Thanks for the speedy responses John.

      Yes, all sites are on the same domain.

      I'm testing on my local server so URL's for homepages are localhost/property1, localhost/city1 etc.

    • 01/17/12 5:33am

      John Cotton says:

      Just out of interest, why are you using multi-site?

      Wouldn't the SEO be better as domain.com/city1/property1?

    • 01/17/12 5:37am

      designbuildtest says:

      It's an Internal site, so no need for SEO. Property details are the focus, rather than the generic city information.

    • 01/17/12 12:47pm

      John Cotton says:

      Hi

      $_SESSION definitely works across path-based multi-site installs (at least in version 3.3 on which I've just checked).

      Have you actually started the session? You need:

      session_start();


      somewhere before the home link code is run (I tend to stick mine at the top of functions.php.

    • 01/17/12 12:50pm

      John Cotton says:

      PS Just tried my code on a path-based multsite and it works for me...:)

    • 01/17/12 3:58pm

      designbuildtest says:

      Hi John, adding

      session_start(); 

      before the function worked perfectly.

      Your very simple solution was exactly what I required.

      Thank you.

    • 01/17/12 4:16pm

      designbuildtest says:

      Hi John, as noted in Christianto's thread below, I'd like to split the prize value with both yourself and Christianto as both answers worked as I had hoped. I'll vote for the $35 prize money to be split $20 to yourself and $15 to Christianto.

      Thanks again

  • avatar
    Last edited:
    01/17/12
    4:40am
    Christianto says:

    What if visitor browse from city site to property site?
    do you want to show city site homepage link or property site homepage link?

    You need to change homepage address to referring site if visitor browse other site on your network, but not change it if it browse from outside network?

    • 01/17/12 4:49am

      designbuildtest says:

      Hi Christianto. The chances of a visitor starting their session on a city site and then browsing to a property site are tiny - this scenario can be ignored.

      Yes, correct, to your second question. The homepage link doesn't change if the visitor begins their session via an external link from outside the multisite network.

      Thanks

    • 01/17/12 8:10am

      Christianto says:

      Hello,

      have you find your solution?
      if you haven't, please try my code:


      function write_homepage_referer(){

      $write_cookie_on_directory = array( '/property1', '/property2', '/property3' );

      foreach($write_cookie_on_directory as $check_site){
      // if match set cookie for 1 hour
      if(strpos(get_bloginfo('url'), $check_site))
      setcookie("sister_site_referer", get_bloginfo('url'), time() + 3600, COOKIEPATH, COOKIE_DOMAIN, false, false);
      }
      }
      add_action('init', 'write_homepage_referer');


      function get_custom_home_link($subdirectories){

      $home_url = '';
      $referer = strtolower( $_COOKIE['sister_site_referer'] );

      // If no refferer return curent blog home
      if ($referer == null || $referer == '' || $referer == get_bloginfo('url') ){

      return get_bloginfo('url');

      } else {

      $ref = parse_url($referer);
      $this_url = parse_url( get_bloginfo('url') );

      // if domain same, from outside network
      if( $ref['host'] == $this_url['host'] ) {

      foreach($subdirectories as $subdirectory){
      $checkreferer = strpos($_COOKIE['sister_site_referer'], $subdirectory);

      if ( isset($_COOKIE['sister_site_referer']) && $checkreferer ){
      $home_url = $_COOKIE['sister_site_referer'];
      }
      }

      if($home_url)
      return $home_url;
      else
      return get_bloginfo('url');

      } else {

      return get_bloginfo('url');

      }
      }
      }


      as you can see there are array that you can supply with your directory path on cookie creation function
      $write_cookie_on_directory = array( '/property1', '/property2', '/property3' );


      and called it by passing same array of your site directory path
      echo get_custom_home_link( array( '/property1', '/property2', '/property3' ) );



      Hope this help

    • 01/17/12 4:13pm

      designbuildtest says:

      Hi Christianto, your solution works perfectly - thank you.

      I'd like to split the prize value with both yourself and John Cotton as both answers worked as I had hoped. I'd like to split the $35 prize money by voting $20 to John and $15 to yourself.

      Sorry to not get back to you both sooner - I had to get some sleep last night.

This question has expired.



Gabriel Reguly, designbuildtest voted on this question.



Current status of this question: Completed



Warning: Please do not give out any FTP or ssh credentials to anyone, unless you trust them completely. Giving out login details is dangerous.

If the asker does not get an answer then they have 10 days to request a refund.