问题描述
我有一个 woocommerce 网站,我目前正在向该网站添加功能,我的产品有到期日期,并且希望在特定页面上显示所有到期日期为今天的产品。除此之外,我还希望将所有到期日为明天的产品显示在另一个页面上。
我在网上找到了以下文档:Adding Custom Parameter Support
我已通过代码段插件将此添加到我的网站,并针对我的到期日期属性进行了修改
/** * Handle a custom 'expirydate' query var to get products with the 'expirydate' Meta.
* @param array $query - Args for WP_Query.
* @param array $query_vars - Query vars from WC_Product_Query.
* @return array modified $query
*/
function handle_custom_query_var( $query,$query_vars ) {
if ( ! empty( $query_vars['expirydate'] ) ) {
$query['Meta_query'][] = array(
'key' => 'expirydate','value' => esc_attr( $query_vars['expirydate'] ),);
}
return $query;
}
add_filter( 'woocommerce_product_data_store_cpt_get_products_query','handle_custom_query_var',10,2 );
然后我添加了另一个代码段,用于创建调用具有今天到期日期的产品的功能,为此我添加了一个短代码,以便在我希望它的页面上轻松地在我的网站上调用它显示。
// display products with expiry date today
function expiry_Date_Today()
{
$todaysdate = date(d/m/Y);
$products = wc_get_products( array( 'expirydate' => 'todaysdate' ) );
}
add_shortcode( 'expirydatetoday','expiry_Date_Today');
现在我的问题是,当我在页面上使用短代码时,我什么也得不到。只是一个空白的空白空间。我认为这是因为我需要以显示产品的格式请求输出。我希望它显示为图像、标题和添加到购物车按钮,类似于您在查看类别页面的内容时通常会看到的内容。
我在网上搜索过,但找不到此信息,所以有人可以在这里指出我正确的方向,或者如果我的代码似乎有明显错误,您能提供帮助吗?
非常感谢, TMS。
解决方法
更新
您的代码中有多个错误,您的过期日期应始终设置为 'Y-m-d'
兼容的日期格式,以便在需要时能够比较日期。
尝试以下操作,将从今天起获取过期产品列表:
add_filter( 'woocommerce_product_data_store_cpt_get_products_query','handle_custom_query_var',10,2 );
function handle_custom_query_var( $query,$query_vars ) {
if ( ! empty( $query_vars['expirydate'] ) ) {
$query['meta_query'][] = array(
'key' => 'expirydate','value' => esc_attr( $query_vars['expirydate'] ),'compare' => '=','type' => 'DATE'
);
}
return $query;
}
function get_products_expired_today($atts ) {
// Extract shortcode attributes
extract( shortcode_atts( array(
'date' => date('Y-m-d'),// default date is current date in 'd/m/Y' format
),$atts,'expirydatetoday' ) );
$products = wc_get_products( array(
'status' => 'publish','limit' => -1,'expirydate' => $date,) );
$html = '<ul class="expired-products">';
// Products loop
foreach( $products as $product ) {
$html .= '<li><a href="' . $product->get_permalink() . '">' . $product->get_name() . '</a></li>';
}
return $html . '</ul>';
}
add_shortcode( 'expirydatetoday','get_products_expired_today');
代码位于活动子主题(或活动主题)的functions.php 文件中。经测试有效。
现在,如果您想获取所有过期产品而不是“今天”产品,您首先需要将所有产品的 expirydate
自定义字段值上的日期格式更改为“YYYY`MM-DD” .
你必须改变:
'compare' => '=',
到:
'compare' => '<=',
它也有效。