提问人:Nikita Pelevin 提问时间:6/8/2023 更新时间:6/8/2023 访问量:45
元框 Wordpress 中的多个复选框
Multiple checkbox in metabox Wordpress
问:
我在帖子管理面板中制作了多个复选框。当用户创建帖子并选中必要的复选框时,它会将其存储以输出到帖子页面中。 我用于创建和保存复选框的代码。
function expertise_checkbox_meta_box_callback( $post, $meta ){
$screens = $meta['args'];
wp_nonce_field( plugin_basename(__FILE__), 'expertise_checkbox_field_noncename' );
$value = maybe_unserialize(get_post_meta( $post->ID, 'expertise_checkbox_elements', true ));
//"id" => "value"
$expertise_checkbox_elements = array(
'design_research' => pll__('Design research'),
'product_design' => pll__('Product design'),
'3d_modelling' => pll__('3D modelling'),
'engineering' => pll__('Engineering'),
'dfm' => pll__('Design for manufacturing'),
'prototyping' => pll__('Prototyping'),
'production' => pll__('Production')
);
foreach ( $expertise_checkbox_elements as $id => $element ) {
// If the value for checkboxes exist and
// this element is part of saved meta check it.
if ( is_array( $value ) && in_array( $id, $value ) ) {
$checked = 'checked="checked"';
} else {
$checked = null;
}
?>
<p>
<input type="checkbox" name="multval[]" value="<?php echo $id;?>" <?php echo $checked; ?> />
<?php echo $element;?>
<br>
</p>
<?php
}
}
##Save
add_action( 'save_post', 'client_company_save_postdata' );
function client_company_save_postdata( $post_id ) {
$is_revision = wp_is_post_revision( $post_id );
$is_valid_nonce = ( isset( $_POST[ 'expertise_checkbox_field_noncename' ] ) && wp_verify_nonce( $_POST[ 'expertise_checkbox_field_noncename' ], basename( __FILE__ ) ) ) ? 'true' : 'false';
if ( $is_revision || !$is_valid_nonce )
return;
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return;
if( ! current_user_can( 'edit_post', $post_id ) )
return;
if ( ! empty( $_POST['multval'] ) ) {
update_post_meta( $post_id, 'expertise_checkbox_elements', $_POST['multval'] );
// Otherwise just delete it if its blank value.
} else {
delete_post_meta( $post_id, 'expertise_checkbox_elements' );
}
}
这段代码起作用了(它是保存复选框状态并更新它)。但是当我在帖子页面上输出复选框值数组时,我看到的不是“设计研究”,而是“制造设计”等。
输出值的代码。design_research
dfm
<?php
$expertise_elements = (get_post_meta( $post->ID, 'expertise_checkbox_elements', true ));
foreach ($expertise_elements as $element) {
echo ('<li>'.$element.'</li>');
}
?>
我看到我存储了数组中的“键”,而不是值。但我不明白如何使这段代码从数组输出“值”。
答:
1赞
Caleb
6/8/2023
#1
您可以将数组的键设置为用户友好,但更合适的方法是在函数中定义选项数组,然后在后端和前端使用该函数。
评论
0赞
Nikita Pelevin
6/9/2023
谢谢!这段代码对我有用!
1赞
GeorgeP
6/8/2023
#2
只需使用您最初拥有的相同数组作为名称的映射即可。 像这样的东西:
$names = array(
'design_research' => __('Design research'),
'product_design' => __('Product design'),
'3d_modelling' => __('3D modelling'),
'engineering' => __('Engineering'),
'dfm' => __('Design for manufacturing'),
'prototyping' => __('Prototyping'),
'production' => __('Production')
);
$expertise_elements = (get_post_meta($post->ID, 'expertise_checkbox_elements', true));
foreach ($expertise_elements as $el) {
echo ('<li>' . $names[$el] . '</li>');
}
根据代码的其余部分,为了不重复自己,您可以将该数组作为类变量、函数或用户提供的值/名称列表。
评论
0赞
Nikita Pelevin
6/9/2023
谢谢!你的代码也起作用了。但是 Caleb 的解决方案更适合我,因为我只需要在一个地方编辑数组。
1赞
GeorgeP
6/9/2023
@NikitaPelevin这就是我在上面的评论中所说的,根据你的其余代码,你不应该 DRY,我建议一个函数、一个类变量或其他方法 - en.wikipedia.org/wiki/Don%27t_repeat_yourself
评论