[WORDPRESS] Woocommerce 관리자 주문에 대한 사용자 정의 메탈이있는 드롭 다운 필터 추가
WORDPRESSWoocommerce 관리자 주문에 대한 사용자 정의 메탈이있는 드롭 다운 필터 추가
해결법
-
1.기존 코드를 조금 재검토하고 "마케팅 Optin"사용자 정의 필드에 대한 드롭 다운 필터를 추가했습니다.
기존 코드를 조금 재검토하고 "마케팅 Optin"사용자 정의 필드에 대한 드롭 다운 필터를 추가했습니다.
//1. ADD OPT IN OPTION IN CHECKOUT AND SAVE IN THE ORDER // Add checkbox optin before T&Cs add_action( 'woocommerce_checkout_before_terms_and_conditions', 'marketing_opting_field' ); function marketing_opting_field() { echo '<div id="marketing_opting_field">'; woocommerce_form_field( 'marketing_opting', array( 'type' => 'checkbox', 'class' => array('input-checkbox'), 'label' => __('Yes, sign me up'), 'default' => 1, ), WC()->checkout->get_value( 'marketing_opting' ) ); echo '</div>'; } // Save the optin field as custom order meta, when checkbox has been checked add_action( 'woocommerce_checkout_create_order', 'action_checkout_update_order_meta', 10, 2 ); function action_checkout_update_order_meta( $order, $data ) { if( isset($_POST['marketing_opting']) ) $order->update_meta_data( '_marketing_opting', empty($_POST['marketing_opting']) ? 'no' : 'yes' ); } // Save the optin field as custom user meta, when checkbox has been checked add_action( 'woocommerce_checkout_update_customer', 'action_checkout_update_customer_meta', 10, 2 ); function action_checkout_update_customer_meta( $customer, $data ) { if( isset($_POST['marketing_opting']) ) $customer->update_meta_data( 'marketing_opting', empty($_POST['marketing_opting']) ? 'no' : 'yes' ); } // Display the result of the checked optin in the order under billing address add_action( 'woocommerce_admin_order_data_after_billing_address', 'display_custom_field_on_order_edit_pages', 10, 1 ); function display_custom_field_on_order_edit_pages( $order ){ if( $order->get_meta( '_marketing_opting' ) === 'yes' ) echo '<p><strong>Has opted in for marketing purposes.</p>'; } // 2. SHOW CUSTOM COLUMN FOR THE OPTIN OPTION // Adding custom column title add_filter( 'manage_edit-shop_order_columns', 'custom_shop_order_column', 12, 1 ); function custom_shop_order_column($columns) { $action_column = $columns['order_actions']; unset($columns['order_actions']); //add the new column "Opt in" $columns['order_marketing'] = '<div align="center">' .__("Opted in?") . '</div>'; // title $columns['order_actions'] = $action_column; return $columns; } // Add the data for each order add_action( 'manage_shop_order_posts_custom_column' , 'custom_order_list_column_content', 10, 2 ); function custom_order_list_column_content( $column, $post_id ){ global $post, $the_order; if ($column ==='order_marketing') { $value = $the_order->get_meta( '_marketing_opting' ); $label = $value === 'yes' ? __('Signed Up') : ucfirst($value); $color = $value === 'yes' ? 'color:#00cc00;' : 'color:#bbbbbb;'; echo '<p align="center" style="'.$color.'"><span class="dashicons dashicons-'.$value.'"></span><span style="font-weight:600;">'.$label.'</span></p>'; } } // 3. Make marketing optin meta searchable from search field (can't work very well for 'yes' or 'no' values!) // Make a custom meta field searchable from the admin order list search field add_filter( 'woocommerce_shop_order_search_fields', 'marketing_search_fields', 10, 1 ); function marketing_search_fields( $meta_keys ){ $meta_keys[] = '_marketing_opting'; return $meta_keys; } // 4. Add a dropdown filter to get orders by marketing optin meta value // Add a dropdown to filter orders by Marketing optin add_action( 'restrict_manage_posts', 'display_admin_shop_order_marketing_opting_filter' ); function display_admin_shop_order_marketing_opting_filter(){ global $pagenow, $post_type; if( 'shop_order' === $post_type && 'edit.php' === $pagenow ) { $domain = 'woocommerce'; $current = isset($_GET['filter_shop_order_marketing'])? $_GET['filter_shop_order_marketing'] : ''; echo '<select name="filter_shop_order_marketing"> <option value="">' . __('Filter Marketing optin', $domain) . '</option>'; $options = ['yes' => __('Signed Up'), 'no' => __('No')]; foreach ( $options as $key => $label ) { printf( '<option value="%s"%s>%s</option>', $key, $key === $current ? '" selected="selected"' : '', $label ); } echo '</select>'; } } // Process the filter dropdown for orders by Marketing optin add_filter( 'request', 'process_admin_shop_order_marketing_opting_filter', 99 ); function process_admin_shop_order_marketing_opting_filter( $vars ) { global $pagenow, $typenow; if ( $pagenow == 'edit.php' && isset( $_GET['filter_shop_order_marketing'] ) && $_GET['filter_shop_order_marketing'] != '' && 'shop_order' === $typenow ) { $vars['meta_key'] = '_marketing_opting'; $vars['meta_value'] = wc_clean( $_GET['filter_shop_order_marketing'] ); } return $vars; }
참고 : 나는 Meta_Key를 다른 기존 metakeys로 밑줄로 시작하는 meta_key를 _marketing_opting으로 변경했습니다 ...
또한 주문을 한 고객을 위해 WC () -> 체크 아웃 -> GET_VALUE ( 'marketing_opting')의 체크 아웃에서 사용자 메타 데이터에 "마케팅 Optin"값을 등록하는 함수를 추가했습니다.
코드는 Active Child Theme (또는 활성 테마)의 functions.php 파일입니다. 테스트하고 작동합니다.
from https://stackoverflow.com/questions/61684222/add-a-dropdown-filter-for-a-custom-metakey-on-woocommerce-admin-orders by cc-by-sa and MIT license
'WORDPRESS' 카테고리의 다른 글
[WORDPRESS] htaccess를 수정하여 봇을 차단합니다 (0) | 2020.11.22 |
---|---|
[WORDPRESS] 어떻게 벽돌을 만들고 이미지로 인한 이미지를 올바르게 만들 수 있습니까? (워드 프레스) (0) | 2020.11.22 |
[WORDPRESS] CakePHP에서 WordPress 리디렉션 문제를 해결하는 방법은 무엇입니까? (0) | 2020.11.22 |
[WORDPRESS] WooCommerce 사이트에 로그인하고 등록하십시오 (0) | 2020.11.22 |
[WORDPRESS] WooCommerce : 일부 범주 가격을 체중으로 변경 (0) | 2020.11.22 |