分配类以在WooCommerce产品自定义域中进行下拉选择

时间:2016-05-02 作者:MadLandley

我在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>\';
    ?>
现在,我想知道是否有可能将不同的类分配给不同的选择,以便我可以对输出的代码进行样式化。例如,在前端将消息一设为红色,消息二设为绿色,等等。我不确定这些选项是否应该是数组,或者我是否需要一个额外的函数来实现这一点。非常感谢您的任何建议。

2 个回复
最合适的回答,由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() 属性并相应地切换标记。我只建议在您不希望将标记直接包含在应用程序业务逻辑/实现中,而是以某种方式(例如通过过滤器)注入上面的输出的情况下这样做。

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: