使用 PHP 分隔重复的字符串

Separating a string that is duplicated using PHP

变量 $category 被接收为 "summersummer" 或 "all-seasonall-season"。

有什么办法可以拆分吗?我想把它作为一个术语来传递。

这是我的代码。

function advanced_search_query($query) {

if($query->is_search()) {
    // category terms search.
    $category = $_GET['category'];
    $string_array = explode(" ",$category);
    print_r($string_array);
    $taxonomy = 'product_cat';
    if (isset($category) && !empty($category)) {
        $args = array(
            array(
            'taxonomy' => $taxonomy,
            'field' => 'slug',
            'terms' => $category
            )
        );
        $query->set('tax_query', $args);
    }
    return $query;
} } add_action('pre_get_posts', 'advanced_search_query', 1000);

print_r 给我 Array ( [0] => all-season ) Array ( [0] => all-season )

编辑 1(发送 $category 值的代码):

<form role="search" method="get" class="woocommerce-product-search" action="<?php print_r( $query ); ?><?php echo esc_url( home_url( '/'  ) ); ?>">
<label class="screen-reader-text" for="s"><?php _e( 'Search for:', 'woocommerce' ); ?></label>
<input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search Products&hellip;', 'placeholder', 'woocommerce' ); ?>" value="<?php echo get_search_query(); ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label', 'woocommerce' ); ?>" />
<select name="category">
    <option value="winter">Winter</option>
    <option value="all-season">All Season</option>
    <option value="run-flat">Run Flats</option>
    <option value="summer">Summer</option>
</select>
<input type="submit" value="<?php echo esc_attr_x( 'Search', 'submit button', 'woocommerce' ); ?>" />
<input type="hidden" name="post_type" value="product" />

您遇到的问题是您编写的代码多次 运行 而不是复制字符串的变量。

在修改查询/输出字符串进行测试之前,您需要在 pre_get_posts 回调中进行更多检查。

改变这个:

if($query->is_search()) {

收件人:

if ( ! is_admin() && $query->is_main_query() && $query->is_search() ) {

我还建议将其分成两个条件,但我不想让事情过于复杂。我们首先检查我们不在管理员中。这与您的问题无关,但在使用 pre_get_posts 时是一项重要的检查。然后我们检查我们是否正在对页面上的主查询进行操作。 pre_get_posts 将在页面加载时触发多次,因此我们必须确保我们只修改主帖子循环。