当前浏览:首页 / WordPress函数 / wp_parse_args()

wp_parse_args( string|array|object $args, array $defaults = array() )

将用户定义的参数合并到默认数组中

args

parse


描述

这个函数在整个WordPress中使用,以允许字符串或数组合并到另一个数组中。


参数

$args

(string|array|object)(必填) 要与$defaults合并的值。

$defaults

(array)(可选) 用作默认值的数组。

默认值: array()


返回

(array) 将用户定义的值与默认值合并。


更多信息

wp_parse_args是一个通用实用程序,用于将参数数组和默认值数组合并在一起。还可以给它一个URL查询类型字符串,该字符串将被转换为数组(即"id=5&status=draft")。

它在整个WordPress中使用,以避免担心默认值和输入的逻辑,并为传递参数生成稳定的模式。像query_postswp_list_commentsget_terms这样的函数是wp_parse_args的简化能力的常见示例。

具有基于$args的设置的函数能够无限扩展可能传递给它们的值的数量,避免了因为要跟踪的参数太多而导致超长函数调用的麻烦,其中许多参数的唯一功能是在罕见情况下覆盖通常良好的默认值。



源码

查看源码 官方文档


更新日志

版本描述
2.3.0$args现在也可以是对象。
2.2.0开始引入

使用示例

  • 示例1

    基本用法:

    function wpdocs_my_function( $args ) {
    
      $defaults = array(
        'name' => 'Mr. nobody',
        'favorite_color' => 'unknown',
        'age' => 'unknown',
      );
    
      $args = wp_parse_args( $args, $defaults );
    
      print_r( $args );
    
    }
    
    $args = array( 'age' => 36 );
    wpdocs_my_function( $args );
    
    // Output:
    // 
    // Array(
    //   'name' => 'Mr. nobody',
    //   'favorite_color' => 'unknown',
    //   'age' => 36,
    // )
    
  • 示例2

    感谢bhlarsen提供此函数,但有一个小错误:

    if (!$echo) 

    必须替换为

    if (!$args['echo'])
  • 示例3

    下面是一个使用wp_parse_args系统来管理其单个$args参数的示例函数,可以为其提供任何您想要的值。
    在本例中$args存储详细的显示覆盖,这是许多WordPress函数中的一种模式。

    /**
     * Define a new function that uses $args and wp_parse_args()
     */
    function wpdocs_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>
     */
    wpdocs_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>
     */
    wpdocs_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	
     */
    wpdocs_explain_parse_args( 'echo=1&text=0' );
    
    
  • 示例4

    如果您希望递归合并两个数组,则函数如下:

    if ( ! function_exists( 'awps_recursive_parse_args' ) ) {
    	function awps_recursive_parse_args( $args, $defaults ) {
    		$new_args = (array) $defaults;
    
    		foreach ( $args as $key => $value ) {
    			if ( is_array( $value ) && isset( $new_args[ $key ] ) ) {
    				$new_args[ $key ] = awps_recursive_parse_args( $value, $new_args[ $key ] );
    			}
    			else {
    				$new_args[ $key ] = $value;
    			}
    		}
    
    		return $new_args;
    	}
    }
    

    测试用例:

    $defaults = [
    	'x1' => 'level1',
    	'x2' => [
    		'a1' => 'level1',
    		'a2' => 'level1',
    	],
    	'x4' => [
    		'b1' => [
    			'c1' => 'level1',
    		],
    		'b2' => 'level1',
    	],
    	'x3' => 'level1',
    ];
    $args     = [
    	'x3' => 'level2',
    	'x2' => [
    		'a2' => 'level2',
    	],
    	'x4' => [
    		'b1' => [
    			'c1' => 'level2',
    			'c2' => 'leve2',
    			'c3' => [
    				'd1' => [
    					'e1' => 'ok',
    				],
    			],
    		],
    	],
    ];
    
    print_r( awps_recursive_parse_args( $args, $defaults );
    
    /**
     * Result
     */
    /*
    [
    	'x1' => 'level1',
    	'x2' => [
    		'a1' => 'level1',
    		'a2' => 'level2',
    	],
    	'x4' => [
    		'b1' => [
    			'c1' => 'level2',
    			'c2' => 'leve2',
    			'c3' => [
    				'd1' => [
    					'e1' => 'ok',
    				],
    			],
    		],
    		'b2' => 'level1',
    	],
    	'x3' => 'level2',
    ];
    */