Changeset 3158955
- Timestamp:
- 09/27/2024 08:46:53 PM (19 months ago)
- Location:
- purchase-orders-for-woocommerce/trunk
- Files:
-
- 3 edited
-
README.txt (modified) (5 diffs)
-
class-purchase-order-gateway.php (modified) (9 diffs)
-
purchase-orders-for-woocommerce.php (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
purchase-orders-for-woocommerce/trunk/README.txt
r3091754 r3158955 4 4 Donate link: https://paypal.me/mcgregormedia 5 5 Requires at least: 4.8 6 Tested up to: 6. 57 Stable tag: 1.1 0.16 Tested up to: 6.6 7 Stable tag: 1.11.0 8 8 Requires PHP: 7.4 9 9 Requires plugin: woocommerce 10 10 WC requires at least: 3.0 11 WC tested up to: 8.911 WC tested up to: 9.3 12 12 License: GNU General Public License v2.0 13 13 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 24 24 = WooCommerce compatibility = 25 25 26 This plugin is compatible with WooCommerce 3.x, 4.x, 5.x, 6.x, 7.x and 8.x versions.26 This plugin is compatible with WooCommerce 3.x, 4.x, 5.x, 6.x, 7.x, 8.x and 9.x versions. 27 27 28 28 = HPOS compatibility = … … 38 38 Some invoicing plugins require the meta keys of purchase order data to display this data on invoices. The meta keys used in this plugin are listed below: 39 39 40 ``` 40 41 _purchase_order_number 41 42 _purchase_order_company_name … … 47 48 _purchase_order_postcode 48 49 _purchase_order_email 50 ``` 49 51 50 52 = Order status = 51 53 52 54 Select the order status to apply to the order to when a customer checks out using a Purchase Order. All order statuses are available for selection including any custom statuses that may have been added. Be aware that if you set the status to Pending, neither you nor the customer will receive an order email after checkout - this is standard WooCommerce functionality. By default, order emails will be sent when a status is changed from Pending to On Hold or Processing. 55 56 = Custom fields = 57 58 You can add your own fields to the checkout form by adding custom HTML to the action hook in the PO checkout form: 59 60 ``` 61 pofwc_form_after_po_form 62 ``` 63 64 To add a text input field after the PO number field, the code should look something like this: 65 66 ``` 67 function custom_checkout_field_after_po_form() { 68 ?> 69 <p class="form-row form-row-wide"> 70 <label for="YOUR-FIELD-ID">YOUR FIELD LABEL TEXT</label> 71 <input type="text" id="YOUR-FIELD-ID" name="YOUR_FIELD_NAME" class="input-text" placeholder="YOUR FIELD PLACEHOLDER"> 72 </p> 73 <?php 74 } 75 add_action( 'pofwc_form_after_po_form', 'custom_checkout_field_after_po_form' ); 76 ``` 77 78 You can of course change the form HTML to output a different field type such as a `select` dropdown or `textarea`. 79 80 To save your custom field, hook into the woocommerce_checkout_update_order_meta action as in the example below: 81 82 ``` 83 function custom_checkout_field_update_order_meta( $order_id ) { 84 85 $order = wc_get_order( $order_id ); 86 87 if ( ! empty( $_POST['YOUR_FIELD_NAME'] ) ) { 88 $order->update_meta_data( 'YOUR_FIELD_NAME', sanitize_text_field( $_POST['YOUR_FIELD_NAME'] ) ); 89 } 90 91 $order->save(); 92 } 93 add_action( 'woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta', 10, 1 ); 94 ``` 95 96 There are four places the PO data can be displayed: the order thank you page, the order emails, the customer order history, and the admin Edit Order screen. To display your custom field data, use one of the following action hooks to add your data in the required place: 97 98 ``` 99 pofwc_thankyou_display_after_po_form 100 pofwc_email_display_after_po_form 101 pofwc_account_display_after_po_form 102 pofwc_admin_display_after_po_form 103 ``` 104 105 To output your example text input from above in the checkout thank you page, the Edit Order screen and customer order history, the code should look something like this: 106 107 ``` 108 function display_custom_order_data_after_po_form( $order ) { 109 110 echo ( $order->get_meta( 'YOUR_FIELD_NAME', true ) ) ? esc_html( $order->get_meta( 'YOUR_FIELD_NAME', true ) ) . '<br>' : ''; 111 } 112 add_action( 'pofwc_thankyou_display_after_po_form', 'display_custom_order_data_after_po_form', 10, 1 ); 113 add_action( 'pofwc_account_display_after_po_form', 'display_custom_order_data_after_po_form', 10, 1 ); 114 add_action( 'pofwc_admin_display_after_po_form', 'display_custom_order_data_after_po_form', 10, 1 ); 115 ``` 116 117 Displaying the data in the emails is slightly different as data escaping is done later in the output process: 118 119 ``` 120 function display_email_custom_order_data_after_po_form( $order ) { 121 122 echo $order->get_meta( 'YOUR_FIELD_NAME', true ) ? $order->get_meta( 'YOUR_FIELD_NAME', true ) : ''; 123 } 124 add_action( 'pofwc_email_display_after_po_form', 'display_email_custom_order_data_after_po_form', 10, 1 ); 125 ``` 126 127 This code all goes in your functions.php file in your child theme - don't place this code in a parent theme (unless it's one you maintain yourself) as it will be overwritten when the theme is updated. 53 128 54 129 = GDPR information = … … 64 139 65 140 == Changelog == 141 1.11.0 27-09-2024 142 ADDED: action hooks in PO checkout form, thank you page, order history and admin Edit Order screen 143 UPDATED: Compatibility with WooCommerce 9.3 144 66 145 1.10.1 23-05-2024 67 146 FIXED: PHP notice "Function is_internal_meta_key was called incorrectly" -
purchase-orders-for-woocommerce/trunk/class-purchase-order-gateway.php
r3091754 r3158955 461 461 * @since 1.7.16 Fixed company name translation not working on the frontend 462 462 * @since 1.10.0 Fixed missing translation strings 463 * @since 1.11.0 Added action hooks 463 464 */ 464 465 … … 472 473 473 474 <?php 474 $po_number_label = ( $this->po_number_label != '' ) ? $this->po_number_label : __( 'Purchase order number', 'pofwc' );475 $po_number_label = ( $this->po_number_label != '' ) ? $this->po_number_label : __( 'Purchase order number', 'pofwc' ); 475 476 $po_number_required_text = ( $this->po_number_required == 'yes' ) ? '<span class="required">*</span>' : ''; 476 477 $po_number_required_class = ( $this->po_number_required == 'yes' ) ? 'validate-required' : ''; … … 593 594 594 595 <?php } ?> 596 597 <?php do_action( 'pofwc_form_after_po_form' ); ?> 595 598 596 599 <?php … … 740 743 * @since 1.10.0 Removed legacy meta functions so WooCommerce now handles compatibility 741 744 * @since 1.10.0 Fixed missing translation strings 742 * @since 1.10.1 Fixed PHP warning "Notice: Function is_internal_meta_key was called incorrectly" 745 * @since 1.11.0 Fixed PHP warning "Notice: Function is_internal_meta_key was called incorrectly" 746 * @since 1.11.0 Added action hooks 743 747 */ 744 748 … … 746 750 747 751 $order = wc_get_order( get_the_ID() ); 748 $order_id = get_the_ID();749 752 750 753 if( $order->get_payment_method() == 'purchase_order_gateway' && $order->get_meta('_purchase_order_number', true ) ){ 751 754 752 755 echo '<h3>' . __( 'Purchase order information', 'pofwc' ) . '</h3>'; 756 753 757 echo '<p>'; 754 echo '<strong>' . __( 'Purchase order number:', 'pofwc' ) . '</strong> ' . $order->get_meta('_purchase_order_number', true ) . '<br>'; 758 echo '<strong>' . __( 'Purchase order number:', 'pofwc' ) . '</strong> ' . $order->get_meta('_purchase_order_number', true ) . '<br>'; 759 755 760 echo '<strong>' . __( 'Invoice details:', 'pofwc' ) . '</strong> <br>'; 756 echo ( $order->get_meta('_purchase_order_company_name', true ) ) ? esc_html( $order->get_meta('_purchase_order_company_name', true ) ) . '<br>' : ''; 757 echo ( $order->get_meta('_purchase_order_address1', true ) ) ? esc_html( $order->get_meta('_purchase_order_address1', true ) ) . '<br>' : ''; 758 echo ( $order->get_meta('_purchase_order_address2', true ) ) ? esc_html( $order->get_meta('_purchase_order_address2', true ) ) . '<br>' : ''; 759 echo ( $order->get_meta('_purchase_order_address3', true ) ) ? esc_html( $order->get_meta('_purchase_order_address3', true ) ) . '<br>' : ''; 760 echo ( $order->get_meta('_purchase_order_town', true ) ) ? esc_html( $order->get_meta('_purchase_order_town', true ) ) . '<br>' : ''; 761 echo ( $order->get_meta('_purchase_order_county', true ) ) ? esc_html( $order->get_meta('_purchase_order_county', true ) ) . '<br>' : ''; 762 echo ( $order->get_meta('_purchase_order_postcode', true ) ) ? esc_html( $order->get_meta('_purchase_order_postcode', true ) ) . '<br>' : ''; 763 echo ( $order->get_meta('_purchase_order_email', true ) ) ? esc_html( $order->get_meta('_purchase_order_email', true ) ) . '<br>' : ''; 761 echo ( $order->get_meta('_purchase_order_company_name', true ) ) ? esc_html( $order->get_meta('_purchase_order_company_name', true ) ) . '<br>' : ''; 762 763 echo ( $order->get_meta('_purchase_order_address1', true ) ) ? esc_html( $order->get_meta('_purchase_order_address1', true ) ) . '<br>' : ''; 764 765 echo ( $order->get_meta('_purchase_order_address2', true ) ) ? esc_html( $order->get_meta('_purchase_order_address2', true ) ) . '<br>' : ''; 766 767 echo ( $order->get_meta('_purchase_order_address3', true ) ) ? esc_html( $order->get_meta('_purchase_order_address3', true ) ) . '<br>' : ''; 768 769 echo ( $order->get_meta('_purchase_order_town', true ) ) ? esc_html( $order->get_meta('_purchase_order_town', true ) ) . '<br>' : ''; 770 771 echo ( $order->get_meta('_purchase_order_county', true ) ) ? esc_html( $order->get_meta('_purchase_order_county', true ) ) . '<br>' : ''; 772 773 do_action( 'pofwc_admin_display_after_po_county', $order ); 774 775 echo ( $order->get_meta('_purchase_order_postcode', true ) ) ? esc_html( $order->get_meta('_purchase_order_postcode', true ) ) . '<br>' : ''; 776 777 echo ( $order->get_meta('_purchase_order_email', true ) ) ? esc_html( $order->get_meta('_purchase_order_email', true ) ) . '<br>' : ''; 778 779 do_action( 'pofwc_admin_display_after_po_form', $order ); 764 780 echo '</p>'; 765 781 … … 781 797 * @since 1.7.9 Purchase order details now displayed on order-received page 782 798 * @since 1.10.0 Removed legacy meta functions so WooCommerce now handles compatibility 799 * @since 1.11.0 Added action hooks 783 800 */ 784 801 … … 794 811 795 812 echo '<p><strong>' . __( 'Purchase Order number', 'pofwc' ) . ':</strong> ' . $purchase_order_number . '<br>'; 796 echo ( $order->get_meta('_purchase_order_address1', true ) ) ? '<strong>Invoice details:</strong><br>' : ''; 797 echo ( $order->get_meta('_purchase_order_company_name', true ) ) ? esc_html( $order->get_meta('_purchase_order_company_name', true ) ) . '<br>' : ''; 798 echo ( $order->get_meta('_purchase_order_address1', true ) ) ? esc_html( $order->get_meta('_purchase_order_address1', true ) ) . '<br>' : ''; 799 echo ( $order->get_meta('_purchase_order_address2', true ) ) ? esc_html( $order->get_meta('_purchase_order_address2', true ) ) . '<br>' : ''; 800 echo ( $order->get_meta('_purchase_order_address3', true ) ) ? esc_html( $order->get_meta('_purchase_order_address3', true ) ) . '<br>' : ''; 801 echo ( $order->get_meta('_purchase_order_town', true ) ) ? esc_html( $order->get_meta('_purchase_order_town', true ) ) . '<br>' : ''; 802 echo ( $order->get_meta('_purchase_order_county', true ) ) ? esc_html( $order->get_meta('_purchase_order_county', true ) ) . '<br>' : ''; 803 echo ( $order->get_meta('_purchase_order_postcode', true ) ) ? esc_html( $order->get_meta('_purchase_order_postcode', true ) ) . '<br>' : ''; 813 814 echo ( $order->get_meta('_purchase_order_company_name', true ) ) ? esc_html( $order->get_meta('_purchase_order_company_name', true ) ) . '<br>' : ''; 815 816 echo ( $order->get_meta('_purchase_order_address1', true ) ) ? esc_html( $order->get_meta('_purchase_order_address1', true ) ) . '<br>' : ''; 817 818 echo ( $order->get_meta('_purchase_order_address2', true ) ) ? esc_html( $order->get_meta('_purchase_order_address2', true ) ) . '<br>' : ''; 819 820 echo ( $order->get_meta('_purchase_order_address3', true ) ) ? esc_html( $order->get_meta('_purchase_order_address3', true ) ) . '<br>' : ''; 821 822 echo ( $order->get_meta('_purchase_order_town', true ) ) ? esc_html( $order->get_meta('_purchase_order_town', true ) ) . '<br>' : ''; 823 824 echo ( $order->get_meta('_purchase_order_county', true ) ) ? esc_html( $order->get_meta('_purchase_order_county', true ) ) . '<br>' : ''; 825 826 echo ( $order->get_meta('_purchase_order_postcode', true ) ) ? esc_html( $order->get_meta('_purchase_order_postcode', true ) ) . '<br>' : ''; 827 804 828 echo ( $order->get_meta('_purchase_order_email', true ) ) ? esc_html( $order->get_meta('_purchase_order_email', true ) ) . '<br>' : ''; 829 830 do_action( 'pofwc_thankyou_display_after_po_form', $order ); 805 831 806 832 } … … 828 854 * @since 1.7.9 Purchase order details now displayed on order emails 829 855 * @since 1.8.4 Added option to not display on order emails 856 * @since 1.11.0 Added action hooks 830 857 */ 831 858 … … 835 862 836 863 $sent_to_admin = true; 837 864 838 865 $purchase_order_number = array( 'label' => __( 'Purchase Order number', 'pofwc' ), 'value' => esc_html( $order->get_meta( '_purchase_order_number', true ) ) ); 839 840 $purchase_order_company_name = ( $order->get_meta( '_purchase_order_company_name', true ) ) ? esc_html( $order->get_meta( '_purchase_order_company_name', true ) ) : ''; 841 $purchase_order_address1 = ( $order->get_meta( '_purchase_order_address1', true ) ) ? '<br>' . esc_html( $order->get_meta( '_purchase_order_address1', true ) ) : ''; 842 $purchase_order_address2 = ( $order->get_meta( '_purchase_order_address2', true ) ) ? '<br>' . esc_html( $order->get_meta( '_purchase_order_address2', true ) ) : ''; 843 $purchase_order_address3 = ( $order->get_meta( '_purchase_order_address3', true ) ) ? '<br>' . esc_html( $order->get_meta( '_purchase_order_address3', true ) ) : ''; 844 $purchase_order_town = ( $order->get_meta( '_purchase_order_town', true ) ) ? '<br>' . esc_html( $order->get_meta( '_purchase_order_town', true ) ) : ''; 845 $purchase_order_county = ( $order->get_meta( '_purchase_order_county', true ) ) ? '<br>' . esc_html( $order->get_meta( '_purchase_order_county', true ) ) : ''; 846 $purchase_order_postcode = ( $order->get_meta( '_purchase_order_postcode', true ) ) ? '<br>' . esc_html( $order->get_meta( '_purchase_order_postcode', true ) ) : ''; 866 867 $purchase_order_company_name = ( $order->get_meta( '_purchase_order_company_name', true ) ) ? esc_html( $order->get_meta( '_purchase_order_company_name', true ) ) : ''; 868 869 $purchase_order_address1 = ( $order->get_meta( '_purchase_order_address1', true ) ) ? '<br>' . esc_html( $order->get_meta( '_purchase_order_address1', true ) ) : ''; 870 871 $purchase_order_address2 = ( $order->get_meta( '_purchase_order_address2', true ) ) ? '<br>' . esc_html( $order->get_meta( '_purchase_order_address2', true ) ) : ''; 872 873 $purchase_order_address3 = ( $order->get_meta( '_purchase_order_address3', true ) ) ? '<br>' . esc_html( $order->get_meta( '_purchase_order_address3', true ) ) : ''; 874 875 $purchase_order_town = ( $order->get_meta( '_purchase_order_town', true ) ) ? '<br>' . esc_html( $order->get_meta( '_purchase_order_town', true ) ) : ''; 876 877 $purchase_order_county = ( $order->get_meta( '_purchase_order_county', true ) ) ? '<br>' . esc_html( $order->get_meta( '_purchase_order_county', true ) ) : ''; 878 879 $purchase_order_postcode = ( $order->get_meta( '_purchase_order_postcode', true ) ) ? '<br>' . esc_html( $order->get_meta( '_purchase_order_postcode', true ) ) : ''; 880 847 881 $purchase_order_email = ( $order->get_meta( '_purchase_order_email', true ) ) ? '<br>' . esc_html( $order->get_meta( '_purchase_order_email', true ) ) : ''; 848 849 $purchase_order_details = ( $order->get_meta( '_purchase_order_address1', true ) ) ? array( 'label' => __( 'Invoice details', 'pofwc' ), 'value' => '<br>' . $purchase_order_company_name . $purchase_order_address1 . $purchase_order_address2 . $purchase_order_address3 . $purchase_order_town . $purchase_order_county . $purchase_order_postcode . $purchase_order_email ) : ''; 882 883 ob_start(); 884 do_action( 'pofwc_email_display_after_po_form', $order ); 885 $after_po_form = ob_get_contents(); 886 ob_end_clean(); 887 $after_po_form = $after_po_form ? '<br>' . $after_po_form : ''; 888 889 $purchase_order_details = ( $order->get_meta( '_purchase_order_address1', true ) ) ? array( 'label' => __( 'Invoice details', 'pofwc' ), 'value' => '<br>' . $purchase_order_company_name . $purchase_order_address1 . $purchase_order_address2 . $purchase_order_address3 . $purchase_order_town . $purchase_order_county . $purchase_order_postcode . $purchase_order_email . $after_po_form ) : ''; 850 890 851 891 -
purchase-orders-for-woocommerce/trunk/purchase-orders-for-woocommerce.php
r3091754 r3158955 6 6 Author: McGregor Media Web Design 7 7 Author URI: https://mcgregormedia.co.uk 8 Version: 1.1 0.19 Stable tag: 1.1 0.18 Version: 1.11.0 9 Stable tag: 1.11.0 10 10 Text Domain: pofwc 11 11 Requires at least: 4.8 … … 13 13 Requires plugins: woocommerce 14 14 WC requires at least: 3.0 15 WC tested up to: 8.915 WC tested up to: 9.3 16 16 License: GNU General Public License v2.0 17 17 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 125 125 126 126 /** 127 * Undocumented function127 * Displays the invoice address 128 128 * 129 129 * @param int $order_id The order ID 130 * @return void130 * @return string The formatted html 131 131 * 132 132 * @since 1.10.0 133 * @since 1.11.0 Added action hooks 133 134 */ 134 135 function pofwc_show_invoice_address( $order_id ){ … … 139 140 140 141 echo '<p>'; 141 echo '<strong>' . __( 'Purchase order number', 'pofwc' ) . ':</strong> ' . $order->get_meta( '_purchase_order_number', true ) . '<br>'; 142 143 echo '<strong>' . __( 'Purchase order number', 'pofwc' ) . ':</strong> ' . $order->get_meta( '_purchase_order_number', true ) . '<br>'; 144 142 145 echo '<strong>' . __( 'Invoice address', 'pofwc' ) . ':</strong> <br>'; 143 echo ( $order->get_meta( '_purchase_order_company_name', true ) ) ? esc_html( $order->get_meta( '_purchase_order_company_name', true ) ) . '<br>' : ''; 144 echo ( $order->get_meta( '_purchase_order_address1', true ) ) ? esc_html( $order->get_meta( '_purchase_order_address1', true ) ) . '<br>' : ''; 145 echo ( $order->get_meta( '_purchase_order_address2', true ) ) ? esc_html( $order->get_meta( '_purchase_order_address2', true ) ) . '<br>' : ''; 146 echo ( $order->get_meta( '_purchase_order_address3', true ) ) ? esc_html( $order->get_meta( '_purchase_order_address3', true ) ) . '<br>' : ''; 147 echo ( $order->get_meta( '_purchase_order_town', true ) ) ? esc_html( $order->get_meta( '_purchase_order_town', true ) ) . '<br>' : ''; 148 echo ( $order->get_meta( '_purchase_order_county', true ) ) ? esc_html( $order->get_meta( '_purchase_order_county', true ) ) . '<br>' : ''; 149 echo ( $order->get_meta( '_purchase_order_postcode', true ) ) ? esc_html( $order->get_meta( '_purchase_order_postcode', true ) ) . '<br>' : ''; 146 147 echo ( $order->get_meta( '_purchase_order_company_name', true ) ) ? esc_html( $order->get_meta( '_purchase_order_company_name', true ) ) . '<br>' : ''; 148 149 echo ( $order->get_meta( '_purchase_order_address1', true ) ) ? esc_html( $order->get_meta( '_purchase_order_address1', true ) ) . '<br>' : ''; 150 151 echo ( $order->get_meta( '_purchase_order_address2', true ) ) ? esc_html( $order->get_meta( '_purchase_order_address2', true ) ) . '<br>' : ''; 152 153 echo ( $order->get_meta( '_purchase_order_address3', true ) ) ? esc_html( $order->get_meta( '_purchase_order_address3', true ) ) . '<br>' : ''; 154 155 echo ( $order->get_meta( '_purchase_order_town', true ) ) ? esc_html( $order->get_meta( '_purchase_order_town', true ) ) . '<br>' : ''; 156 157 echo ( $order->get_meta( '_purchase_order_county', true ) ) ? esc_html( $order->get_meta( '_purchase_order_county', true ) ) . '<br>' : ''; 158 159 echo ( $order->get_meta( '_purchase_order_postcode', true ) ) ? esc_html( $order->get_meta( '_purchase_order_postcode', true ) ) . '<br>' : ''; 160 161 echo ( $order->get_meta( '_purchase_order_email', true ) ) ? esc_html( $order->get_meta( '_purchase_order_email', true ) ) . '<br>' : ''; 162 163 do_action( 'pofwc_account_display_after_po_form', $order ); 150 164 echo '</p>'; 151 165
Note: See TracChangeset
for help on using the changeset viewer.