I am trying to preview a NextGen gallery on my main page (and category pages) to show a single image from the gallery on the main page next to the text from the post that normally shows up. I have found examples of PHP that get the images from a gallery given a gallery ID. In my loop I have a current post. What I cannot figure out is how to, given a post, get the attributes of the [nggallery] short code.
In other words for each post with a NextGEN gallery I need the id value form the short code. For example if the post contains [nggallery id=50]
I need the value 50
.
How can I get that information from a post?
I was hoping to find the solution in the source code of the next gen plug-in but of course that code registered a short code handler and lets WP call them back. There are no examples in their source code where they parse a post looking for their short code.
Your solution has helped me find an answer to my own problem of getting the attribute of a certain shortcode, but I fear there may be an issue with your approach.
You’re using
preg_match
to check thepost_content
, which will only return 1 match. If you have a post that has multiple shortcodes in it, it will only return the first one, which may not be the one you’re looking for.Instead, you should use
preg_match_all
, then loop through theregex_matches
array to check for the shortcode you need.Also, you don’t need to use
str_replace
to remove the quotes from the string. WordPress has a built-in functionshortcode_parse_atts
which takes that a string of parameters (in your case it would be$regex_matches[3]
) as an argument and outputs an array. This would also spare you the use ofwp_parse_args
function.I have found a solution. After a bunch of searching around I found some code that determines if a post has a specific short code in it.
That code also has some attempt to parse the parameters to the short code. Which is good because I want the gallery ID. There were some issues with the code as posted so I tweaked it. Here is code that can find a short code in a post and get its parameters:
What needed to be tweaked was the handling of the parameters. Using trim instead of some secret charter and switching to
wp_parse_args
to correctly handle the short code parameters. Once the above code finishes executing in a WP loop$galleryID
will hold the NextGEN gallery ID andpreviewIndex
will be set to the preview index or 1 if nopreviewIndex
attribute was present.previewIndex
is an attribute I “added” to indicate what thumbnail to use for the gallery preview. NextGEN ignores it and the galleries render as normal but now I can use it for my Theme to display a specific icon in the preview entry.Here is the code from my
loop-index.php
andloop-category.php
that handles creating the gallery preview:This makes use of information from another answer regarding accessing NextGEN gallery objects in order to get the thumbnail and the count of images in the gallery.
Either way you can do it very easily. First Hook a Function. I used wp_head but you can use anyone you want.