在 woocommerce 的自定义文本区域中保留用户换行符

     2023-05-07     141

关键词:

【中文标题】在 woocommerce 的自定义文本区域中保留用户换行符【英文标题】:Preserving the user line breaks in a custom text area in woocommerce 【发布时间】:2020-05-03 12:08:02 【问题描述】:

我已经设法在 woocommerce 产品数据中添加了一个自定义文本区域,我的客户可以在其中添加一个工具包列表,该工具包列表输出到车间的装箱单,但换行符不保存,输出是文本流使得挑选的人不那么容易看 这就是我所拥有的,但我在哪里以及如何让它保留管理套件中添加的换行符以输出到装箱单上:

//General Fields
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields',10,3 
);
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save',10,2 );
//variable data
add_action('woocommerce_product_after_variable_attributes', 'variation_settings_fields', 10, 3);
add_action('woocommerce_save_product_variation','save_variation_settings_fields',10, 2);

//data tab

add_action( 'woocommerce_product_data_panels', 'add_my_custom_product_data_fields',10,3 );
add_action( 'woocommerce_process_product_meta','woocommerce_process_product_meta_fields_save',10,2 );
function woo_add_custom_general_fields() 

global $woocommerce, $post;

// Textarea
woocommerce_wp_textarea_input(
  array(
    'id'          => '_textarea[' . $post->ID . ']',
    'label'       => __( 'Kit List', 'woocommerce' ),
    'placeholder' => '',
    'description' => __( 'Enter the kit list here.', 'woocommerce' ),
    'value'       => get_post_meta( $post->ID, '_textarea', true ),
  )
);
 

function woo_add_custom_general_fields_save( $post_id )


// Textarea
$textarea = $_POST['_textarea'][ $post_id ];
if( ! empty( $textarea ) ) 
update_post_meta( $post_id, '_textarea', esc_attr( $textarea ) );






function variation_settings_fields($loop, $variation_data, $variation)

// Textarea
woocommerce_wp_textarea_input(
  array(
    'id'          => '_textarea[' . $variation->ID . ']',
    'label'       => __( 'Kit List', 'woocommerce' ),
    'placeholder' => '',
    'description' => __( 'Enter the kit list here.', 'woocommerce' ),
    'value'       => get_post_meta( $variation->ID, '_textarea', true ),
  )
);

function save_variation_settings_fields($post_id)

// Textarea
 $textarea = $_POST['_textarea'][ $post_id ];
if( ! empty( $textarea ) ) 
update_post_meta( $post_id, '_textarea', esc_attr( $textarea ) );




add_action( 'wpo_wcpdf_after_item_meta', 'wpo_wcpdf_product_custom_field', 10, 3 );
function wpo_wcpdf_product_custom_field ( $template_type, $item, $order ) 
if ( $template_type == 'packing-slip' ) 
   // check if product exists first
    if (empty($item['product'])) return;

    // replace 'Location' with your custom field name!
    $field_name = '_textarea';
    $textarea = method_exists($item['product'], 'get_meta') ? $item['product']
    ->get_meta($field_name,true,'edit') : get_post_meta( $item['product']->id, $field_name, true );
    if (!empty($textarea)) 
        echo nl2br('Kit List: '.$textarea.'');  
    
     
    

【问题讨论】:

你好丽莎劳顿,欢迎来到 SO!您的问题通常非常详细,嵌入式代码 sn-p 是一个不错的选择 - 但是,对我来说,不清楚您想要的结果是什么样的。能否请您详细说明一下? 您好,我希望 textarea 字段的输出保留添加的换行符 - 文本区域仅在装箱单上输出。基本上,客户使用回车符向 woocommerce 产品数据中的自定义文本区域添加一个列表,并输出为列表格式 - 但是目前它只输出为一长行文本 - 希望这是有道理的 你好丽莎,这些有帮助吗?:***.com/questions/30593103/…***.com/questions/40417527/…***.com/questions/498461/… 谢谢,我已经阅读了所有这些内容一百万次,并且无法理解将输出包装在
 中的位置,因为我对代码很垃圾,我基本上是从 sn- 拼凑起来的ps 我找到了,直到有些东西起作用。
