2017-10-28 76 views
0

我使用woocommerce,我编辑的wordpress 的functions.php文件。如何插入如果WordPress的functions.php的声明文件

我的店里有两个结账页面,一个前管理员审核订单(结帐)和其他管理员批准订单(最终结账)之后。

我想从第一个结帐页面中删除结算信息,并仅在第二个(最终)结帐页面中显示它。

的functions.php页,我用下面的if语句,但它不工作。我认为if语句正在针对functions.php页面进行测试,而不是结帐页面。

if (is_page('checkout')){ 

     add_filter('woocommerce_checkout_fields' , 'custom_override_checkout_fields'); 

      function custom_override_checkout_fields($fields) { 
       unset($fields['billing']['billing_first_name']); 
       unset($fields['billing']['billing_last_name']); 
       unset($fields['billing']['billing_company']); 
       unset($fields['billing']['billing_address_1']); 

       return $fields; 
      } 

} 

如果有人能帮助我只显示第二结账页面上的计费信息,而不是第一,那将是非常赞赏

THANKS

+1

如果你在你的函数中使用'unset()',这将消除前后的这些字段,因为客户将无法输入任何数据。你的条件应该在函数内部,而不是在外部...对于正常的结账页面,你应该使用'if(is_checkout()){'better than'if(is_page('checkout')){'...但是记住'woocommerce_checkout_fields 'hook只在结账页面上工作,所以如果你使用它,你不需要条件函数... – LoicTheAztec

+0

没有任何分离文件的最终结帐页面?像final-checkout.php? –

回答

0

之前,你不能调用is_page()全局WP_Query实例$ wp_query被构造。您的functions.php包含在$ wp_query构建之前。为了解决使用

add_action('parse_request', function() { 
    # At this point $wp_query has been constructed and you can call is_page() 
}); 
0

这个问题,你需要$ wp_query对象被创建后,安排你的代码后运行,你可以请把IF条件函数内部,然后再试一次?

add_filter('woocommerce_checkout_fields' , 'custom_override_checkout_fields'); 

    function custom_override_checkout_fields($fields) { 
     if (is_page('checkout')){ 
      unset($fields['billing']['billing_first_name']); 
      unset($fields['billing']['billing_last_name']); 
      unset($fields['billing']['billing_company']); 
      unset($fields['billing']['billing_address_1']); 

      return $fields; 
     } 
    }