【问题标题】:Button to execute PHP function within woocommerce customer order page在 woocommerce 客户订单页面中执行 PHP 功能的按钮
【发布时间】:2018-09-05 08:01:02
【问题描述】:

我正在尝试制作一个按钮,该按钮将在 woocommerce 的客户订单页面中执行我的 FPDF 脚本,以便客户可以根据按钮旁边的特定订单生成 pdf。

我添加了下面的functions.php 文件来为按钮创建一个新列,并且我添加了我希望按钮执行的函数。

我不知道如何在 myaccount/orders.php 文件中添加一个新按钮来执行该功能。在过去两天的大部分时间里,我一直在努力寻找解决方案 - 所以任何帮助都将不胜感激!

// END ENQUEUE PARENT ACTION

add_filter( 'woocommerce_account_orders_columns', 'add_custom_account_orders_column', 10, 1 );
function add_custom_account_orders_column( $columns ) {
$ordered_columns = array();

// Inserting a new column in a specific location
$ordered_columns['order-number'] = $columns['order-number'];
$ordered_columns['order-date'] = $columns['order-date'];
$ordered_columns['order-status'] = $columns['order-status'];
$ordered_columns['order-total'] = $columns['order-total'];
$ordered_columns['order-actions'] = $columns['order-actions'];
$ordered_columns['order-downloads'] =  __( 'Downloads', 'woocommerce' ); // <== New column

return $ordered_columns;
}

调用FPDF的函数

function exFDPI () {
   require_once("/file/directory/FPDF.php");

}

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    首先你错过了新专栏中的内容,所以这里是如何做到的:

    第 1 步:添加我们的专栏

    add_filter('woocommerce_account_orders_columns', 'add_custom_account_orders_column', 10, 1);
    function add_custom_account_orders_column($columns)
    {
    $ordered_columns = array();
    
    // Inserting a new column in a specific location
    $ordered_columns['order-number'] = $columns['order-number'];
    $ordered_columns['order-date'] = $columns['order-date'];
    $ordered_columns['order-status'] = $columns['order-status'];
    $ordered_columns['order-total'] = $columns['order-total'];
    $ordered_columns['order-actions'] = $columns['order-actions'];
    $ordered_columns['order-downloads'] = __('Downloads', 'woocommerce'); // <== New column
    
    return $ordered_columns;
    }
    

    第 2 步:将表单内容添加到新列中

    //Insert the content into the new column 
    function pdf_column_content($order)
    {
        ?>
    
    
    
        <form action="<?php echo esc_url(admin_url('admin-post.php')); ?>" method="post">
        <?php wp_nonce_field('pdf_temp');?> //Security Check
            <input type="hidden" name="order_id" value="<?php echo $order->get_order_number() ?>">
            <input type="hidden" name="action" value="pdf_temp">
            <input type="submit" value="Submit">
        </form>
    
    
    <?php 
    }
    add_action('woocommerce_my_account_my_orders_column_order-downloads', 'pdf_column_content');
    

    第 3 步最后一步:以 WordPress 方式添加我们的操作

    //when the user click submit then we will call our template 
    function exFDPI()
    {
    
        $retrieved_nonce = $_REQUEST['_wpnonce']; 
        if (!wp_verify_nonce($retrieved_nonce, 'pdf_temp')) { //if passed the security check proceed 
            wp_die('Failed security check');
        } else {
    
            $order_id = $_POST['order_id'];
            echo $order_id;
            require_once "/file/directory/FPDF.php";
        }
    
    }
    
    add_action('admin_post_nopriv_pdf_temp', 'exFDPI');
    add_action('admin_post_pdf_temp', 'exFDPI');
    

    当然完整的代码应该进入你的主题functions.php

    上面的代码经过测试。

    【讨论】:

      【解决方案2】:

      您可以通过按钮传递参数,然后在init钩子上处理请求。

          add_filter( 'woocommerce_account_orders_columns', 'add_custom_account_orders_column', 10, 1 );
          function add_custom_account_orders_column( $columns ) {
          $ordered_columns = array();
      
          // Inserting a new column in a specific location
          $ordered_columns['order-number'] = $columns['order-number'];
          $ordered_columns['order-date'] = $columns['order-date'];
          $ordered_columns['order-status'] = $columns['order-status'];
          $ordered_columns['order-total'] = $columns['order-total'];
          $ordered_columns['order-actions'] = $columns['order-actions'];
          $ordered_columns['order-downloads'] = __('Downloads', 'woocommerce'); // <== New column
      
          return $ordered_columns;
          }
      
      
      
      
      
      function exFDPI () {
      if(isset($_POST['order_id_for_pdf'])) {
      require_once("/file/directory/FPDF.php");
      //
      
      return;
      }
      else {
      return;
      }     
      }
      add_action( 'init', 'exFDPI' );
      

      别忘了加return;

      更新

      正如@kashalo 在他的回答中所说,将内容添加到按钮。

          //Insert the content into the new column 
          function pdf_column_content($order)
          {
              ?>
      
      
          <div id="content">
          <form action="<?php esc_url( $_SERVER['REQUEST_URI'] ) ?>" method="post">
               <input type="hidden" name="order_id_for_pdf" value="<?php echo $order->get_order_number() ?>">
               <input type="submit" value="Downloads">
               </form>
          </div>
      
      <?php 
      }
      add_action('woocommerce_my_account_my_orders_column_order-downloads', 'pdf_column_content');
      

      【讨论】:

      • 非常感谢您的回复!我试过把它放在我的functions.php中,它用
        检查更新的答案。
      猜你喜欢
      • 2021-11-03
      • 1970-01-01
      • 2020-12-20
      • 2019-12-29
      • 2018-05-16
      • 1970-01-01
      • 1970-01-01
      • 2016-12-12
      • 1970-01-01
      相关资源
      最近更新 更多