Get Custom Field Values

Author:Scott Reilly
Version:3.0.1
Last update:11 July 2009
Compatibility:WP 2.6+, 2.7+, 2.8+
Comments:go here
Download:[ zip ]
Description:

Use widgets or template tags to easily retrieve and control the display of any custom field values/meta data for posts or pages.

Extended Description

Use widgets or template tags to easily retrieve and control the display of any custom field values/meta data for posts or pages.

The power of custom fields gives this plugin the potential to be dozens of plugins all rolled into one.

This plugin allows you to harness the power of custom fields/meta data. Use the “Get Custom Field” widget, the [[custom_field]] shortcode (which has a sidebar widget to help you build the shortcode), or one of six template tags to retrieve and display custom fields. Find a custom field for the current post, a specified post, a recent post, or randomly. And for the custom field values found by the plugin, you may optionally specify text or HTML to appear before and after the results. If nothing is found, then nothing is display (unless you define text to appear when no results are found). If multiple results are found, only the first will be displayed unless you specify a string to be used to join the results together (such as “,”), in which case all will be returned. Visit the Examples section to see how this plugin can be cast in dozens of different ways.

There are six template tags provided by this plugin. Here they are, with an explanation of when they are appropriate for use:

  • c2c_get_custom() : Use this inside “the loop” to retrieve a custom field value for a post
  • c2c_get_current_custom() : This is only available on the permalink post template (single.php) and page template (page.php). Can be used inside or outside “the loop”. Useful for using custom field to define text you want to include on a post or page’s header, footer, or sidebar.
  • c2c_get_post_custom() : Useful when you know the ID of the post whose custom field value you want.
  • c2c_get_random_custom() : Retrieve the value of a random instance of the specified custom field key, as long as the field is associated with a published posted, non-passworded post (you can modify a setting in the plugin file to search passworded posts as well).
  • c2c_get_random_post_custom() : Retrieves the value of random custom field(s) from a post when you know the ID of the post you’re interested in.
  • c2c_get_recent_custom() : Retrieves the most recent (according to the associated post’s publish date) value of the specified custom field.

You can filter the custom field values that the plugin would display. Add filters for ‘the_meta’ to filter custom field data (see the end of the code file for commented out samples you may wish to include). You can also add per-meta filters by hooking ‘the_meta_$sanitized_field’. ‘$sanitized_field’ is a clean version of the value of `$field` where everything but alphanumeric and underscore characters have been removed. So to filter the value of the “Related Posts” custom field, you would need to add a filter for ‘the_meta_RelatedPosts’.

Screenshots

Click to see full-size image.

  • Screenshot of the plugin’s widget configuration.

    screenshot 1

  • Screenshot of the plugin’s shortcode builder.

    screenshot 2


Installation

  1. Download the file get-custom.zip and unzip it into your wp-content/plugins/ directory.
  2. (optional) Add filters for ‘the_meta’ to filter custom field data (see the end of the file for commented out samples you may wish to include). And/or add per-meta filters by hooking ‘the_meta_$field’
  3. Activate the plugin through the ‘Plugins’ admin menu in WordPress
  4. Give post(s) a custom field with a value
  5. (optional; only for WP2.8+) Go to the Appearance → Widgets admin page to create one or more ‘Get Custom Field’ sidebar widgets for your widget-enabled theme.
  6. (optional) Use one of the six template functions provided by this plugin to retrieve the contents of custom
    fields. You must ‘echo’ the result if you wish to display the value on your site.

