Plugin Directory

Changeset 3158955


Ignore:
Timestamp:
09/27/2024 08:46:53 PM (19 months ago)
Author:
mcgregormedia
Message:

Version 1.11.0

Location:
purchase-orders-for-woocommerce/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • purchase-orders-for-woocommerce/trunk/README.txt

    r3091754 r3158955  
    44Donate link: https://paypal.me/mcgregormedia
    55Requires at least: 4.8
    6 Tested up to: 6.5
    7 Stable tag: 1.10.1
     6Tested up to: 6.6
     7Stable tag: 1.11.0
    88Requires PHP: 7.4
    99Requires plugin: woocommerce
    1010WC requires at least: 3.0
    11 WC tested up to: 8.9
     11WC tested up to: 9.3
    1212License: GNU General Public License v2.0
    1313License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    2424= WooCommerce compatibility =
    2525
    26 This plugin is compatible with WooCommerce 3.x, 4.x, 5.x, 6.x, 7.x and 8.x versions.
     26This plugin is compatible with WooCommerce 3.x, 4.x, 5.x, 6.x, 7.x, 8.x and 9.x versions.
    2727
    2828= HPOS compatibility =
     
    3838Some 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:
    3939
     40```
    4041_purchase_order_number
    4142_purchase_order_company_name
     
    4748_purchase_order_postcode
    4849_purchase_order_email
     50```
    4951
    5052= Order status =
    5153
    5254Select 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
     58You can add your own fields to the checkout form by adding custom HTML to the action hook in the PO checkout form:
     59
     60```
     61pofwc_form_after_po_form
     62```
     63
     64To add a text input field after the PO number field, the code should look something like this:
     65
     66```
     67function 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}
     75add_action( 'pofwc_form_after_po_form', 'custom_checkout_field_after_po_form' );
     76```
     77
     78You can of course change the form HTML to output a different field type such as a `select` dropdown or `textarea`.
     79
     80To save your custom field, hook into the woocommerce_checkout_update_order_meta action as in the example below:
     81
     82```
     83function 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}
     93add_action( 'woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta', 10, 1 );
     94```
     95
     96There 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```
     99pofwc_thankyou_display_after_po_form
     100pofwc_email_display_after_po_form
     101pofwc_account_display_after_po_form
     102pofwc_admin_display_after_po_form
     103```
     104
     105To 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```
     108function 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}
     112add_action( 'pofwc_thankyou_display_after_po_form', 'display_custom_order_data_after_po_form', 10, 1 );
     113add_action( 'pofwc_account_display_after_po_form', 'display_custom_order_data_after_po_form', 10, 1 );
     114add_action( 'pofwc_admin_display_after_po_form', 'display_custom_order_data_after_po_form', 10, 1 );
     115```
     116
     117Displaying the data in the emails is slightly different as data escaping is done later in the output process:
     118
     119```
     120function 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}
     124add_action( 'pofwc_email_display_after_po_form', 'display_email_custom_order_data_after_po_form', 10, 1 );
     125```
     126
     127This 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.
    53128
    54129= GDPR information =
     
    64139
    65140== Changelog ==
     1411.11.0 27-09-2024
     142ADDED: action hooks in PO checkout form, thank you page, order history and admin Edit Order screen
     143UPDATED: Compatibility with WooCommerce 9.3
     144
    661451.10.1 23-05-2024
    67146FIXED: PHP notice "Function is_internal_meta_key was called incorrectly"
  • purchase-orders-for-woocommerce/trunk/class-purchase-order-gateway.php

    r3091754 r3158955  
    461461             * @since 1.7.16        Fixed company name translation not working on the frontend
    462462             * @since 1.10.0        Fixed missing translation strings
     463             * @since 1.11.0        Added action hooks
    463464             */
    464465           
     
    472473               
    473474                <?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' );
    475476                $po_number_required_text = ( $this->po_number_required == 'yes' ) ? '<span class="required">*</span>' : '';
    476477                $po_number_required_class = ( $this->po_number_required == 'yes' ) ? 'validate-required' : '';
     
    593594               
    594595                <?php } ?>
     596
     597                <?php do_action( 'pofwc_form_after_po_form' ); ?>
    595598               
    596599                <?php
     
    740743             * @since 1.10.0        Removed legacy meta functions so WooCommerce now handles compatibility
    741744             * @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
    743747             */
    744748           
     
    746750               
    747751                $order = wc_get_order( get_the_ID() );
    748                 $order_id = get_the_ID();
    749752               
    750753                if( $order->get_payment_method() == 'purchase_order_gateway' && $order->get_meta('_purchase_order_number', true ) ){
    751754       
    752755                    echo '<h3>' . __( 'Purchase order information', 'pofwc' ) . '</h3>';
     756
    753757                    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
    755760                        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 );
    764780                    echo '</p>';
    765781               
     
    781797             *  @since 1.7.9        Purchase order details now displayed on order-received page
    782798             *  @since 1.10.0       Removed legacy meta functions so WooCommerce now handles compatibility
     799             *  @since 1.11.0       Added action hooks
    783800             */
    784801           
     
    794811                   
    795812                    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
    804828                    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 );
    805831                   
    806832                }
     
    828854             *  @since 1.7.9                        Purchase order details now displayed on order emails
    829855             *  @since 1.8.4                        Added option to not display on order emails
     856             *  @since 1.11.0                       Added action hooks
    830857             */
    831858           
     
    835862
    836863                    $sent_to_admin = true;
    837                    
     864
    838865                    $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                   
    847881                    $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 ) : '';
    850890
    851891
  • purchase-orders-for-woocommerce/trunk/purchase-orders-for-woocommerce.php

    r3091754 r3158955  
    66Author: McGregor Media Web Design
    77Author URI: https://mcgregormedia.co.uk
    8 Version: 1.10.1
    9 Stable tag: 1.10.1
     8Version: 1.11.0
     9Stable tag: 1.11.0
    1010Text Domain: pofwc
    1111Requires at least: 4.8
     
    1313Requires plugins: woocommerce
    1414WC requires at least: 3.0
    15 WC tested up to: 8.9
     15WC tested up to: 9.3
    1616License: GNU General Public License v2.0
    1717License URI: http://www.gnu.org/licenses/gpl-2.0.html
     
    125125
    126126/**
    127  * Undocumented function
     127 * Displays the invoice address
    128128 *
    129129 * @param  int $order_id    The order ID
    130  * @return void
     130 * @return string           The formatted html
    131131 *
    132132 * @since 1.10.0
     133 * @since 1.11.0    Added action hooks
    133134 */
    134135function pofwc_show_invoice_address( $order_id ){
     
    139140
    140141    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       
    142145        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 );
    150164    echo '</p>';
    151165       
Note: See TracChangeset for help on using the changeset viewer.