I am working on a creating a directory style page template that uses custom meta fields in WordPress that are used to generate up to 10 directory listings on a page.
The below code works very well for this purpose with one exception. If one of my directory pages only has 5 listings, the code is still displayed for listings 6-10 even if the values aren’t present.
<div class="listing">
<h3 class="listing-title"><?php $values = get_post_custom_values("listing_heading_10");
echo $values[0]; ?></h3>
<div class="listing-body">
<p><?php $values = get_post_custom_values("listing_description_10"); echo $values[0]; ?> </p>
</div><p class="listing-footer"><?php $values = get_post_custom_values("listing_url_10");
echo $values[0]; ?></p>
What do I need to add so code is only displayed if the custom meta fields are populated for that instance.
In other words I am looking for a rule that says:
If values are present then display
full directory listing (i.e.
listing_heading_10,
listing_description_10 &
listing_url_10)If none of these values are present
then display nothing
Any help or advice on this would be greatly appreciated.
The easiest way would be to add a simple conditional:
That said, is there any reason that you can’t put your output code in a
foreach
loop?e.g.
It may be helpful to put your custom meta values into an array, to facilitate looping through them if they exist. So, instead of:
…you could have:
And instead of
…you could output:
etc.
So I tried using your above recommendation regarding the conditional (see code below) but I am still having the issue where if the meta box is not populated the code is still visible in the source if the page has less than 10 listings. Am I doing something wrong?
I also like the idea around outputting code in the foreach loop and using an array, but I have to be honest I am unfortunately very new to programming and not exactly sure how to write that.
Thanks again for your help, I really appreciate it.
If you only want the first value, there’s no need to be fetching all the values just to extract one value from the array.
Custom Fields – Function Reference
You should use
get_post_meta
instead setting the third arg to true (for a single value).eg.
You then not need to keep referencing the first item in the array, eg.
$arr[0]
.. nor would you need loops to iterate data you only want a single value from.get_post_meta
returns an empty array/string when there’s no data(string/array depends whether you’re fetching multiple or single – ie. what you set for the third param), but you could also potentially have an empty value for the field, so this should cover the field being set but empty, or not being present all together.