CopyPastor

Detecting plagiarism made easy.

Score: 0.8049848675727844; Reported for: String similarity Open both answers

Possible Plagiarism

Reposted on 2021-01-25
by LoicTheAztec

Original Post

Original - Posted on 2018-06-11
by LoicTheAztec



            
Present in both answers; Present only in the new answer; Present only in the old answer;

There was another issue with the function woocommerce_wp_multi_checkbox() that [I have updated][1] again *(when used in a custom metabox)*.
I have also revisited all your code, specially the last function that saves the multi-checkboxes selected values.
The complete code: ``` // WooCommerce admin custom multi checkbox field function function woocommerce_wp_multi_checkbox( $field ) { global $thepostid, $post;
if( ! $thepostid ) { $thepostid = $post->ID; }
$field['value'] = get_post_meta( $thepostid, $field['id'], true );
$thepostid = empty( $thepostid ) ? $post->ID : $thepostid; $field['class'] = isset( $field['class'] ) ? $field['class'] : 'select short'; $field['style'] = isset( $field['style'] ) ? $field['style'] : ''; $field['wrapper_class'] = isset( $field['wrapper_class'] ) ? $field['wrapper_class'] : ''; $field['value'] = isset( $field['value'] ) ? $field['value'] : array(); $field['name'] = isset( $field['name'] ) ? $field['name'] : $field['id']; $field['desc_tip'] = isset( $field['desc_tip'] ) ? $field['desc_tip'] : false;
echo '<fieldset class="form-field ' . esc_attr( $field['id'] ) . '_field ' . esc_attr( $field['wrapper_class'] ) . '"> <legend>' . wp_kses_post( $field['label'] ) . '</legend>';
if ( ! empty( $field['description'] ) && false !== $field['desc_tip'] ) { echo wc_help_tip( $field['description'] ); }
echo '<ul class="wc-radios">';
foreach ( $field['options'] as $key => $value ) {
echo '<li><label><input name="' . esc_attr( $field['name'] ) . '" value="' . esc_attr( $key ) . '" type="checkbox" class="' . esc_attr( $field['class'] ) . '" style="' . esc_attr( $field['style'] ) . '" ' . ( is_array( $field['value'] ) && in_array( $key, $field['value'] ) ? 'checked="checked"' : '' ) . ' /> ' . esc_html( $value ) . '</label> </li>'; } echo '</ul>';
if ( ! empty( $field['description'] ) && false === $field['desc_tip'] ) { echo '<span class="description">' . wp_kses_post( $field['description'] ) . '</span>'; }
echo '</fieldset>'; }
// Adding a custom Metabox on WooCommerce single orders add_action( 'add_meta_boxes', 'add_custom_shop_order_metabox' ); function add_custom_shop_order_metabox(){ add_meta_box( 'custom_shop_order_metabox', __('Employee Extra Actions', 'woocommerce'), 'content_custom_shop_order_metabox', 'shop_order', 'side', 'core' ); }

// Custom Metabox content on WooCommerce single orders function content_custom_shop_order_metabox() { global $thepostid, $post;
echo '<div class="options_group">';
woocommerce_wp_multi_checkbox( array( 'id' => 'employee_actions12', 'name' => 'employee_actions12[]', 'label' => __('Levels', 'woocommerce'), 'options' => array( 'tee' => __( 'MBO', 'woocommerce' ), 'saa' => __( 'HBO', 'woocommerce' ), 'tee1' => __( 'WO', 'woocommerce' ), ), ) );

echo '</div>'; }
// Save WooCommerce single orders Custom Metabox field values add_action( 'save_post_shop_order', 'save_custom_shop_order_metabox_field_values' ); function save_custom_shop_order_metabox_field_values( $post_id ){ if ( ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) || ! current_user_can( 'edit_shop_order', $post_id ) ) { return; }
if( isset( $_POST['employee_actions12'] ) ){ update_post_meta( $post_id, 'employee_actions12', wc_clean($_POST['employee_actions12']) ); } } ``` Code goes in functions.php file of the active child theme (or active theme). Tested and works.
[1]: https://stackoverflow.com/questions/50799927/multi-checkbox-fields-in-woocommerce-backend/50802095#50802095
**2021 Update**
> **2021 Update** - Solved issues with: <br> • `in_array()` where 2nd argument was a string on start*. <br> • `$thepostid` as in some cases it was empty.
That is possible creating a custom function this way:
// New Multi Checkbox field for woocommerce backend function woocommerce_wp_multi_checkbox( $field ) { global $thepostid, $post;
if( ! $thepostid ) { $thepostid = $post->ID; }
$field['value'] = get_post_meta( $thepostid, $field['id'], true );
$thepostid = empty( $thepostid ) ? $post->ID : $thepostid; $field['class'] = isset( $field['class'] ) ? $field['class'] : 'select short'; $field['style'] = isset( $field['style'] ) ? $field['style'] : ''; $field['wrapper_class'] = isset( $field['wrapper_class'] ) ? $field['wrapper_class'] : ''; $field['value'] = isset( $field['value'] ) ? $field['value'] : array(); $field['name'] = isset( $field['name'] ) ? $field['name'] : $field['id']; $field['desc_tip'] = isset( $field['desc_tip'] ) ? $field['desc_tip'] : false;
echo '<fieldset class="form-field ' . esc_attr( $field['id'] ) . '_field ' . esc_attr( $field['wrapper_class'] ) . '"> <legend>' . wp_kses_post( $field['label'] ) . '</legend>';
if ( ! empty( $field['description'] ) && false !== $field['desc_tip'] ) { echo wc_help_tip( $field['description'] ); }
echo '<ul class="wc-radios">';
foreach ( $field['options'] as $key => $value ) {
echo '<li><label><input name="' . esc_attr( $field['name'] ) . '" value="' . esc_attr( $key ) . '" type="checkbox" class="' . esc_attr( $field['class'] ) . '" style="' . esc_attr( $field['style'] ) . '" ' . ( is_array( $field['value'] ) && in_array( $key, $field['value'] ) ? 'checked="checked"' : '' ) . ' /> ' . esc_html( $value ) . '</label> </li>'; } echo '</ul>';
if ( ! empty( $field['description'] ) && false === $field['desc_tip'] ) { echo '<span class="description">' . wp_kses_post( $field['description'] ) . '</span>'; }
echo '</fieldset>'; }
Code goes in function.php file of your active child theme (or active theme). Tested and works.
> Related: https://stackoverflow.com/questions/50132928/multi-select-fields-in-woocommerce-backend/50159063#50159063
------
Usage example *(for a simple product)*:
// Add custom multi-checkbox field for product general option settings add_action( 'woocommerce_product_options_general_product_data', 'add_custom_settings_fields', 20 ); function add_custom_settings_fields() { global $post;
echo '<div class="options_group hide_if_variable"">'; // Hidding in variable products
woocommerce_wp_multi_checkbox( array( 'id' => '_custom_level', 'name' => '_custom_level[]', 'label' => __('Levels', 'woocommerce'), 'options' => array( 'MBO' => __( 'MBO', 'woocommerce' ), 'HBO' => __( 'HBO', 'woocommerce' ), 'WO' => __( 'WO', 'woocommerce' ) ) ) );
echo '</div>'; }
// Save custom multi-checkbox fields to database when submitted in Backend (for all other product types) add_action( 'woocommerce_process_product_meta', 'save_product_options_custom_fields', 30, 1 ); function save_product_options_custom_fields( $post_id ){ if( isset( $_POST['_custom_level'] ) ){ $post_data = $_POST['_custom_level']; // Data sanitization $sanitize_data = array(); if( is_array($post_data) && sizeof($post_data) > 0 ){ foreach( $post_data as $value ){ $sanitize_data[] = esc_attr( $value ); } } update_post_meta( $post_id, '_custom_level', $sanitize_data ); } }
Code goes in function.php file of your active child theme (or active theme). Tested and works.
[![enter image description here][1]][1]
> The selected values are correctly saved and displayed. For info the value is an array.


[1]: https://i.stack.imgur.com/F3ua9.png

        
Present in both answers; Present only in the new answer; Present only in the old answer;