Свой фильтр товаров в админку
как добавить свой фильтр по произвольной таксономии в админку на страницу с товарами Woocommerce ( /wp-admin/edit.php?post_type=product ) ?
Ответы:
Для добавления своего фильтра по произвольной таксономии на страницу с товарами в админке Woocommerce, вам понадобится использовать хуки и фильтры WordPress.
Прежде всего, вам потребуется зарегистрировать свою произвольную таксономию. Для этого вы можете использовать функцию `register_taxonomy()`. Ниже приведен пример кода, которым можно зарегистрировать таксономию "Моя таксономия":
function custom_taxonomy() {
$args = array(
'label' => 'Моя таксономия',
'public' => true,
'hierarchical' => true,
);
register_taxonomy( 'custom_taxonomy', 'product', $args );
}
add_action( 'init', 'custom_taxonomy' );
По умолчанию, таксономия будет применяться к типу записи "product", который используется Woocommerce для товаров. Вы можете изменить это значение на свой тип записи, если требуется.
Затем вам нужно добавить ваш фильтр на страницу со списком товаров. Для этого можно использовать хук `restrict_manage_posts`. Ниже приведен пример кода:
function custom_taxonomy_filter() {
global $typenow;
if ( $typenow == 'product' ) {
$taxonomy = 'custom_taxonomy';
$current_taxonomy = isset( $_GET['taxonomy'] ) ? $_GET['taxonomy'] : '';
$object = get_taxonomy( $taxonomy );
$terms = get_terms( $taxonomy, array( 'hide_empty' => false ) );
if ( $terms ) {
echo '';
echo '' . sprintf( __( 'Все %s', 'textdomain' ), $object->label ) . '';
foreach ( $terms as $term ) {
echo 'slug . '" ' . selected( $current_taxonomy, $term->slug, false ) . '>' . $term->name . '';
}
echo '';
}
}
}
add_action( 'restrict_manage_posts', 'custom_taxonomy_filter' );
В этом примере мы проверяем, что текущий тип записи - "product", а затем выводим выпадающий список, содержащий термины вашей произвольной таксономии. Пользователь может выбрать нужный термин, и это будет отфильтровывать товары по этой таксономии.
Важно отметить, что вам также потребуется обработать выбранный фильтр при выполнении запроса. Вы можете использовать хук `pre_get_posts` для изменения параметров запроса. Ниже приведен пример кода:
function custom_taxonomy_filter_query( $query ) {
$taxonomy = 'custom_taxonomy';
$value = isset( $_GET[ $taxonomy ] ) ? $_GET[ $taxonomy ] : '';
if ( ! empty( $value ) ) {
$query->set( 'tax_query', array(
array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $value,
)
) );
}
}
add_action( 'pre_get_posts', 'custom_taxonomy_filter_query' );
В этом примере мы проверяем, если выбрана таксономия "custom_taxonomy", то мы добавляем соответствующую настройку `tax_query` в параметры запроса.
Надеюсь, эти примеры помогут вам добавить свой фильтр по произвольной таксономии на страницу с товарами Woocommerce в админке.
Исходный код:
function custom_taxonomy() {
$args = array(
'label' => 'Моя таксономия',
'public' => true,
'hierarchical' => true,
);
register_taxonomy( 'custom_taxonomy', 'product', $args );
}
add_action( 'init', 'custom_taxonomy' );
function custom_taxonomy_filter() {
global $typenow;
if ( $typenow == 'product' ) {
$taxonomy = 'custom_taxonomy';
$current_taxonomy = isset( $_GET['taxonomy'] ) ? $_GET['taxonomy'] : '';
$object = get_taxonomy( $taxonomy );
$terms = get_terms( $taxonomy, array( 'hide_empty' => false ) );
if ( $terms ) {
echo '';
echo '' . sprintf( __( 'Все %s', 'textdomain' ), $object->label ) . '';
foreach ( $terms as $term ) {
echo 'slug . '" ' . selected( $current_taxonomy, $term->slug, false ) . '>' . $term->name . '';
}
echo '';
}
}
}
add_action( 'restrict_manage_posts', 'custom_taxonomy_filter' );
function custom_taxonomy_filter_query( $query ) {
$taxonomy = 'custom_taxonomy';
$value = isset( $_GET[ $taxonomy ] ) ? $_GET[ $taxonomy ] : '';
if ( ! empty( $value ) ) {
$query->set( 'tax_query', array(
array(
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => $value,
)
) );
}
}
add_action( 'pre_get_posts', 'custom_taxonomy_filter_query' );