php WooCommerce:将自定义筛选器添加到“产品管理”区域

jv4diomz  于 2022-12-10  发布在  PHP
关注(0)|答案(1)|浏览(122)

我最近使用以下过滤器和操作组合添加了一个列到WooCommerce管理中的产品管理部分:一个月一个月一个月一个月
我的问题是,有没有一个钩子,将允许我没有添加一个过滤器,为这个列?我找不到一个,但我相信这是可能的?
谢谢

jw5wzhpr

jw5wzhpr1#

您的问题非常模糊,因此我假设您的自定义列显示每个产品的 meta信息。

添加筛选器

首先,您需要使用restrict_manage_posts WordPress操作将您自己的字段添加到“产品”管理页面顶部的“过滤器”区域:

function my_custom_product_filters( $post_type ) {

$value1 = '';
$value2 = '';

// Check if filter has been applied already so we can adjust the input element accordingly

if( isset( $_GET['my_filter'] ) ) {

  switch( $_GET['my_filter'] ) {

    // We will add the "selected" attribute to the appropriate <option> if the filter has already been applied
    case 'value1':
      $value1 = ' selected';
      break;

    case 'value2':
      $value2 = ' selected';
      break;

  }

}

// Check this is the products screen
if( $post_type == 'product' ) {

  // Add your filter input here. Make sure the input name matches the $_GET value you are checking above.
  echo '<select name="my_filter">';

    echo '<option value>Show all value types</option>';
    echo '<option value="value1"' . $value1 . '>First value</option>';
    echo '<option value="value2"' . $value2 . '>Second value</option>';

  echo '</select>';

}

}

add_action( 'restrict_manage_posts', 'my_custom_product_filters' );

**注意:**从WP4.4开始,此操作提供$post_type作为参数,因此您可以轻松识别正在查看的帖子类型。在WP4.4之前,您需要使用$typenow全局或get_current_screen()函数来检查此. This Gist offers a good example

应用过滤器

为了让过滤器真正起作用,我们需要在加载'products'管理页面时在WP_Query中添加一些额外的参数。为此,我们需要使用pre_get_posts WordPress操作,如下所示:

function apply_my_custom_product_filters( $query ) {

global $pagenow;

// Ensure it is an edit.php admin page, the filter exists and has a value, and that it's the products page
if ( $query->is_admin && $pagenow == 'edit.php' && isset( $_GET['my_filter'] ) && $_GET['my_filter'] != '' && $_GET['post_type'] == 'product' ) {

  // Create meta query array and add to WP_Query
  $meta_key_query = array(
    array(
      'key'     => '_my_meta_value',
      'value'   => esc_attr( $_GET['my_filter'] ),
    )
  );
  $query->set( 'meta_query', $meta_key_query );

}

}

add_action( 'pre_get_posts', 'apply_my_custom_product_filters' );

这是自定义过滤器的基础,它适用于任何帖子类型(包括WooCommerce shop_orders)。您还可以为 meta查询设置“比较”值(以及任何其他可用的选项),或者根据需要调整WP_Query的不同方面。

相关问题