Tips & Examples

  • With this simple invocation, you can echo the value of any metadata field (where, of course, ‘mymood’ is the custom field key of interest):

    <?php echo c2c_get_custom('mymood'); ?>

  • Want the behavior of a moods plugins?
    <?php echo c2c_get_custom('mood', '(Current mood : ', ')'); ?>

    Example results:
    [if 'mood' is set to 'happy!'] (Current mood: happy!)
    (add filters if you wish to use smilies, etc)

  • <?php echo c2c_get_recent_custom('mymood', 'Most recent mood: '); ?>
  • Want the behavior of a currently reading/currently listening to plugin?

    <?php echo c2c_get_custom('reading', 'Currently reading :'); ?>

    [if value for 'reading' is 'Cujo'] Currently reading: Cujo

    <?php echo c2c_get_custom('reading', 'Currently reading: <i>', '</i>', '', '</i>, <i>'); ?>

    [if three 'reading' fields were defined, with values 'Carrie', 'Cujo', and 'The Shining']
    Currently reading: Carrie, Cujo, The Shining

    <?php echo c2c_get_custom('listening', 'Now playing ', ' on my stereo.', 'nothing'); ?>

    [if value for 'listening' is 'The Beatles'] Now playing The Beatles on my stereo.
    [if no value defined for 'listening'] Now playing nothing on my stereo.

  • Want the behavior of a Post Icon plugin (image to display for the post, not derived from category)?

    <?php echo c2c_get_custom('post_icon', '<img alt="post icon" class="posticon" src="/wp-images/posticons/', '.gif" />', 'blank'); ?>

    Which would yield:

    [if value for 'post_icon' is 'wordpress']
    <img alt="post icon" class="posticon" src="/wp-images/posticons/wordpress.gif" />

  • Want to do per-post customized ‘more’ text? (to override the default “Read the rest of this entry >>”) (This example will show that default, which you can of course change, if you don’t define the custom field ‘more’ for a post)

    In index.php, look for this function: <?php the_content(); ?>

    Replace it with this:

    <?php the_content(c2c_get_custom('more', '<span class="more">', '</span>', 'Read the rest of this entry »')); ?>

  • <?php echo c2c_get_custom('todays_link', '<a class="tlink" href="', '" >Today\'s Link</a>'); ?>
  • <?php echo c2c_get_custom('related_offsite_links', 
      'Here\'s a list of offsite links related to this post:<ol><li><a href="',
      '">Related</a></li></ol>',
      '',
      '">Related</a></li><li><a href="'); ?>
  • <?php echo c2c_get_custom('more_pictures',
      'Pictures I\'ve taken today:<br /><div class="more_pictures"><img alt="[photo]" src="',
      '" /></div>',
      '',
      '" /> : <img alt="[photo]" src="'); ?>

Template Tags

Functions

  • <?php function c2c_get_custom( $field, $before='', $after='', $none='', $between='', $before_last='' ) ?>
    Template tag for use inside “the loop” and applies to the currently listed post.
  • <?php function c2c_get_recent_custom( $field, $before='', $after='', $none='', $between=', ', $before_last='', $limit=1, $unique=false, $order='DESC', $include_pages=true, $show_pass_post=false ) ?>
    Template tag for use outside “the loop” and applies for custom fields regardless of post.
  • <?php function c2c_get_post_custom( $post_id, $field, $before='', $after='', $none='', $between='', $before_last='' ) ?>
    Template tag for use when you know the ID of the post you’re interested in.
  • <?php function c2c_get_random_custom( $field, $before='', $after='', $none='' ) ?>
    Template tag for use to retrieve a random custom field value.
  • <?php function c2c_get_random_post_custom( $post_id, $field, $limit=1, $before='', $after='', $none='', $between='', $before_last='' ) ?>
    Template tag for use to retrieve random custom field value(s) from a post when you know the ID of the post you’re interested in.
  • <?php function c2c_get_recent_custom( $field, $before='', $after='', $none='', $between=', ', $before_last='', $limit=1, $unique=false, $order='DESC', $include_pages=true, $show_pass_post=false ) ?>
    Template tag for use outside “the loop” and applies for custom fields regardless of post.

Arguments

  • $post_id
    Required argument (only used in c2c_get_post_custom()). The ID of the post from which the custom field should be obtained.
  • $field
    Required argument. The custom field key of interest.
  • $before
    Optional argument. The text to display before all field value(s).
  • $after
    Optional argument. The text to display after all field value(s).
  • $none
    Optional argument. The text to display in place of the field value should no field value exists; if defined as ” and no field value exists, then nothing (including no $before and $after) gets displayed.
  • $between
    Optional argument. The text to display between multiple occurrences of the custom field; if defined as ”, then only the first instance will be used.
  • $before_last
    Optional argument. The text to display between the next-to-last and last items listed when multiple occurrences of the custom field; $between MUST be set to something other than ” for this to take effect.

