Timur Gafforov
Timur Gafforov

Reputation: 761

Wordpress: add custom params to all URLS

I have an addition to url e.g. /products/myproduct/?v=iphone-x/transparent/*/Green

So what I need is for wordpress to add the ?v=iphone-x/transparent/*/Green to all links on the page (only '<a href="">'s, no 'img src=""' or others)

I have managed to do that, but it's a little "dirty". Is there any neat function to add the parameter to all links?

The code I have is as follows:

function callback($buffer) {
  // modify buffer here, and then return the updated code
  $temp = explode('href="', $buffer);

  $buffer = $temp[0];
  array_shift($temp);

  foreach($temp as $t){
      $tt = explode('"', $t, 2);

      $buffer .= 'href="'.$tt[0].'?v='.$_GET['v'].'"'.$tt[1];
  }

  return $buffer;
}

function buffer_start() { ob_start("callback"); }

function buffer_end() { ob_end_flush(); }

add_action('wp_head', 'buffer_start');
add_action('wp_footer', 'buffer_end');

Upvotes: 0

Views: 193

Answers (1)

Kalimah
Kalimah

Reputation: 11437

One way you can achieve this is to hook into "the_content" filter. By using regexp with preg_replace_callback function you can get decent results.

function add_para( $content ) {
    $content = preg_replace_callback(
        "/href=(?>'|\")([^\"']+)(?>'|\")/",
        function($m) {
            print_r($m);
            return "href='".$m[1]."/additional-param'";
        },
        $content);

    return $content;
}

add_filter( 'the_content', 'add_para', 0  );

However, you might run into some issues particularly if your content is not formatted probably (extra spaces, missing tags .. etc).

So the alternative is either to us a JS approach (jQuery for example), or using PHP DOM parser like: PHP Simple HTML DOM Parser

Upvotes: 1

Related Questions