终于搞定了,换成了 echo 'Kit List: '.$_textarea.''; with echo nl2br('工具包列表:'.$textarea.'');我已经编辑了上面的代码,以防万一这对其他人有帮助 【参考方案1】:

函数wc_clean 中的问题 - 它曾经获取值并始终使用_sanitize_text_fields( $str, false ),因此无论字段类型如何,woo 都会删除尾随字符:( 请参见下面的跟踪:

在可能的情况下(Need additional field in address),我在表单编辑地址中找到了它。

#/wp-content/plugins/woocommerce/templates/myaccount/form-edit-address.php:38

woocommerce_form_field( $key, $field, wc_get_post_data_by_key( $key, $field['value'] ) );

其中wc_get_post_data_by_key函数返回wc_clean清理的数据

#/wp-content/plugins/woocommerce/includes/wc-core-functions.php:2005

return wc_clean( wp_unslash( wc_get_var( $_POST[ $key ], $default ) ) ); // @codingStandardsIgnoreLine

使用缎面化文字

#/wp-content/plugins/woocommerce/includes/wc-formatting-functions.php:392

return is_scalar( $var ) ? sanitize_text_field( $var ) : $var;

其中未设置keep_newlines(默认为false):

#WordPress/wp-includes/formatting.php:5244

$filtered = _sanitize_text_fields( $str, false );

因此,函数wc_get_post_data_by_key()接收到的任何类型的所有数据都没有换行符

#WordPress/wp-includes/formatting.php:5317

if ( ! $keep_newlines ) 
    $filtered = preg_replace( '/[\r\n\t ]+/', ' ', $filtered );

解决方案(?)

解决方案很重要 - 为所有类似于 sanitize_textarea_field () 的文本字段保留换行符:


add_filter( 'sanitize_text_field',  function ( $filtered, $str ) 
        return _sanitize_text_fields( $str, true );
    
, 10, 2 );


【讨论】:

使用表单助手在 Rails 的预填充文本区域中保留换行符

】使用表单助手在Rails的预填充文本区域中保留换行符【英文标题】:Preservenewlinesinpre-populatedtextareainRailsusingformhelpers【发布时间】:2014-06-1211:44:18【问题描述】:假设你有这个:<%=form_forpost,remote:truedo|f|%><!--someotherfields--&... 查看详情

使用 Ruby on Rails 在文本区域中保留换行符

】使用RubyonRails在文本区域中保留换行符【英文标题】:PreservenewlineintextareawithRubyonRails【发布时间】:2015-04-0811:51:57【问题描述】:为了练习RubyonRails,我正在创建一个包含文本区域的博客(遵循MackenzieChild的教程)。提交文本... 查看详情

点击按钮后在两个文本区域中添加新行并用文本填充它们

...个包含两个文本区域和一个按钮的HTML页面。它是一个自定义SQL客户端,因此用户在第一个文本区域中输入命令并点击按钮。通过使用Javascript和AJAX,文本将被 查看详情

在文本区域中获取行号[重复]

...以使用javascript和jquery吗?【问题讨论】:在文本区域中定义行。它 查看详情

选定文本区域的自定义滚动条设计[重复]

】选定文本区域的自定义滚动条设计[重复]【英文标题】:Customscrollbardesignforselectedtextarea[duplicate]【发布时间】:2019-07-1817:44:18【问题描述】:如何在主流浏览器中为特定的textarea实现自定义滚动设计?例如:我的滚动设计的示... 查看详情

占位符文本未出现在文本区域中

】占位符文本未出现在文本区域中【英文标题】:Placeholdertextnotappearingintextarea【发布时间】:2013-04-2105:40:43【问题描述】:我知道这里有人可以帮助我。我已经查看了关于同一主题的所有论坛,但也许有人可以帮助我的具体情... 查看详情

在 IE 文本区域中不起作用

】\\n在IE文本区域中不起作用【英文标题】:\\nisnotworkinginIEtextarea【发布时间】:2013-01-1600:00:37【问题描述】:我正在使用这个jquery来添加页面的一些元素并将它们添加到文本区域$(\'#chk_editor\').append($(\'#greeting\').text()).append(\'\\n\... 查看详情

如何在文本区域中显示数组内容?

】如何在文本区域中显示数组内容?【英文标题】:Howtoshowarraycontentinatextarea?【发布时间】:2017-12-2200:19:40【问题描述】:我正在尝试将字符串数组的内容显示到文本区域中。基本上我有一个选择,用户可以选择他的输出,当他... 查看详情

文本区域中的 Highlight.js

】文本区域中的Highlight.js【英文标题】:Highlight.jsintextarea【发布时间】:2013-10-2105:39:40【问题描述】:所以我一直在努力在文本区域中使用highlight.js,因为显然这不起作用:<!DOCTYPEhtml><html><head><title>HelloWorld<... 查看详情

在 HTML 文本区域中添加换行符

】在HTML文本区域中添加换行符【英文标题】:AddalinebreakinanHTMLtextarea【发布时间】:2010-09-0904:02:30【问题描述】:如何在html页面的文本区域中添加换行符?我使用VB.net进行服务器端编码。【问题讨论】:【参考方案1】:如果不... 查看详情

如何在文本区域中显示文本的结尾

】如何在文本区域中显示文本的结尾【英文标题】:Howtoshowtheendoftextinatextarea【发布时间】:2018-07-1815:33:01【问题描述】:我有一个HTML页面,其中包含一个带有长文本的文本区域。目前,当我打开页面时,我会在textarea中看到文... 查看详情

从文本区域中删除 jquery 弹性

】从文本区域中删除jquery弹性【英文标题】:removingjqueryelasticfromatextarea【发布时间】:2012-03-2901:17:36【问题描述】:我正在使用jqueryelastic来随着内容的增长自动调整文本区域的高度。我的文本区域有id#statusupdate所以要对它应用... 查看详情

我可以在浏览器的表单/文本区域中更改闪烁的插入符号吗? [复制]

...:39【问题描述】:我想在我的网页文本字段中添加一个自定义文本插入符号。我想要一个老式的块型闪烁插入符号。这可能吗?【问题讨论】:【参考方案1】:简单的答案是您不能通过javascript、 查看详情

如何更改文本区域中一行用户输入的背景颜色?

】如何更改文本区域中一行用户输入的背景颜色?【英文标题】:Howtochangethebackgroundcolorofalineofuserinputinatextarea?【发布时间】:2013-05-0805:25:15【问题描述】:我知道如何更改文本区域的背景颜色,但是如何更改用户在文本区域中... 查看详情

从文本区域获取文本时如何保留换行符?

】从文本区域获取文本时如何保留换行符?【英文标题】:HowdoIpreservelinebreakswhengettingtextfromatextarea?【发布时间】:2017-03-1723:36:36【问题描述】:当用户点击提交时,我在文本区域中获取值。然后我把这个值放在页面的其他地方... 查看详情

如何在 html 文本区域中逐行读取文本? [复制]

】如何在html文本区域中逐行读取文本?[复制]【英文标题】:Howtoreadtextlinebylineinahtmltextarea?[duplicate]【发布时间】:2013-07-0920:12:29【问题描述】:如何逐行读取文本区域的内容或将文本拆分为不同的行以文本行的形式获取输入。... 查看详情

在 Spark 文本区域中滚动多行

】在Spark文本区域中滚动多行【英文标题】:ScrollanumberoflinesinaSparktextarea【发布时间】:2013-08-2502:52:09【问题描述】:我正在编写一个允许搜索导入书籍的数据库程序。屏幕左侧是SparkTextArea,右侧是显示搜索结果的列表。当我单... 查看详情

在文本区域中的光标位置之后插入文本

】在文本区域中的光标位置之后插入文本【英文标题】:Insertingtextaftercursorpositionintextarea【发布时间】:2011-07-0908:58:11【问题描述】:下面的脚本将文本插入到文本区域的末尾。我需要更改为在文本区域中当前光标位置之后插入... 查看详情