php函数 - 如何使查询动态化

时间:2015-11-13 13:02:10

标签: php

如何创建一个带有硬编码值下拉(“Hard”,“Soft”和“None”)的元数据的函数,并根据给定的字符串数组动态创建元数据?

原始功能:

function your_prefix_product_fields( $meta_boxes )
{
	$meta_boxes[] = array(
		'title'  => __( 'Product Fields', 'your-prefix' ),
                'post_types' => array(
                    'product',
                ),
		'fields' => array(
           array(
				'name'        => __( 'Package', 'test' ),
				'id'          => 'package',
				'type'        => 'select',
				'clone'       => false,
				'options'     => array(
					'Soft' => __( 'Soft', 'test' ),
                    'Hard' => __( 'Hard', 'test' ),
					'None' => __( 'None', 'test' ),
				),
				'multiple'    => true,
				'std'         => 'none',
				'placeholder' => __( 'Select Package', 'test' ),
			),
		)
	);
return $meta_boxes;
}

我有阵列:["Hard", "Soft", "None"]

编辑: 我更多地考虑了我的问题,也许我可以说得更清楚:

我想要做的是从查询输出中动态创建此数组:

'options'     => array(
                        'Soft' => __( 'Soft', 'test' ),
                        'Hard' => __( 'Hard', 'test' ),
                        'None' => __( 'None', 'test' ),
                    ),

其他问题:

1)如果我可以手动创建'options array',我可以编写类似的内容:

'options'     => $packages,

鉴于我能够创建数组包,使其看起来像:

array(
                        'Soft' => __( 'Soft', 'test' ),
                        'Hard' => __( 'Hard', 'test' ),
                        'None' => __( 'None', 'test' ),
                    ),

2)如何创建这种类型的数组?它是哈希映射吗?

我尝试过类似的事情:

$packages['Soft'] = ('Soft', 'test');

没有运气......它的语法是什么?

1 个答案:

答案 0 :(得分:0)

如果我正确理解你的问题,听起来你已经有了一个元框并且正在工作,但是你试图为它提供一个可变的下拉选项列表。

这里的混淆似乎是'options'数组的语法。重要的是要认识到__($param1, $param2)只是wordpress定义的翻译函数,用于本地化。它将返回一个sting,它是基于域(第二个参数)的第一个参数(字符串)的转换。更多信息:https://codex.wordpress.org/Function_Reference/_2

那就是说,你是在正确的轨道上,但你希望$packages是这样的:

$packages = array(
    'Soft' => $val1,
    'Hard' => $val2,
    'None' => $val3
)

三个变量是你想要的任何字符串。然后你应该能够将$packages作为另一个参数传递给函数,并将其设置为options的值,就像你想的那样。此外,如果您需要翻译并希望使用双下划线方法,则应该能够在创建阵列时调用该函数。或者您可以在设置为your_prefix_product_fields之前在'options'内循环遍历数组:

foreach ($packages as $key => $opt)
    $packages[$key] = __($opt, 'test');