【问题标题】:Separating a string that is duplicated using PHP分离使用 PHP 重复的字符串
【发布时间】:2015-11-11 21:24:36
【问题描述】:

变量 $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" />

【问题讨论】:

  • 你在哪里有 $category 包含两次内容?根据 print_r 你只有“夏天”或“全季”,但你的函数被调用了两次。否则 print_r 会给你 Array ([0] => all-seasonall-season) 或 Array[0] => all-season, [1] => all-season)
  • 这就是我无法理解的。 $category 的 var_dump 给了我 string(10) "all-season" string(10) "all-season"

标签: php arrays wordpress woocommerce explode


【解决方案1】:

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

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

改变这个:

if($query->is_search()) {

收件人:

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

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

【讨论】:

  • 你是 Nathan
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 2012-03-28
  • 2015-10-24
  • 1970-01-01
相关资源
最近更新 更多