所以我一直在寻找一种方法来整合它,而无需安装另外一个比我需要更多的插件。
让我们说我们的产品SKU的结构是提供供应商编号,然后是破折号( - ),然后是产品ID。所以我们的SKU看起来像这样469-852369(供应商产品)。供应商ID可以是1到5位数字,产品ID可以是1到10位数。我们希望能够搜索产品而无需添加短划线( - )。因此,对于469-852369,我希望能够输出469852369并显示该产品。
我知道有很多插件可以做到这一点,但我不想添加插件只是为了完成这个问题。有关如何通过PHP实现此目的的任何帮助和指导都会有所帮助。
答案 0 :(得分:5)
您可以将自定义查询设置为搜索结果。正常搜索" 469852369"你可以附加" - "经过3位数后,如#34; 469-852369"然后将其传递给WordPress查询以获得结果。
function get_product_by_sku( $sku ) {
global $wpdb;
$sku = implode("-", str_split($sku, 3));
$product_id = $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s' LIMIT 1", $sku ) );
if ( $product_id ) return new WC_Product( $product_id );
// YOUR CODE
return null;
}
希望这对你有所帮助。
感谢。
答案 1 :(得分:1)
我认为你可以用Ahmed Ginani的答案取代SQL查询,并得到你想要的东西:
SELECT post_id FROM $wpdb->postmeta WHERE (REPLACE(meta_value, '-', '')) = '%s' AND meta_key='_sku';
答案 2 :(得分:-2)
使用代码:
function get_product_by_sku( $sku ) {
global $wpdb;
$product_id = $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s' LIMIT 1", $sku ) );
if ( $product_id ) return new WC_Product( $product_id );
return null;
}