忽略WooCommerce文本区域格式

时间:2019-03-05 作者:Roasty

我在年使用了ClemC发布的代码Woocommerce add extra field to variation product 使用textarea而不是text\\u输入。我成功地在wooocommerce默认的“变体描述”文本区域下显示了我的文本区域。我还成功地在产品描述选项卡中显示了我的文本区域信息。但是,这些信息并不保持其格式(html格式被视为文本,特征线被忽略)。

例如,如果我用以下内容填充文本区域:

row1
<b>row2</b></br>
row3
下一个显示在“产品描述”选项卡中:

row1 <b>row2</b></br> row3
如果我在更新后返回产品描述中的文本区域,则信息会显示为修改为:

row1
&lt;b&gt;row2&lt;/b&gt;&lt;/br&gt;
row3
如果我使用wooocommerce默认的“变体描述”文本区域,我将非常感谢任何帮助,以便在我的文本区域中保留格式。

将我的部分代码更改为:

function save_variation_settings_fields( $variation_id, $loop ) {
    $text_field = $_POST[\'my_text_field\'][ $loop ];
    if ( ! empty( $text_field )) {
        if ( ! current_user_can( \'unfiltered_html\' ) ) {
            $text_field = wp_kses_post( $text_field );}
            update_post_meta( $variation_id, \'my_text_field\', $text_field ); }}

function load_variation_settings_fields( $variation ) {     
    $variation[\'my_text_field\'] = wpautop( get_post_meta( $variation[ \'variation_id\' ], \'my_text_field\', true ) );
    return $variation; }
现在一切都像一个魔咒。非常感谢雅各布!

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

您基于代码使用的答案esc_attr() 此行错误:

update_post_meta( $variation_id, \'my_text_field\', esc_attr( $text_field ));
esc_attr() 用于转义值,以便将其放置在输出的HTML属性中。这是一个完全错误的使用,这是什么转换您的<> 字符。只需将其删除即可阻止这种情况的发生:

update_post_meta( $variation_id, \'my_text_field\', $text_field );
请注意,这允许任何可以编辑此产品的人添加他们想要的任何HTML。如果希望textarea遵守有关内容中HTML标记的常规权限规则,请检查用户的权限并使用删除不允许的标记wp_kses_post() 如果不允许他们添加所有标记:

if ( ! current_user_can( \'unfiltered_html\' ) ) {
    $text_field = wp_kses_post( $text_field );
}

update_post_meta( $variation_id, \'my_text_field\', $text_field );
这将确保HTML标记在textarea中工作,但不会保留换行符。如果还想像经典WordPress编辑器的文本视图那样保留换行符和段落,那么需要传递值wpautop() 输出时:

echo wpautop( get_post_meta( $variation[ \'variation_id\' ], \'my_text_field\', true ) );

相关推荐

Config.php issue in WordPress

最近在我的网站上遇到了一个问题。不知道这是什么时候发生的,怎么发生的。我在这个特定网站上的所有网页顶部都显示了以下消息。“注意:常量FS\\u CHMOD\\u DIR已在/home/mc4ebqy52sd6/public\\u html/khwajagharibnawaz中定义。组织/工作包配置。php在线101“网站名为khwajagharibnawaz。组织机构我是WordPress上的一个电枢,不过我看了一下配置。php文件和l01行只是一个文本行,说明以下内容:100*有关可用于调试的其他常数的