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 );
这是尝试在 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 );