Как в Wordpress Woocommerce добавить и настроить свою сотртировку товара
Стоит задача в Woocommerce настройках товара добавить чекбокс - "Charity" и добавить в сортировку товара, на странице магазина, фильтр "Charity" и если в настройках товаров отмечена галочка на "Charity" то можно было фильтром найти этот товар. Чекбокс я добавил, Надпись в сортировку я добавил, но всязать это вместе не получается. Мой код:
//Добавляю чекбокс в настройки товара Woocommerce
add_action( 'woocommerce_product_options_general_product_data', 'art_woo_add_custom_fields' );
function art_woo_add_custom_fields() {
global $product, $post;
echo '<div class="options_group">';// Группировка полей
// Чекбокс
woocommerce_wp_checkbox(
array(
'id' => '_charity',
'wrapper_class' => 'show_if_simple',
'label' => 'Charity',
'description' => 'Yes'
)
);
echo '</div>';
}
//Сохраняю выбор нажатия чекбокса
add_action( 'woocommerce_process_product_meta', 'art_woo_custom_fields_save', 10 );
function art_woo_custom_fields_save( $post_id ) {
// Сохранение чекбоксов
$woocommerce_checkbox = isset( $_POST['_charity'] ) ? 'yes' : 'no';
update_post_meta( $post_id, '_charity', $woocommerce_checkbox );
}
// Добавляю возможность выбора сортировки в настройках каталога woocommerce
add_filter( 'woocommerce_default_catalog_orderby_options', 'custom_woocommerce_catalog_orderby' );
// Вывожу сортировку на страницах магазина
add_filter( 'woocommerce_catalog_orderby', 'custom_woocommerce_catalog_orderby' );
function custom_woocommerce_catalog_orderby( $sortby ) {
$sortby['charity'] = __( 'Charity', 'woocommerce' );
return $sortby;
}
// Пытаюсь сортировать товар по галочке "Charity", но ничего не получаетя
add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_woocommerce_get_catalog_ordering_args' );
function custom_woocommerce_get_catalog_ordering_args( $args ) {
$orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) :
apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) );
if ( 'charity' == $orderby_value ) {
$args = [
'orderby' => 'meta_value_num',
'meta_key' => '_charity',
'order' => 'ASC',
];
}
return $args;
}