代码之家  ›  专栏  ›  技术社区  ›  Reece

URL查询字符串

  •  1
  • Reece  · 技术社区  · 8 年前

    我下载了Berocket Ajax过滤器插件,它改变了我的URL查询字符串的格式,现在我的获取产品图片的功能将不起作用。

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

    <php$filter_colour=$_get['filter_colour'];?gt;
    < /代码> 
    
    

    当我的查询字符串是这样的时候,这就很好地工作了;

    www.website.co.uk/?filter_color=blue&filter_type_of_light=something
    < /代码> 
    
    

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

    www.website.co.uk/?滤光器=灯的类型[550]颜色[569]
    www.website.co.uk/?过滤器=灯的类型[天花板灯]颜色[粉色]
    www.website.co.uk/filters/type of light=天花板灯&colour=绿色
    < /代码> 
    
    

    我怎样才能用这些链接在url中获取颜色的值呢?

    在WordPress的PermaLinks选项卡中也有这些设置,我可以使用它们来更改查询字符串;。

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

    下面是我使用的函数$\u get获取颜色值,我使用此函数设置产品上的图像;。

    remove_action('woocommerce_before_shop_loop_item_title'、'woocommerce_template_loop_product_thumbnail',10);
    添加“动作”(“WooCommerce”在“购物”前,“循环”项目标题,“设置产品图像”,10);
    
    函数集_product_image()。{
    全球美元产品;
    
    如果($product->是_type(“variable”)){
    //第一个变量的颜色
    $default_image='';
    
    foreach($product->获取\u visible_children()作为$variation_id){
    $variation=wc_get_product($variation_id);
    $product_colour=strtolower($variation->get_attribute('colour'));
    
    //获取第一个变量
    如果($default_image=''){
    $default_image=$variation->获取_image(数组(300,300));
    }
    $filter_colour=$获取[颜色];
    
    如果($product_colour=$filter_colour){
    //如果应用了筛选器,则返回echo并返回
    echo$variation->获取图像(数组(300,300));
    返回;
    }
    }
    //未应用筛选器,返回默认图像
    echo$默认图像;
    }
    
    否则,如果($product->是_类型(“简单”)){
    if(has_post_thumbnail()){
    echo$product->获取图像(数组(300,300));
    }否则{
    echo'<img src=“https://website.co.uk/wp content/themes/dist/images/placeholder.png”>';
    }
    }
    }
    < /代码> <不起作用。

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

    <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
    

    我怎样才能用这些链接在url中获取颜色的值呢?

    在WordPress的PermaLinks选项卡中也有这些设置,我可以使用它们来更改查询字符串;

    enter image description here

    enter image description here

    enter image description here

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

    enter image description here

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

    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">';
            }
        }
    }
    
    2 回复  |  直到 8 年前
        1
  •  1
  •   user3783243    8 年前

    对于两个示例字符串,可以使用regex来标识所需的位。对于第三个例子 colour 应该是它自己的索引,所以按原样抓取它。其他两个搜索 colour[ 然后捕捉到第一个 ] . 这将使值 $color 作为 1 索引。它是 一 索引,因为它是第一个捕获组, 0 索引完全匹配。也如果 u 是可选的 颜色 您可以添加 ? 之后。

    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
  •  1
  •   Outsource WordPress    8 年前

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

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

    然后你可以像 $filter_colour = $color; .

    希望这有帮助。