我在WooCommerce库存选项卡中添加了一个下拉列表,用户可以在其中选择要在前端显示的消息。
在函数中。php:
// Display Fields in Back End
add_action( \'woocommerce_product_options_inventory_product_data\', \'woo_add_custom_status_fields\' );
function woo_add_custom_status_fields() {
global $woocommerce, $post;
// Add Select to WooCommerce Inventory Tab in Back End
woocommerce_wp_select(
array(
\'id\' => \'productstatus_select\',
\'label\' => __( \'Product Status\', \'woocommerce\' ),
\'options\' => array(
\'Message one\' => __( \'The message\', \'woocommerce\' ),
\'Message two\' => __( \'The message\', \'woocommerce\' ),
\'Message three\' => __( \'The message\', \'woocommerce\' ),
)
)
);
}
// Save Fields
add_action( \'woocommerce_process_product_meta\', \'woo_add_custom_status_fields_save\' );
function woo_add_custom_status_fields_save( $post_id ){
$woocommerce_select = $_POST[\'productstatus_select\'];
if( !empty( $woocommerce_select ) )
update_post_meta( $post_id, \'productstatus_select\', esc_attr( $woocommerce_select ) );
}
在woocommerce/single product/meta中使用以下代码检索所选值。php
<?php
// Display Custom Field Value in Front End
echo \'<p class="productstatus">\' . get_post_meta( $post->ID, \'productstatus_select\', true ) .\'</p>\';
?>
现在,我想知道是否有可能将不同的类分配给不同的选择,以便我可以对输出的代码进行样式化。例如,在前端将消息一设为红色,消息二设为绿色,等等。我不确定这些选项是否应该是数组,或者我是否需要一个额外的函数来实现这一点。非常感谢您的任何建议。
最合适的回答,由SO网友:Sumit 整理而成
您可以按以下方式执行!
创建CSS类名和消息值的数组
$colors_stings = array(
\'Message one\' => \'message_color_green\',
\'Message two\' => \'message_color_red\',
\'Message three\' => \'message_color_blue\'
);
检查数组中是否存在消息字符串,然后将CSS颜色类指定给变量。
$css_class = isset($colors_stings[$product_status]) ? $colors_stings[$product_status] : \'message_default_color\';
完整示例:-
$colors_stings = array(
\'Message one\' => \'message_color_green\',
\'Message two\' => \'message_color_red\',
\'Message three\' => \'message_color_blue\'
);
$product_status = get_post_meta( $post->ID, \'productstatus_select\', true );
$css_class = isset($colors_stings[$product_status]) ? $colors_stings[$product_status] : \'message_default_color\';
echo \'<p class="productstatus \'. $css_class . \'">\' . $product_status .\'</p>\';
SO网友:kaiser
由于键已经保存了PHP生成的输出,因此应该可以将它们简单地包装在一些标记中
woocommerce_wp_select(
array(
\'id\' => \'productstatus_select\',
\'label\' => __( \'Product Status\', \'woocommerce\' ),
\'options\' => array(
\'Message one\' => sprintf(
\'<span class="message--important">%s</span>\',
__( \'The message\', \'woocommerce\' )
),
\'Message two\' => \'<span class="foo__bar">\'.__( \'The message\', \'woocommerce\' ).\'</span>\',
\'Message three\' => \'<em>\'.__( \'The message\', \'woocommerce\' ).\'</em>\',
)
)
);
}
如果您在多个不同的管理页面上需要不同的标记,您将需要对照
get_current_screen()
属性并相应地切换标记。我只建议在您不希望将标记直接包含在应用程序业务逻辑/实现中,而是以某种方式(例如通过过滤器)注入上面的输出的情况下这样做。