Languages: English • Italiano • 日本語 (Add your language)
wp_parse_args is a generic utility for merging together an array of arguments and an array of default values. It can also be given a URL query type string which will be converted into an array (i.e. "id=5&status=draft").
It is used throughout WordPress to avoid having to worry about the logic of defaults and input, and produces a stable pattern for passing arguments around. Functions like query_posts, wp_list_comments and get_terms are common examples of the simplifying power of wp_parse_args.
Functions that have an $args based setting are able to infinitely expand the number of values that can potentially be passed into them, avoiding the annoyance of super-long function calls because there are too many arguments to keep track of, many of whose only function is to override usually-good defaults on rare occasions.
wp_parse_args() is used inside a function you are defining to process incoming arguments. Below is an example of how wp_parse_args() can merge an array of defaults with an array of mixed arguments.
/** * Define the array of defaults */ $defaults = array( 'type' => 'post', 'before' => "<p>", 'after' => "</p> \n", 'echo' => TRUE ); /** * Parse incoming $args into an array and merge it with $defaults */ $args = wp_parse_args( $args, $defaults );
Can be passed URL-query style
type=post&posts_per_page=5&cat=1
Or as an array definition
array( 'type' => 'post', 'posts_per_page' => 5, 'cat' => '1' )
Below is an example function using the wp_parse_args system to manage its single $args argument, which could be given whatever values you wanted. In this case $args stores detailed display overrides, a pattern found in many WordPress functions.
/** * Define a new function that uses $args and wp_parse_args() */ function explain_parse_args( $args ) { $defaults = array ( 'text' => 'wp_parse_args() merges $args into $defaults', 'before' => "<p>", 'after' => "</p> \n", 'echo' => TRUE ); // Parse incoming $args into an array and merge it with $defaults $args = wp_parse_args( $args, $defaults ); $output = $args['before'] . $args['text'] . $args['after']; if (!$echo) return $output; echo $output; } /** * Run our new function using the defaults (no $args) * This would print out: * <p>wp_parse_args() merges $args into $defaults</p> */ explain_parse_args(); /** * Run the function with some options overridden with an array * This would echo the output with the modified text and before arguments: * <p class='specialclass'>A better explanation</p> */ explain_parse_args( array ( 'text' => "A better explanation", 'before' => "<p class='specialclass'>" ) ); /** * We can also pass in URL-style string-query and it will be converted * This would set $args['echo'] to 1 and $args['text'] to 0 */ explain_parse_args( 'echo=1&text=0' );
Since: 2.2.0
wp_parse_args() is located in wp-includes/functions.php
.