Skip to main content
Commonmark migration
Source Link

Hi @Simon Blackbourn:

While I was writing my answer but before I could post it @Bainternet jumped in with a great answer too. He took a slightly different approach but his works equally as well as mine. Still, since I'd already written mine when I saw his I'll submit mine as an alternate for you to consider.

Uses Direct SQL: $post_id = $wpdb->get_var($sql)

###Uses Direct SQL: $post_id = $wpdb->get_var($sql) MyMy solution uses direct SQL which is often not the best approach but I feel it is fair here because of this SQL's simplicity (and is thus unlikely to break in the future) and because for your needs there is no benefit to using the comparatively heavy get_posts() with all its need to process hooks since your needs are one-off for your specific site.

Uses Direct URL Parameters: $_GET['lid']

###Uses Direct URL Parameters: $_GET['lid'] AdditionallyAdditionally I chose to use direct access to $_GET['lid'] instead of first creating a query_var because query vars are part of the standard WordPress query architecture that is use by the underlying URL rewrite system, and for your use-case you are explicitly not leveraging the WordPress query architecture. Instead you need to capture an actual query parameter passed on the URL so I think there isn't really a need for the overhead of adding a query var (although truth be told using a query var doesn't hurt, and it works fine too.)

Uses the 'parse_request' Hook

###Uses the 'parse_request' Hook LastlyLastly I did like @Bainternet use of 'parse_request' hook; it runs before WordPress' default MySQL query, so you don't have to run a MySQL query you will just throw away yet it runs after the 'init' hook which means (most) hooks that allow plugins to modify permalinks will have been added thus giving you the correct URLs for your redirects.

Place in functions.php

###Place in functions.php YouYou can place the following code into your theme's functions.php file:

add_action('parse_request','oldsite_redirect',0);  // 0=before (most) 'parse_request' calls
function oldsite_redirect() {
  if (isset($_GET['lid'])) {
    global $wpdb;
    $sql = "SELECT post_id FROM {$wpdb->postmeta} " . 
           "WHERE meta_key='lid' AND meta_value='%s'";
    $sql = $wpdb->prepare($sql,$_GET['lid']);
    $post_id = $wpdb->get_var($sql);
    if ($post_id) {
      $permalink = get_permalink($post_id);
      if ($permalink) {
        wp_safe_redirect($permalink,301);
        exit;
      }
    }
  }
}

Again, either solution will work; @Bainternet's or mine; your choice which to use.

Hi @Simon Blackbourn:

While I was writing my answer but before I could post it @Bainternet jumped in with a great answer too. He took a slightly different approach but his works equally as well as mine. Still, since I'd already written mine when I saw his I'll submit mine as an alternate for you to consider.

###Uses Direct SQL: $post_id = $wpdb->get_var($sql) My solution uses direct SQL which is often not the best approach but I feel it is fair here because of this SQL's simplicity (and is thus unlikely to break in the future) and because for your needs there is no benefit to using the comparatively heavy get_posts() with all its need to process hooks since your needs are one-off for your specific site.

###Uses Direct URL Parameters: $_GET['lid'] Additionally I chose to use direct access to $_GET['lid'] instead of first creating a query_var because query vars are part of the standard WordPress query architecture that is use by the underlying URL rewrite system, and for your use-case you are explicitly not leveraging the WordPress query architecture. Instead you need to capture an actual query parameter passed on the URL so I think there isn't really a need for the overhead of adding a query var (although truth be told using a query var doesn't hurt, and it works fine too.)

###Uses the 'parse_request' Hook Lastly I did like @Bainternet use of 'parse_request' hook; it runs before WordPress' default MySQL query, so you don't have to run a MySQL query you will just throw away yet it runs after the 'init' hook which means (most) hooks that allow plugins to modify permalinks will have been added thus giving you the correct URLs for your redirects.

###Place in functions.php You can place the following code into your theme's functions.php file:

add_action('parse_request','oldsite_redirect',0);  // 0=before (most) 'parse_request' calls
function oldsite_redirect() {
  if (isset($_GET['lid'])) {
    global $wpdb;
    $sql = "SELECT post_id FROM {$wpdb->postmeta} " . 
           "WHERE meta_key='lid' AND meta_value='%s'";
    $sql = $wpdb->prepare($sql,$_GET['lid']);
    $post_id = $wpdb->get_var($sql);
    if ($post_id) {
      $permalink = get_permalink($post_id);
      if ($permalink) {
        wp_safe_redirect($permalink,301);
        exit;
      }
    }
  }
}

