我需要将数组从多个函数传递给一个函数。我正在使用apply_filters_ref_array()
为此。问题是它只接受从最高优先级callbak传递的数组。以下是场景:
//First Callbak
function first_callback() {
$html[\'abc\'] = \'xyz\';
return $html;
}
add_filter( \'process_args\', \'first_callback\' );
//Second Callbak
function second_callback() {
$html[\'def\'] = \'uvw\';
return $html;
}
add_filter( \'process_args\', \'second_callback\' );
//Third Callbak
function third_callback() {
$html[\'ghi\'] = \'rst\';
return $html;
}
add_filter( \'process_args\', \'third_callback\' );
//Callbak that processes $args
function process_args( $args ) {
$args = apply_filters_ref_array( \'process_args\', $args );
print_r( $args );
}
现在
print_r( $args );
打印上一个函数传递的数组。
Array (
[ghi] => rst
)
我需要将其打印为:
Array (
[abc] => xyz
[def] => uvw
[ghi] => rst
)
我该怎么做?
谢谢
EDIT:
我正在使用的当前代码
function pwpus_input_field_text( $field, $inputs, $html=array() ) {
$html[\'text\'] = \'<input id="\'.$field[\'id\'].\'" type="text" class="pwpus-text-input pwpus-input-size-\'.$field[\'size\'].\'" name="\'.$field[\'name\'].\'" value="\'.$field[\'default\'].\'">\';
return $html;
}
add_filter( \'pwpus_input_fields\', \'pwpus_input_field_text\' );
function pwpus_input_field_tel( $field, $inputs, $html=array() ) {
$html[\'tel\'] = \'<input id="\'.$field[\'id\'].\'" type="tel" class="pwpus-text-input pwpus-input-size-\'.$field[\'size\'].\'" name="\'.$field[\'name\'].\'" value="\'.$field[\'default\'].\'">\';
return $html;
}
add_filter( \'pwpus_input_fields\', \'pwpus_input_field_tel\' );
function pwpus_input_field_email( $field, $inputs, $html=array() ) {
$html[\'email\'] = \'<input id="\'.$field[\'id\'].\'" type="email" class="pwpus-text-input pwpus-input-size-\'.$field[\'size\'].\'" name="\'.$field[\'name\'].\'" value="\'.$field[\'default\'].\'">\';
return $html;
}
add_filter( \'pwpus_input_fields\', \'pwpus_input_field_email\' );
function pwpus_shortcode_form( $fields, $inputs=array() ) {
$inputs = apply_filters_ref_array( \'pwpus_input_fields\', $inputs );
//$inputs = do_action( \'pwpus_input_fields\' );
if ( array_key_exists( \'class\', $fields ) && $fields[\'class\'] != \'\' ) {
$class = \' \' . $fields[\'class\'];
} else {
$class = \'\';
}
if ( array_key_exists( \'callback\', $fields ) && $fields[\'callback\'] != \'\' ) {
$callback = $fields[\'callback\'];
} else {
$callback = \'pwusp_nocallback\';
}
$html = \'<form id="pwpus-shortcode-form" class="pwpus-shortcode-form\' . $class . \'" action="pwpus_parse_scform">\';
$html .= \'<table class="pwpus-shortcode-form-table">\';
if ( array_key_exists( \'fields\', $fields ) && is_array($fields[\'fields\']) ) {
foreach ( $fields[\'fields\'] as $field ) {
//$html .= pwpus_fields( $field );
$html .= \'<tr id="field-\'. $field[\'id\'] .\'"><td><label for="\'. $field[\'name\'] .\'">\'. $field[\'label\'] .\'</label></td><td>:</td><td>\' . $inputs[ $field[\'type\'] ]. \'<span class="pwpus-field-desc">\'. $field[\'desc\'] .\'</span></td></tr>\';
}
}
$html .= \'<input type="hidden" name="callback" value="\'. $callback .\'">\';
$html .= wp_nonce_field( \'pwpus-shortcode-nonce\', \'pwpus-shortcode-nonce\', false );
$html .= \'</table>\';
$html .= \'<div class="pwpus-form-buttons"><button type="submit" id="pwpus-scform-submit" class="pwpus-scform-submit">\' . __( \'Generate Shortcode\', \'purewp\' ) . \'</button><button type="reset" id="pwpus-scform-reset" class="pwpus-scform-reset">\' . __( \'Reset\', \'purewp\' ) . \'</button></div>\';
$html .= \'</form>\';
//return $html;
print_r( $inputs );
}
SO网友:birgire
您忘记传递过滤器回调的输入参数,如:
function first_callback( $html = [] ) {
$html[\'abc\'] = \'xyz\';
return $html;
}
add_filter( \'process_args\', \'first_callback\' );
我们更换的地方
=>
对于
=
.
否则,每次只需替换筛选值!
Update:
我在你的更新代码中看到你有,例如。
function pwpus_input_field_email( $field, $inputs, $html=array() ) {
$html[\'email\'] = \'<input
id="\'.$field[\'id\'].\'"
type="email"
class="pwpus-text-input pwpus-input-size-\'.$field[\'size\'].\'"
name="\'.$field[\'name\'].\'"
value="\'.$field[\'default\'].\'">\';
return $html;
}
add_filter( \'pwpus_input_fields\', \'pwpus_input_field_email\' );
这里出现的问题很少:
一般来说,还有其他方法可以实现这一点吗我们必须归还first 过滤器回调中的输入参数我认为$html
不需要变量我想你可以回来$inputs
而不是$html
然后改用它关于如何使用变量名,可能会与变量名混淆$inputs
具有apply_filters_ref_array
在过滤器回调中我想我们应该用apply_filters
而不是apply_filters_ref_array
避免这种混淆如果我们使用apply_filters
, 然后,我们必须使用正确的优先级和输入参数数量注册过滤器回调记住使用esc_attr()
构造输入标记的属性时我想是吧$field
应调用$fields
检查位置,例如非空$fields[\'email\'][\'id\']
在使用之前,请等希望对您有所帮助!