从自定义表单

时间:2018-04-18 02:26:44

标签: php wordpress woocommerce

我需要在我的网站页面上显示一些订单详情。

我找到了能够满足我需要的代码:

function get_order_details($order_id) {
    $order = wc_get_order( $order_id );
    $order_meta = get_post_meta($order_id);

    echo '<h3>THE ORDER META DATA (Using the array syntax notation):</h3>';
    echo '_billing_first_name: ' . $order_meta[_billing_first_name][0] . '<br>';
    echo '_billing_last_name: ' . $order_meta[_billing_last_name][0] . '<br>';
    echo '_billing_address_index: ' . $order_meta[_billing_address_index][0] . '<br>';
    echo '_shipping_address_index: ' . $order_meta[_shipping_address_index][0] . '<br>';
    echo '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <br><br>';
}

get_order_details(100);

如果将此代码插入function.php,则可行。有关订单的信息将插入顶部的所有页面上,直接位于标题上方。

我想要别的东西,但我不知道怎么做。该网站有一个页面,其中有一个表单:

<form action="/wp-content/themes/storefront/order_number.php" method="post">
    <label for="order_number">Order number</label><br>
    <input type="text" name="order_number" size="30"><br>
    <input type="submit" id="submit" value="Find and output"><br>
</form>

我尝试过:

1)在自定义文件“order_number.php”中添加此功能,但它不起作用。 发生错误:

  

致命错误:在第4行的Z:\ home \ magazinehard.ru \ www \ wp-content \ themes \ storefront \ order_number.php中调用未定义的函数wc_get_order()。

2)在“order_number.php”中添加“include'functions.php'”。 发生错误:

  

致命错误:在第11行的Z:\ home \ magazinehard.ru \ www \ wp-content \ themes \ storefront \ functions.php中调用未定义的函数wp_get_theme()。

如何在“order_number.php”文件中使用此功能。或者可以只使用文件“functions.php”中的必要函数,而忽略其他函数?

如果无法做到这一切,是否有其他方法可以在页面上显示订单的详细信息?

我不擅长PHP,但我需要写一个文凭项目。

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

已更新 - 请尝试以下操作:

// Function that output order details
function display_order_details() {
    // Exit if Order number not submitted
    if ( ! isset( $_POST['order_number'] ) ) 
        return; // Exit

    if( $_POST['order_number'] > 0 )
        $order_id = sanitize_text_field( $_POST['order_number'] );
    else
        return; // Exit

    ## $order = wc_get_order( $order_id ); // Not really needed in this case

    echo '<h3>THE ORDER META DATA (Using the array syntax notation):</h3>
        <p>';

    $billing_first_name = get_post_meta( $order_id, '_billing_first_name', true );
    if( ! empty( $billing_first_name ) )
        echo 'Billing first name: ' . $billing_first_name . '<br>';

    $billing_last_name = get_post_meta( $order_id, '_billing_last_name', true );
    if( ! empty( $billing_last_name ) )
        echo 'Billing last name: ' . $billing_last_name . '<br>';

    $billing_address_index = get_post_meta( $order_id, '_billing_address_index', true );
    if( ! empty( $billing_address_index ) )
        echo 'Billing details: ' . $billing_address_index . '<br>';

    $shipping_address_index = get_post_meta( $order_id, '_shipping_address_index', true );
    if( ! empty( $shipping_address_index ) )
        echo 'Shipping details: ' . $shipping_address_index;

    echo '</p><br>
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <br><br>';
}

// Shotcode that display the form and output order details once submitted
add_shortcode( 'order_details', 'form_get_order_details' );
function form_get_order_details(){
    ob_start(); // Buffering data

    ?>
    <form action="" method="post">
        <label for="order_number">Order number</label><br>
        <input type="text" name="order_number" size="30"><br><br>
        <input type="submit" id="submit" value="Find and output"><br>
    </form>
    <?php

    display_order_details();

    return ob_get_clean(); // Output data from buffer
}

代码放在活动子主题(或活动主题)的function.php文件中。经过测试和工作。

可能的用途:

  1. 在任何页面(或帖子)中,您都可以在WordPress文本编辑器中使用短代码 [order_details]
  2. 在php文件中,您将使用: echo do_shortcode("[order_details]");
  3. 在html的php文件中,您将使用: <?php echo do_shortcode("[order_details]"); ?>
  4.   

    一旦提交订单编号,它应该可以工作并显示订单详细信息

    enter image description here

    相关主题:How to get WooCommerce order details