【问题标题】:URL Query StringURL 查询字符串
【发布时间】:2018-09-03 15:17:31
【问题描述】:

我下载了 BeRocket AJAX 过滤器插件,它改变了我的 url 查询字符串的格式,现在我获取产品图像的功能将无法正常工作。

这就是我获取查询字符串的方式;

<php $filter_colour = $_GET['filter_colour']; ?>

当我的查询字符串是这样的时候,这很好用;

www.website.co.uk/?filter_color=blue&filter_type_of_light=something

但现在我只能通过更改插件中的设置来获得如下查询字符串;

www.website.co.uk/?filters=type-of-light[550]|colour[569]
www.website.co.uk/?filters=type-of-light[ceiling-lights]|colour[pink]
www.website.co.uk/filters/type-of-light=ceiling-lights&colour=green

我如何仍然使用 $_GET 来获取这些链接的 url 中的颜色值?

wordpress 的永久链接选项卡中也有这些设置,我可以使用它们来更改查询字符串;

这些是我在插件中用于查询字符串的选项;

这是我使用$_GET获取颜色值的函数,我使用这个函数来设置产品上的图像;

remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10);
add_action( 'woocommerce_before_shop_loop_item_title', 'set_product_image', 10);

function set_product_image() {
    global $product;

    if( $product->is_type('variable') ){
        // color of first variation
        $default_image = '';

        foreach ( $product->get_visible_children() as $variation_id ){            
            $variation = wc_get_product( $variation_id );
            $product_colour = strtolower( $variation->get_attribute('colour') );

            // get first variation
            if( $default_image == '' ){
                $default_image = $variation->get_image( array(300, 300) );
            }
            $filter_colour = $_GET['colour'];

            if( $product_colour == $filter_colour){
                // if filter applied, echo and return
                echo $variation->get_image( array(300, 300) );
                return;
            }
        }
        // filter not applied, return default image
        echo $default_image ;
    }

    else if( $product->is_type('simple') ){
        if ( has_post_thumbnail() ) {
            echo $product->get_image( array(300, 300) );
        }else{
            echo '<img src="https://website.co.uk/wp-content/themes/dist/images/placeholder.png">';
        }
    }
}

【问题讨论】:

  • 您只想单独获得colour 部分吗?
  • 是的,我只想要颜色的值
  • @user3783243 我能够稍微修改你的代码来做我需要的事情。如果您将其添加为答案,我可以接受。谢谢
  • @Reece 我已将其移至答案。

标签: php wordpress get


【解决方案1】:

对于两个示例字符串,您可以使用正则表达式来识别您想要的位。对于第三个示例,colour 应该是它自己的索引,所以按原样抓取它。对于其他两个搜索colour[,然后捕获所有内容,直到第一个]。这会将值放入$color 作为1 索引。它是1 索引,因为它是第一个捕获组,0 索引具有完全匹配。此外,如果ucolour 中是可选的,您可以在其后添加?

if(empty($_GET['colour'])){
    if(preg_match('/colour\[(.*?)\]/', $_GET['filters'], $color)){
            echo $color[1] . PHP_EOL;
    }
} else {
     echo $_GET['colour'];//just for demo purposes, will open XSS injection, escape for real usage
}

PHP 实战:https://3v4l.org/SbAvR

【讨论】:

    【解决方案2】:

    坚持这个 URL 结构 - http://www.website.co.uk/?filters=type-of-light[ceiling-lights]|colour[pink]。您可以按照@user3783243 的建议使用正则表达式,也可以使用 PHP explode。这是最简单但不正确的方法之一。

    $colortemp = explode('colour[', $_GET['filters']);
    $colortemp1 = explode(']', $colortemp[1]);
    $color = $colortemp[0];
    

    然后你可以在你的函数中替换$filter_colour = $color;

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-05-30
      • 2012-03-27
      • 1970-01-01
      • 2011-07-01
      • 2013-11-21
      • 2011-08-02
      • 2013-08-18
      • 2012-01-18
      • 1970-01-01
      相关资源
      最近更新 更多