There’s two ways, the easy way and the “right” way…basically, you just add the variables, but you need to know which character to use to join it. If it’s just on your site, and you know you are using pretty permalinks, you can just go with get_permalink($post->ID).'?pdb=nnn'
but the right way is to check for the question mark:
<?php $link = get_permalink($post->ID) . (strpos(get_permalink($post->ID), '?') !== false ? '&' : '?') . 'pdb=nnn'; ?>
There isn’t any simpler way to get that done that I know of.
I already check for the ? vs the &:
$qst = get_permalink($post->ID);
$qst = parse_url($qst);
if (isset($qst['query']))
$qst = '&format=pdf';
else
$qst = '?format=pdf';
The problem is that I don’t want to just hardcode for your plugin by adding pdb=nnn
, so I was looking for a more universal dynamic solution. (I do like your syntax better, though; thanks for the tip!)
I’ll keep poking at it. 😉
Cheers
Lewis
Well, if I knew more about the context in which you’re trying to create this link, I might be able to help.
🙂
Yeah, kind of difficult to see it in the abstract; my apologies.
We render an icon with a link to create a PDF of the existing page. To create the link, we append
?format=pdf
or
&format=pdf
to the permalink, depending upon whether we see a prettified url or not (or really, whether we see a “?” or not).
The existing code (block quoted, above) gets just the permalink, but obviously doesn’t see the appended
?pdb=nnn
I’ve just played around with swapping:
get_permalink($post->ID)
for
$_SERVER["REQUEST_URI"]
which almost works, though I haven’t considered any potential downside to it.
More complete code (original):
// Change querystring separator for those who do not have pretty URL enabled
$qst = get_permalink($post->ID);
$qst = parse_url($qst);
if (isset($qst['query']))
$qst = '&format=pdf';
else
$qst = '?format=pdf';
return '<a rel="noindex,nofollow">ID) . $qst . '" title="Download PDF">' . $this->options['imageIcon'] . '</a>';
I don’t want you to spend a lot of time on this, really. Yours is the first plugin I’ve seen (close-up) to actually require a tweak to the url in order to render the proper data from the shortcode, so I thought you might be be a good place to start my investigation. 🙂
Your input is most appreciated.
Cheers
Lewis
Actually, add_query_arg looks promising.
Indeed, I think that’s the ticket:
return '<a class="wpptopdfenh" target="_blank" rel="noindex,nofollow" href="' . add_query_arg( 'format', 'pdf' ) . $qst . '" title="Download PDF">' . $this->options['imageIcon'] . '</a>';
No muss, no fuss. On the back end, it actually utilizes $_SERVER["REQUEST_URI"]
(if the third param is blank) and then automatically determines the proper separator on the line.
Unless you have a better suggestion, xnau?
Thanks for kicking this around with me!
Cheers
Lewis
(PS – Please feel free to mark this as resolved unless you have something to add or to suggest, but I’ll leave that to you.)
Oops; missed a little bit:
return '<a class="wpptopdfenh" target="_blank" rel="noindex,nofollow" href="' . add_query_arg( 'format', 'pdf' ) . '" title="Download PDF">' . $this->options['imageIcon'] . '</a>';
That should do (straggling remnant of old code removed).
Looks like you’re missing the $qst variable, which looks like it should be in front of the add_query_arg but otherwise looks like it will work. If you want to get a specific variable out of the URL, you can access it using the $_GET array.
Thanks. In my case, I did away with
// Change querystring separator for those who do not have pretty URL enabled
$qst = get_permalink($post->ID);
$qst = parse_url($qst);
if (isset($qst['query']))
$qst = '&format=pdf';
else
$qst = '?format=pdf';
completely, and am able to just use the one (replaced) line (without the $qst variable at all). I’ve tested it against a post with [pdb_single]
in it, after manually calling the page with the extra query string on the url. It worked both with and without a pretty url, so I guess this is it!
Thanks for the tip about using $_GET to extract components, too!
Cheers
Lewis