Arguments that only apply to c2c_get_recent_custom():

  • $limit
    Optional argument. The limit to the number of custom fields to retrieve.
  • $unique
    Optional argument. Boolean (’true’ or ‘false’) to indicate if each custom field value in the results should be unique.
  • $order
    Optional argument. Indicates if the results should be sorted in chronological order (’ASC’) (the earliest custom field value listed first), or reverse chronological order (’DESC’) (the most recent custom field value listed first).
  • $include_pages
    Optional argument. Boolean (’true’ or ‘false’) to indicate if pages should be included when retrieving recent custom values; default is ‘true’.
  • $show_pass_post
    Optional argument. Boolean (’true’ or ‘false’) to indicate if password protected posts should be included when retrieving recent custom values; default is ‘false’.

Frequently Asked Questions

  • Q: I added the template tag to my template and the post has the custom field I’m asking for but I don’t see anything about it on the page; what gives?

    A: Did you echo the return value of the function, e.g. <?php echo c2c_get_custom('mood', 'My mood: '); ?>

  • Q: Can I achieve all the functionality allowed by the six template functions using the widget?

    A: Except for c2c_get_custom() (which is only available inside “the loop”), yes, by carefully setting the appropriate settings for the widget.

  • Q: How do I configure the widget to match up with the template functions?

    A:

    • c2c_get_custom() : not achievable via the widget
    • c2c_get_current_custom() : set the “Post ID” field to `0`, leave “Pick random value?” unchecked, and set other values as desired.
    • c2c_get_post_custom() : set the “Post ID” field to the ID of the post you want to reference and set other values as desired.
    • c2c_get_random_custom() : leave “Post ID” blank, check “Pick random value?”, and set other values as desired.
    • c2c_get_random_post_custom() : set the “Post ID” field to the ID of the post you want to reference, check “Pick random value?”, and set other values as desired.
    • c2c_get_recent_custom() : leave “Post ID” blank and set other values as desired.
  • Q: Why can’t I see the widget or shortcode builder as mentioned in the features listing?

    A: Those features are only available if you are running WordPress 2.8 or later.


Release Log

  • 11 Jul 2009 : v3.0.1 — Fix to prevent error when running in version of WP older than 2.8 (effectively disables shortcode support for older versions)
  • 09 Jul 2009 : v3.0 — Release Notes (Added widget support, shortcode support, four new template tags, updated for WP2.8+)
  • 01 Apr 2008 : v2.5 — Release Notes
  • NOTE: Information and discussion for versions of this plugin prior to v2.5 are here.
  • 26 Mar 2005 : v2.1 released –
    • Removed the $filter argument from c2c_get_custom() and c2c_get_recent_custom()
    • Replaced $filter argument with more robust filtering approach: filter every custom field via the action ‘the_meta’, filter specific custom fields via ‘the_meta_$field’
    • Add argument $include_static (defaulted to true) to c2c_get_recent_custom(); static posts (i.e. “pages”) can be optionally excluded from consideration
    • Verified to work for WP 1.5 (and should still work for WP 1.2)
  • 08 Sep 2004 : v2.01 and v.202 release — minor bugfixes
  • 07 Sep 2004 : v2.0 released :
    • Added the new function c2c_get_recent_custom() that allows retrieving custom/meta data from outside “the loop”
    • Better filtering (on meta field itself instead of final output string)
    • Per-call filtering of meta fields
    • Prepended all functions with “c2c_” to avoid potential function name collision with other plugins or future core functions… NOTE: If you are upgrading from an earlier version of the plugin, you’ll need to change your calls from get_custom() to c2c_get_custom()
    • Changes to make the plugin WordPress v1.3 ready (as-yet unverified)
    • Switched to MIT license
  • 22 Jul 2004 : v1.0 released — added argument of $before_last (which, went $between is also defined, will be used to join the next-to-last and last items in a list); added invocation of an action called ‘the_meta’ so that you can do add_filter(’the_meta’, ’some_function’) and get custom field values filtered as they are retrieved; to faciliate use of this plugin as the argument to another function, this plugin no longer echoes the value(s) it retrieves (user must prepend ‘echo’ to the call to get_cust())
  • 30 Jun 2004: v0.91 bugfix release
  • 30 Jun 2004: v0.9 released to the public

Copyright & Disclaimer

Copyright © 2004-2009 by Scott Reilly (aka coffee2code)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


Acknowledgements

Thanks to all those who have contributed feedback and support!