如何基于WooCommerce属性编写条件PHP

我已经在上下两层网络之间进行搜索,以寻找一种在某些页面上有条件地显示WooCommerce产品属性数据的方法.

例如:如果属性somethingcool具有值并且在/?filtering = 1& filter_manufacturer = 1648页面上,则显示值

如果属性位于特定的已过滤页面上,我希望以不同的方式显示属性

例如:
http://www.colorselectcoil.com/color-match-tool/?filtering=1&filter_manufacturer=1648

根据此过滤的页面,显示产品属性“ somethingcool”

<?php if ( is_product_attribute('somethingcool') ) {
    echo 'Hi! This is something cool?';}
    else {
    echo '';
  }
?>

如果它是普通的WordPress页面,则不是基于主体类标签可以隐藏和显示的筛选页面,但是不幸的是,主体类不会根据查询字符串url进行更改.

解决方法:

您可以使用url搜索字符串并从中提取所需的任何部分.例如,如果您只想知道自己是否在经过筛选的页面上,则不必费心检查制造商.

   <?php if ( $product->get_attribute('Certainteed') && intval($_GET['filtered']) == 1 && intval($_GET['filter_manufacturer']) == 1648 ) {
         echo 'Hi! This is something cool?';
         }
   ?>

intval()位应足以阻止注入.

如果您想查找uri的一部分,则可以使用以下方法:

  if( stristr( htmlspecialchars($_SERVER['REQUEST_URI']), 'color-match-tool') && is_product_attribute('somethingcool') ){
  echo 'Hi! This is something cool!';
  }

检查一下回声is_product_attribute(‘Everlast’);根据您的示例返回.

$_GET …通过其名称获取搜索字符串中的变量,该变量放在方括号中.

      <?php if( stristr( htmlspecialchars($_SERVER['REQUEST_URI']), 'color-match-tool') && intval($_GET['filtering']) == 1 && intval($_GET['filter_manufacturer']) == 1694 && is_product_attribute('Everlast') ){
             echo 'Hi! This is something cool!';  
             } ?>

一次只尝试一项,然后逐渐积累起来.

加载有关在字符串How do I check if a string contains a specific word in PHP?中查找字符串的信息

需要时获取和回显产品属性的其他方法是:
Woocommerce getting custom attributes

我不确定这是否行得通,但可能适应性强.

您可以将所需的过滤器值$ff传递给过滤器整数$ff $ffv(可能不同于1)$fm是$filter_manufacturer整数值$fmv-是您要寻找的值-如示例1648所示那么产品数组$product,$collection变量和$aiw是文本形式的“我想要的属性”,但您也可以将其传递给变量.

将此功能放在您的functions.php中

 function attribute_i_want( $ff,$ffv, $fm, $fmv, $prod, $coll, $aiw){

      if( $ff == 1 && $fm == $fmv && $collection = $prod->get_attribute($aiw) ){
           echo '<div class="attribute-titles">. $aiw . ' name: ';
           echo ($coll = $prod->get_attribute($aiw) ) ? $collection : __('', 'woocommerce'); echo '</div>';
      }
 }
 add_action( 'wp_enqueue_scripts', 'attribute_i_want' );

并把它传递给它一点点

 <?php attribute_i_want( intval($_GET['filtering']), 1, intval($_GET['filter_manufacturer']), 1648, $product, $coll, 'Certainteed'); ?>

我假设您发布的代码按原样运行.

查看您的页面,我看不到它如何从下拉列表中获取值,因为它没有名称或ID-理想的情况是在onchange事件中onchange =“ setManufacturer()”; -我也找不到但相信它是一个事件列表脚本-您将使用类似的方法来设置一个隐藏变量,该变量获取下拉文本值,并将其用于函数调用中当前所在的位置手动输入文本,例如示例中的“ Certainteed”:

    <script language=JavaScript>
    function setManufacturer(){
    var manufacturerName = manufacturerDropdown.options[manufacturerName.selectedIndex].innerHTML;
    documentGetElementById('submittedManufacturerName').value = manufacturerName; 
    }
    </script>

这将获得从选择下拉列表中选择的内容的文本-这将需要ID“ manufacturerName”,并将该文本值插入到隐藏输入的值中,PHP可以在PHP函数调用中使用该文本值并使用该值.

onchange事件将触发JavaScript并提交页面,php将从隐藏的输入中获取文本值,并将其放入函数调用中:

  <input type="hidden" id ="submittedManufacturerName" name="submittedManufacturerName" value = "" />
 <?php attribute_i_want( intval($_GET['filtering']), 1, intval($_GET['filter_manufacturer']), $manufacturerName, $product, $coll, $submittedManufacturerName); ?>

除非有其他方法可以获取PHP变量中制造商名称的值,否则可能会这样做,因为制造商名称确实出现在下拉菜单上方链接中页面的其他位置,因此它可能已经作为PHP存在.您可以原样使用的变量.这样,您的功能将是全自动的,而无需此其他JavaScript.该值将显示在现有页面上名为“删除过滤器”的href中.

$manufacturerName将是从下拉列表的实际值中收集的提交值,该实际值是$manufacturerName = htmlspecialchars($_ GET [‘manufacturerDropdown’]);

上一篇:php-我的主题Woocommerce在不同页面上的登录重定向


下一篇:php-在处理订单电子邮件模板中基于产品类别的条件显示