WordPress.org

Ready to get started?Download WordPress

Forums

Participants Database
[resolved] Suggestion for extracting the complete url when appending ?pdb= (or &pdb=)? (10 posts)

  1. Lewis Rosenthal
    Member
    Posted 7 months ago #

    I maintain WP post to PDF Enhanced, and have recently been made aware of an issue raised by Participants Database regarding the added code in the url to get the [pdb_single] shortcode to work.

    Currently, my plugin is getting the url via a basic method:

    get_permalink($post->ID);

    Unfortunately, that won't do for generating a PDF of $post when we have the added ?pdb=nn or &pdb=nn tacked on. I tried:

    home_url(add_query_arg(array(),$wp->request));

    but I'm not capturing the full URL. Do you think I'm going to need to resort to a pure PHP method, or is there some way using the WP API I might get it? (I know, this isn't strictly a question related to this plugin, though it is relevant.)

    Any help would be greatly appreciated!

    Cheers

    Lewis

    http://wordpress.org/plugins/participants-database/

  2. xnau
    Member
    Plugin Author

    Posted 7 months ago #

    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.

  3. Lewis Rosenthal
    Member
    Posted 7 months ago #

    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

  4. xnau
    Member
    Plugin Author

    Posted 7 months ago #

    Well, if I knew more about the context in which you're trying to create this link, I might be able to help.

  5. Lewis Rosenthal
    Member
    Posted 7 months ago #

    :-)

    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

  6. Lewis Rosenthal
    Member
    Posted 7 months ago #

    Actually, add_query_arg looks promising.

  7. Lewis Rosenthal
    Member
    Posted 7 months ago #

    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.)

  8. Lewis Rosenthal
    Member
    Posted 7 months ago #

    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).

  9. xnau
    Member
    Plugin Author

    Posted 7 months ago #

    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.

  10. Lewis Rosenthal
    Member
    Posted 7 months ago #

    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

Reply

You must log in to post.

About this Plugin

About this Topic