如何将产品类别名称从 wordpress URL 传递到我的短代码?

How do I pass the product category name from the wordpress URL to my shortcode?

我正在尝试根据 URL 中的产品类别名称填充产品下拉列表。

我可以通过在我的函数中输入名称来静态地做到这一点,但我很想以编程方式做到这一点,这样我就可以根据用户所在的产品类别页面填充下拉列表。

我的代码

function dropdownproducts()
{

  $term_names = array('fruits');
  $query = new WP_Query(array(
    'posts_per_page' => -1,
    'post_type' => 'product',
    'post_status' => 'publish',
    'hide_empty' => 0,
    'orderby' => 'title',
    'tax_query' => array(array(
      'taxonomy' => 'product_cat',
      'field'    => 'name',
      'terms'    => $term_names,
    )),
    'echo' => '0'
  ));

  $output = '<select  onChange="window.location.href=this.value">';
  // foreach ( $products as $product ) {
  if ($query->have_posts()) :
    while ($query->have_posts()) : $query->the_post();

      $permalink = get_permalink($query->post->ID);
      $title = $query->post->post_title;
      $output .= '<option value="' . $permalink . '">' . $title . '</option>';

    endwhile;

    wp_reset_postdata();

    $output .= '</select>';

  else :

    $output = '<p>No products found<p>';

  endif;

  return $output;
}

add_shortcode('products_dropdown', 'dropdownproducts');

根据代码,如果我在术语名称中输入产品类别名称,我将获得该类别下的产品。我很乐意根据 URL 末尾的内容动态地执行此操作,例如,如果 URL 是 /product-category/food/ 我想在下拉列表中获取食物下的所有产品。

您可以使用 get_queried_object。检查下面的代码。

$term = get_queried_object();

if( !empty( $term ) ){
    $term_names = array( $term->name );
}else{
    $term_names = array( 'fruits' );
}

$query = new WP_Query( array(
    'posts_per_page' => -1,
    'post_type' => 'product',
    'post_status' => 'publish',
    'hide_empty' => 0,
    'orderby' => 'title',
    'tax_query' => array( array(
        'taxonomy' => 'product_cat', 
        'field'    => 'name',        
        'terms'    => $term_names,
    ) ),
    'echo' => '0'
) );