【问题标题】:Check input radio id before submit wordpress在提交 wordpress 之前检查输入电台 id
【发布时间】:2018-04-21 09:33:26
【问题描述】:

这就是我现在所拥有的!。

主题/deliverHours.js:

更新

   window.onload = function () {
    getHour= new Date().toLocaleTimeString("en-US",{timeZone:"America/New_York",hour12: false});
    getDay= new Date().toLocaleTimeString("en-US",{timeZone:"America/New_York",hour12: false,weekday:'short'});
    day  = getDay.split(' ');
    arrayDate = getHour.split(':');
  document.getElementById('shipping_method_0_local_pickup8').onclick=function() {
        if(document.getElementById('shipping_method_0_local_pickup8').checked){
            console.log('local Pickup!');
            console.log(getDay);
            if(!(arrayDate[0] >= 7 && arrayDate[0] <= 16 && day[0] == 'Sun')) {
                        document.getElementById('msg').innerHTML = "Sorry,We are Closed";
              document.getElementById('checkOut').disabled = true
                }else{
          document.getElementById('checkOut').disabled = false
          console.log('enjoy your food');
        }
        }
    } 

    document.getElementById('shipping_method_0_flat_rate1').onclick=function(){
        if(document.getElementById('shipping_method_0_flat_rate1').checked){
            console.log('flat rate!');
            console.log(getDay);

          if(!(arrayDate[0] >= 7 && arrayDate[0] <= 16 && day[0] == 'Sun')) {
                      document.getElementById('msg').innerHTML = "sorry,we are closed. "
                    document.getElementById('checkOut').disabled = true
                  }else{
          document.getElementById('checkOut').disabled = false
          console.log('enjoy your food');
        }
}
}
}

主题/function.php:

function deliver_business_hours(){
   wp_register_script('deliverHours', plugins_url('deliverHours.js'), array(),'1.0', true);

wp_enqueue_script('deliverHours');
}




add_action( 'wp_enqueue_script', 'deliver_business_hours');

Lorem Ipsum 只是印刷和排版行业的虚拟文本。自 1500 年代以来,Lorem Ipsum 一直是行业的标准虚拟文本,当时一位不知名的印刷商采用了一种类型的厨房并将其加扰以制作类型样本书。这段文字没用……

应该可以吧?

【问题讨论】:

  • 那么,您的问题/问题是什么?
  • 好的,谢谢,我不知道我在做什么,我更改了代码,所以你知道我如何识别 local_pickup 或统一费率吗?

标签: javascript php wordpress


【解决方案1】:

不幸的是,对于初学者来说,这是一个常见的问题。让我们来看看为什么这不起作用:

  1. 当访问结帐页面时,用户的浏览器会向服务器发送一个带有任何相关 cookie 等的请求。
  2. 服务器开始执行 php(又名 WordPress),最终你的小函数将被执行。
  3. 您的 echo 会将字符串中的所有内容注入到 html 中,然后返回给用户。
  4. 用户的浏览器看到 javascript 并开始执行。在 javascript 中,浏览器会看到这个奇怪的标签 &lt;?php&gt;浏览器不知道如何执行 php。他们的默认设置是简单地忽略任何他们不理解的内容。这就是为什么它不起作用,通过回显 php 代码,你告诉浏览器做一些它不理解的事情。

PHP 是一种服务器端语言。如果你想编写 php,它必须在 HTTP 请求的过程中由服务器执行。如果您需要在客户端执行某些操作,则必须使用所有 javascript 编写。

因此,您有两个选择:

  1. 重写所有要由 JS 处理的逻辑。
  2. 编写最少量的 JS 来调用服务器以在 PHP 中处理。

在您的情况下,我认为一点点 javascript 应该能够通知客户您的交货​​时间。


编程风格旁注:

真的不应该回显任何html标签,尤其是&lt;script&gt;&lt;style&gt;标签。您应该有单独的 .js 和 .css 文件,然后将它们包含到 html 文档中。 WordPress 提供了一个方便的功能:wp_enqueue_script,它将以所有适当的方式为您执行此操作。


更新:

对于 PHP:您需要将单选按钮添加到提交的表单中。可能为 woocommerce 使用适当的钩子/过滤器。之后,可以在从$_POST['shipping_method'] 提交时访问该值。

对于 JS:Here 是关于从浏览器获取时区特定日期时间的问题。看起来这是一个非常本地的网络商店,所以我会提到实例化 javascript 的 Date 对象会获取当前的本地日期时间。所以:

var now = new Date();
var hour = now.getHours();
var day = now.getDay();

应该得到你在 php 中使用它们的时间和日期。

【讨论】:

  • 好的,谢谢,我不知道我在做什么,我更改了代码你知道如何识别 local_pickup 或统一费率吗?
  • 如果您希望在提交之前显示动态消息,则必须使用 javascript。但别担心,这不会太难。如果你真的想坚持使用 php,你的检查代码必须在提交时执行,并且必须将它们重定向回带有通知的表单。适当的信息应该出现在$_POST 变量中。
  • 我试图用 $_POST 变量做所有事情,但我不知道怎么做,因为单选按钮不在表单标签中..
  • 我可以用 JS 做到这一点,但我不知道如何使用小时、天、时区函数来设置打开/关闭交货时间
  • 干得好!我认为这应该得到你现在需要的东西。如果您可以重新编辑您的答案以包含一些早期/中间步骤并接受我的答案,这将帮助其他有类似问题的人通过查看我们从哪里开始以及我们如何解决它来找到他们需要的东西。谢谢!
猜你喜欢
  • 2016-08-06
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
相关资源
最近更新 更多