如何让客户在产品页面上输入自定义文本然后按字母收费?

时间:2017-04-25 20:40:46

标签: php wordpress woocommerce

我目前正在组建一个WordPress网站,WooCommerce是电子商务功能的首选平台。

个人希望在产品页面上有一个字段,人们可以在其中输入自定义字词。此自定义单词将应用于页面上的产品。

此外,此自定义字段中的前16个字母将包含在产品价格中。因此,收费仅适用于前16个字母后的任何字母。

我假设这需要在functions.php文件中工作。

为实现这一目标,我需要遵循哪些关于所需编码或步骤的建议?

3 个答案:

答案 0 :(得分:1)

我从未使用过WOOCOMERCE,问题是要求一个php解决方案,但由于这与客户端输入有关,我认为最好在客户端使用jquery进行验证然后将值传递给你php函数进入你的数据库

你可以在变化上运行ajax调用,这看起来有点过于密集 和PITA

$(document).ready(function() {
$("#basePrice").on('change', function(e){
   $('#word').keyup();
})
  $('#word').on('keyup', function(e) {
    length = $(this).val().length;
    $('#wordLength').html(length);
    if(length>=16){
      $('#wordLength').addClass('greater');
      total = parseFloat($('#basePrice').val()) + parseFloat((length - 16) * $('#priceperletter').val())  ;
      $('#total').val(total);
    }
    else {
      $('#wordLength').removeClass('greater');
      total = parseFloat($('#basePrice').val());
      $('#total').val(total);
    }
  })
})
label{
  display:block
}
.greater{
  border:1px solid red;
}
.totalLabel,.totalLabel * {
font-weight:700;
font-size:18px;
}
.totalLabel input{
  border:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>Base Price<input id="basePrice" value="10"/></label>
<label>Price per Letter over 16<input id="priceperletter" value = ".25"/></label>
<label>Enter your string<input id="word" type="text" /> <span id="wordLength"></span></label>


<label class="totalLabel" >Total $<input id="total" readonly value="10"/></label>

答案 1 :(得分:1)

PHP strlen() 函数用于统计字符串中的字符。 例如:

<?php
echo strlen('YourString'); //outputs 10
?>
<?php
$string='YourString';
echo strlen($string); //outputs 10
?>

更多信息请参考Crackpoint PHP strlen () tutorial

所以如果你想比较,你可以使用like

if (strlen($description) >= 16) ){
   // more then 16 characters
   // We need to charge the user
} else {
   // N

您的解决方案

<?php
   // If form is submitted
   if (isset($_POST['description']) && !empty($_POST['description'])) {
        // Form is submitted, check length
        $description = trim($_POST['description']);
        if (strlen($description) >= 16)) {
           // more then 16 characters
           // We need to charge the user
        } else {
           // Not more then 16 characters, continue.
        }
   }
   ?>
   <html>
         ... Your other code here ...
         <form method='POST' action="$_SERVER['PHP_SELF']">
              <input type='text' name='description' />
              <input type='submit' />
         </form>
   </html>

答案 2 :(得分:0)

由于这是一个非常通用的问题,我不能发表评论只发表答案,我会尝试在这里提供帮助。

if strlen($description >= 16) {
   // more then 16 characters
   // We need to charge the user
} else {
   // Not more then 16 characters, continue.
}

W3Schools:https://www.w3schools.com/php/func_string_strlen.asp PHP站点:http://php.net/manual/en/function.strlen.php

根据以下评论。这是一个仅用于演示的模型。我不确定您的所有网站是如何设置的,所以我无法让它为您复制和粘贴。我不确定WooCommerce在付款方面是如何设置的。

   <?php
   // If form is submitted
   if (isset($_POST['description']) && !empty($_POST['description'])) {
        // Form is submitted, check length
        $description = trim($_POST['description']);
        if strlen($description >= 16) {
           // more then 16 characters
           // We need to charge the user
        } else {
           // Not more then 16 characters, continue.
        }
   }
   ?>
   <html>
         ... Your other code here ...
         <form method='POST' action="$_SERVER['PHP_SELF']">
              <input type='text' name='description' />
              <input type='submit' />
         </form>
   </html>

同样,这还没有准备好复制&amp;糊。我知道这个论坛上的人非常特别和评判,所以请注意它是一个模型。您将需要确保输入是安全和安全的等等。我不确定如何直接进入woocommerce,所以我道歉,如果这只是浪费你的时间。

这是我的第一个合法答案,很好。