Again, either solution will work; @Bainternet's or mine; your choice which to use.

Hi @Simon Blackbourn:

While I was writing my answer but before I could post it @Bainternet jumped in with a great answer too. He took a slightly different approach but his works equally as well as mine. Still, since I'd already written mine when I saw his I'll submit mine as an alternate for you to consider.

Uses Direct SQL: $post_id = $wpdb->get_var($sql)

My solution uses direct SQL which is often not the best approach but I feel it is fair here because of this SQL's simplicity (and is thus unlikely to break in the future) and because for your needs there is no benefit to using the comparatively heavy get_posts() with all its need to process hooks since your needs are one-off for your specific site.

Uses Direct URL Parameters: $_GET['lid']

Additionally I chose to use direct access to $_GET['lid'] instead of first creating a query_var because query vars are part of the standard WordPress query architecture that is use by the underlying URL rewrite system, and for your use-case you are explicitly not leveraging the WordPress query architecture. Instead you need to capture an actual query parameter passed on the URL so I think there isn't really a need for the overhead of adding a query var (although truth be told using a query var doesn't hurt, and it works fine too.)

Uses the 'parse_request' Hook

Lastly I did like @Bainternet use of 'parse_request' hook; it runs before WordPress' default MySQL query, so you don't have to run a MySQL query you will just throw away yet it runs after the 'init' hook which means (most) hooks that allow plugins to modify permalinks will have been added thus giving you the correct URLs for your redirects.

Place in functions.php

You can place the following code into your theme's functions.php file:

add_action('parse_request','oldsite_redirect',0);  // 0=before (most) 'parse_request' calls
function oldsite_redirect() {
  if (isset($_GET['lid'])) {
    global $wpdb;
    $sql = "SELECT post_id FROM {$wpdb->postmeta} " . 
           "WHERE meta_key='lid' AND meta_value='%s'";
    $sql = $wpdb->prepare($sql,$_GET['lid']);
    $post_id = $wpdb->get_var($sql);
    if ($post_id) {
      $permalink = get_permalink($post_id);
      if ($permalink) {
        wp_safe_redirect($permalink,301);
        exit;
      }
    }
  }
}

Again, either solution will work; @Bainternet's or mine; your choice which to use.

Source Link
MikeSchinkel
  • 37.5k
  • 14
  • 116
  • 132

Hi @Simon Blackbourn:

While I was writing my answer but before I could post it @Bainternet jumped in with a great answer too. He took a slightly different approach but his works equally as well as mine. Still, since I'd already written mine when I saw his I'll submit mine as an alternate for you to consider.

###Uses Direct SQL: $post_id = $wpdb->get_var($sql) My solution uses direct SQL which is often not the best approach but I feel it is fair here because of this SQL's simplicity (and is thus unlikely to break in the future) and because for your needs there is no benefit to using the comparatively heavy get_posts() with all its need to process hooks since your needs are one-off for your specific site.

###Uses Direct URL Parameters: $_GET['lid'] Additionally I chose to use direct access to $_GET['lid'] instead of first creating a query_var because query vars are part of the standard WordPress query architecture that is use by the underlying URL rewrite system, and for your use-case you are explicitly not leveraging the WordPress query architecture. Instead you need to capture an actual query parameter passed on the URL so I think there isn't really a need for the overhead of adding a query var (although truth be told using a query var doesn't hurt, and it works fine too.)

###Uses the 'parse_request' Hook Lastly I did like @Bainternet use of 'parse_request' hook; it runs before WordPress' default MySQL query, so you don't have to run a MySQL query you will just throw away yet it runs after the 'init' hook which means (most) hooks that allow plugins to modify permalinks will have been added thus giving you the correct URLs for your redirects.

###Place in functions.php You can place the following code into your theme's functions.php file:

add_action('parse_request','oldsite_redirect',0);  // 0=before (most) 'parse_request' calls
function oldsite_redirect() {
  if (isset($_GET['lid'])) {
    global $wpdb;
    $sql = "SELECT post_id FROM {$wpdb->postmeta} " . 
           "WHERE meta_key='lid' AND meta_value='%s'";
    $sql = $wpdb->prepare($sql,$_GET['lid']);
    $post_id = $wpdb->get_var($sql);
    if ($post_id) {
      $permalink = get_permalink($post_id);
      if ($permalink) {
        wp_safe_redirect($permalink,301);
        exit;
      }
    }
  }
}

Again, either solution will work; @Bainternet's or mine; your choice which to use.