我下载了BeRocket AJAX Filter插件,它改变了我的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通过这些链接获取网址中的颜色值?
在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
应该是它自己的索引,所以只需抓住它。对于另外两个搜索colour[
然后捕获一切直到第一个]
。这将把价值作为$color
指数加入1
。它是1
指数,因为它是第一个捕获组,0
指数具有完全匹配。此外,如果u
在colour
中是可选的,你可以在它之后添加一个?
。
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
坚持这个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;
一样替换你的函数。
希望这可以帮助。