Php Woocommerce WC_product_查询中的日期产品自定义字段用法

Php Woocommerce WC_product_查询中的日期产品自定义字段用法,php,wordpress,woocommerce,product,custom-fields,Php,Wordpress,Woocommerce,Product,Custom Fields,我有一个woocommerce网站,我目前正在添加功能,我的产品有有效期,并希望在特定页面上显示所有有效期为今天的产品。除此之外,我还希望在另一页上显示所有有效期为明天的产品 我在网上找到了以下文档: 我已经通过snippets插件将其添加到我的站点,并为我的到期日属性对其进行了修改 /** * Handle a custom 'expirydate' query var to get products with the 'expirydate' meta. * @param array $q

我有一个woocommerce网站,我目前正在添加功能,我的产品有有效期,并希望在特定页面上显示所有有效期为今天的产品。除此之外,我还希望在另一页上显示所有有效期为明天的产品

我在网上找到了以下文档:

我已经通过snippets插件将其添加到我的站点,并为我的到期日属性对其进行了修改

/** * 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.

更新

代码中存在多个错误,您的过期日期应始终设置为兼容的日期格式,以便在需要时能够比较日期

尝试以下操作,将从今天起获得过期产品列表:

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');
致:


'compare'=>“我今天将尝试一下,并返回结果。我已经投票支持了你的答案,但由于我的支持率很低,它可能不会显示出来-谢谢!您好,我已经尝试了您提供的第一个代码,它确实用产品链接填充了一个产品名称列表,但它显示了我们商店中的所有产品,而不仅仅是今天(02/02/2021)具有expirydate属性的产品。我可以确认我已删除所有设置为d/m/Y格式的值,并已将其重命名为YYYY-MM-DD格式。我还将functions.php文件中的代码中的日期格式更改为默认的Y-m-d,但它仍然填充我页面上的所有产品。实际上,我只有一个产品具有属性expirydate和值2021-02-02,所以我假设它只显示这一个产品。那太好了,谢谢谢谢,我使用了更新的代码,但现在返回一个空白页。我已检查属性slug是否正确命名为expirydate,并且我输入的值的格式是否正确2021-02-02
'compare'   => '=',
'compare'   => '<=',