当前位置: 首页 > 知识库问答 >
问题:

如何基于属性编写条件PHP

萧永望
2023-03-14

我在互联网上到处搜索,寻找在特定页面上有条件地显示WooCommerce产品属性数据的方法

如果属性某物有一个值,并且它在/上?过滤=1

如果属性位于特定的筛选页面上,我希望以不同的方式显示它们

前任:http://www.colorselectcoil.com/color-match-tool/?filtering=1

基于这个过滤的页面,显示一个产品属性“某物酷”

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

如果它是一个普通的WordPress页面,而不是一个过滤页面,我可以根据body类标记隐藏和显示,但不幸的是,body类不会根据查询字符串URL进行更改。

共有2个答案

东方方伟
2023-03-14

史蒂夫把它连接起来,并帮助我弄清楚如何编写基于过滤器的条件,这解决了我的问题。谢谢史蒂夫!

<?php if( intval($_GET['filtering']) == 1 && intval($_GET['filter_manufacturer']) == 1648 && $collection == $product->get_attribute('Certainteed') ){ echo '<div class="attribute-titles">Certainteed name: '; echo ($collection == $product->get_attribute('Certainteed') ) ? $collection : __('', 'woocommerce'); echo '</div>'; } ?> 
壤驷乐邦
2023-03-14

您可以使用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!';
  }

查看echo是什么产品属性(“Everlast”) 根据您的示例返回。

$\u获取通过名称获取搜索字符串中的变量,名称放在方括号中。

      <?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!';  
             } ?>

一次只尝试一个项目,并积累起来掌握它的窍门。

关于在字符串中查找字符串的加载在PHP中如何检查字符串是否包含特定单词?

如果需要,获取和响应产品属性的其他方法是:WooCommerce获取自定义属性

我不确定这是否有效,但它可能具有足够的适应性。

您可以传递筛选器值$ff您想要的筛选器整数值$ffv(可能不同于1)$fm$filter\u制造商整数值$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()” -我也找不到,但相信它是一个事件列表脚本-您可以使用类似这样的方法设置一个隐藏变量,该变量获取下拉文本值,并将其用于函数调用中当前必须手动输入文本的插槽,如示例中的“确定需要”:

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

这将获得从选择下拉列表中选择的文本——这需要ID“制造商名称”,并将该文本值插入隐藏输入的值中,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($\u GET['manufacturerDropdown'])

 类似资料:
  • 如何创建支持多种环境的项目架构?在Spring的帮助下,每个环境将具有来自不同属性文件(dev-propertfile,test-propertfil,propertyfile)的不同数据源

  • 问题内容: 如何创建项目架构以支持多个环境。借助于spring的帮助,每个环境都将具有来自不同属性文件(例如,(dev-propertfile,test- propertyFil,Production-propertyfile))的不同数据源。 问题答案: 我将逐步介绍Spring引导应用程序的过程。 在 /src/main/resources/application.properties 内部,

  • 问题内容: 我的代码中具有对象属性,如下所示: 问题是我有100多个字段名称,需要动态写入属性名称。否则,对象名称和属性的键将始终相同。所以我尝试了: 希望可以动态更改属性名称并访问正确的值。但是,我一直在stdClass :: $ field中得到’undefined property $ field;。 我或多或少尝试在执行之前动态编写php,以便它可以输出适当的值。关于如何处理此问题的想法?

  • 是一个代表SQL语句中的条件语句的接口。这是一个接口,这样其他类型的条件可以使用,并且允许最大的灵活性,以满足您的需求。 例如,写在原始的SQLite: 建议我们的查询从Model的属性中创造条件。 @Table(database = TestDatabase.class) public class TestModel3 { @PrimaryKey String name;

  • 假设我们有一个简单的Spring条件,它必须与属性文件中的文件属性相匹配: 不幸的是,上面提到的方法调用都没有返回在属性文件中定义的真实属性。相反,当我为另外两个调用getProperty方法和“${my.property}”字符串时,我得到了null(显然,该属性尚未解析)。