PHP 短代码产生意外结果

PHP shortcode yields unexpected result

这是尝试在 WordPress 插件的上下文中创建 PHP 短代码,遵循说明 here:

function echo_postage_cost($html, $item, $images) {
    global $product;
    $sku = get_post_meta( $item['post_id'], '_sku', true );

    if ($sku == "/(^SY-).+/"){
      $postage_cost = "$25";
    } else {
      $postage_cost = "FREE" ;
    }

    $html = str_replace( '[[postage_cost]]', '$postage_cost', $html );

    return $html;
}

add_filter( 'wplister_process_template_html', 'echo_postage_cost', 10, 3 );

然后应该使用 [[postage_cost]] 来调用函数的输出。

但是,即使 _sku 的值为 "SY-DB9-03-MM",输出始终为 "FREE",我们期望为“$25”。我哪里做错了?

这个:

if ($sku == "/(^SY-).+/"){

应该是:

if (preg_match("/(^SY-).+/", $sku)){

或更简单:

if (preg_match("/^SY-/", $sku)){

请尝试使用此代码,

function echo_postage_cost($html, $item, $images) {
    global $product;
    $sku = get_post_meta( $post->ID, '_sku', true );

    if (preg_match('/(^SY-).+/', $sku)){
      $postage_cost = "$25";
    } else {
      $postage_cost = "FREE" ;
    }

    $html = str_replace( '[[postage_cost]]', '$postage_cost', $html );

    return $html;
}

add_filter( 'wplister_process_template_html', 'echo_postage_cost', 10, 3 );