gpt4 book ai didi

php - 你如何根据 WooCommerce 属性编写条件 PHP

转载 作者:可可西里 更新时间:2023-11-01 00:58:12 28 4
gpt4 key购买 nike

我在网上到处搜索,寻找一种在特定页面上有条件地显示 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 页面,而不是过滤页面,我可以根据 body 类标签隐藏和显示,但不幸的是,body 类不会根据查询字符串 url 更改。

最佳答案

您可以使用 url 搜索字符串并从中提取您想要的任何部分。例如,如果您只想知道您是否在过滤页面上,那么您就不会费心去检查制造商。

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

intval() 位应该足以防止注入(inject)。

如果你想找到 uri 的一部分,你可以使用类似的东西:

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

检查根据您的示例返回的 echo 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 你想要的过滤器整数值 $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。该值显示在您现有页面上名为“Remove filter”的 a href 中。

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

关于php - 你如何根据 WooCommerce 属性编写条件 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35232495/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com