Woocommerce定制产品文本

Chi*_*zle 6 wordpress e-commerce woocommerce

我正在尝试使用woocommerce创建一个可变产品,其中包括特定于每个产品的用户输入文本.为此,我检测'custom_text'类型并显示文本输入字段而不是正常的select-option下拉列表.

这是在variable.php中:

<form action="<?php echo esc_url( $product->add_to_cart_url() ); ?>" class="variations_form cart" method="post" enctype='multipart/form-data' data-product_id="<?php echo $post->ID; ?>">

    <?php 
    $loop = 0; foreach ( $attributes as $name => $options ) : $loop++; 

        <?php  if(is_array($options) && $options[0] == "custom_text") : //Name to be added to product ?> 
            <label for="<?php echo sanitize_title($name); ?>"><?php echo $woocommerce->attribute_label($name); ?></label></td>
            <input type="text" class="fullwidth req" id="<?php echo esc_attr( sanitize_title($name) ); ?>" name="attribute_<?php echo sanitize_title($name); ?>"/>
        <?php else : ?>
    ...
Run Code Online (Sandbox Code Playgroud)

这是有效的,除非你到达购物车页面,它显示输入为全部小写,删除了空格(更改为连字符)等.

有谁知道你可以在哪里挂钩和/或覆盖这种行为?我一直在尝试一切无济于事.

谢谢

Chi*_*zle 4

如果有人想知道的话,我找到了答案。

            // Get value from post data
            // Don't use woocommerce_clean as it destroys sanitized characters
            $value = sanitize_title( trim( stripslashes( $_REQUEST[ $taxonomy ] ) ) );
Run Code Online (Sandbox Code Playgroud)

前一个位于 woocommerce-functions.php 中的第 339 行。需要改为:

 $value = trim( stripslashes( $_REQUEST[ $taxonomy ] ) ) 
Run Code Online (Sandbox Code Playgroud)

现在只需正确覆盖该文件即可。我从 woocommerce-functions.php 复制了原始函数并将其添加到我的主题的functions.php中。然后我对其进行了更改,以便它不会清理用户输入。

这是我添加到主题的functions.php中的内容:

add_action( 'init', 'override_add_to_cart_action' );
function override_add_to_cart_action( $url = false ) { // Original function is woocommerce_add_to_cart_action()
     // ... full function above and below
     $value = trim( stripslashes( $_REQUEST[ $taxonomy ] ) );
     // ...
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我们不必更改任何核心文件,从而允许我们在需要时更新插件。:)