Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save smeric/2320dc0344e37c62bd644b24e54d908c to your computer and use it in GitHub Desktop.
Save smeric/2320dc0344e37c62bd644b24e54d908c to your computer and use it in GitHub Desktop.
This removes the title entirely to get rid of a duplicate sentence, resolving at the same time a <h2> problem... And offers a way to make the checkout choice of the date optionnal !
<?php
/**
* Remove the WooCommerce Local Pickup Time plugin checkout page select field title.
* And offers a way to make the checkout choice of the date optionnal !
*
* @see https://github.com/WC-Local-Pickup/woocommerce-local-pickup-time/issues/103
* @see https://github.com/WC-Local-Pickup/woocommerce-local-pickup-time/issues/104
*/
if ( class_exists( 'Local_Pickup_Time' ) ) {
// Add a checkbox field to make the pickup date choice optionnal
add_filter( 'woocommerce_general_settings', 'make_pickup_time_choice_mandatory', 20 );
// Remove the default mandatory check on checkout.
remove_action( 'woocommerce_checkout_process', array( Local_Pickup_Time::get_instance(), 'field_process') );
// And add this custom one.
add_action( 'woocommerce_checkout_process', 'my_not_mandatory_custom_field_process' );
// Remove the default local pickup time field from the checkout page.
remove_action( apply_filters( 'local_pickup_time_select_location', 'woocommerce_after_order_notes' ), array( Local_Pickup_Time::get_instance(), 'time_select') );
// And add this custom one.
add_action( apply_filters( 'local_pickup_time_select_location', 'woocommerce_after_order_notes' ), 'my_not_mandatory_custom_time_select' );
// Hide the time select field if an other delivery method is choosen on checkout page
add_action( 'wp_footer', 'hide_local_pickup_time_select' );
/**
* Add a checkbox field to make the pickup date choice optionnal
*
* @param array $settings General settings fields.
*/
function make_pickup_time_choice_mandatory( $settings ){
$updated_settings = array();
foreach ( $settings as $setting ) {
$updated_settings[] = $setting;
if ( isset( $setting['id'] ) && 'local_pickup_days_ahead' === $setting['id'] ){
$updated_settings[] = array(
'title' => 'Choix d\'une date obligatoire ?',
'desc' => 'Si vous ne proposez que le retrait en magasin, vous devriez cocher cette case. Sinon, pensez bien à prévenir vos clients qui choisissent le retrait en boutique qu\'ils doivent penser à indiquer un créneau pour passer chercher leur commande.',
'id' => 'local_pickup_pickup_date_mandatory',
'type' => 'checkbox',
);
}
}
return $updated_settings;
}
/**
* Process the checkout
*/
function my_not_mandatory_custom_field_process() {
global $woocommerce;
// Check if mandatory
$required = get_option( 'local_pickup_pickup_date_mandatory' );
// Check if mandatory and set, if its mandatory and not set add an error.
if ( 'yes' === $required && ! $_POST['local_pickup_time_select'] ) {
wc_add_notice( __( 'Please select a pickup time.', 'woocommerce-local-pickup-time' ), 'error' );
}
}
/**
* Add the local pickup time field to the checkout page
*
* @param object $checkout The checkout object.
*/
function my_not_mandatory_custom_time_select( $checkout ) {
$required = get_option( 'local_pickup_pickup_date_mandatory' );
echo '<div id="local-pickup-time-select">';
$lpt = Local_Pickup_Time::get_instance();
woocommerce_form_field(
'local_pickup_time_select',
array(
'type' => 'select',
'class' => array( 'local-pickup-time-select-field form-row-wide' ),
'label' => __( 'Pickup Time', 'woocommerce-local-pickup-time' ),
'required' => ( 'yes' === $required ? true : false ),
'options' => method_exists( $lpt, 'build_pickup_time_options' ) ? $lpt->build_pickup_time_options() : $lpt->get_pickup_time_options(),
),
$checkout->get_value( 'local_pickup_time_select' )
);
echo '</div>';
}
/**
* Hide the time select field if an other delivery method is choosen on checkout page
*
* @param object $checkout The checkout object.
*/
function hide_local_pickup_time_select() {
// Is the time select field required ?
$required = 'yes' === get_option( 'local_pickup_pickup_date_mandatory' ) ? true : false;
// If it's not required and we are on checkout page
if ( is_checkout() && ! $required ) {
?>
<style>
/* Hide the menu by default */
#local-pickup-time-select{display:none;}
</style>
<script type="text/javascript">
// Wait for the page to be fully loaded
// @see https://wordpress.stackexchange.com/questions/342148/woocommerce-documentation-list-of-js-events
jQuery('body').on('updated_checkout',function(){
// Show the menu if the right delivery method is choosen
if(jQuery('#payment_method_cod').is(':checked')) jQuery('#local-pickup-time-select').show();
// Allow menu showing / hiding to take action depending of the delivery method choice
jQuery('#payment input[type=radio]').each(function(){
jQuery(this).change(function() {
// Show the menu if local pickup is selected
if ('cod' === jQuery(this).val()) jQuery('#local-pickup-time-select').show();
// Hide it if another method is choosen
else jQuery('#local-pickup-time-select').hide();
});
});
});
</script>
<?php
}
}
}
@cbdeee
Copy link

cbdeee commented Jun 22, 2021

Hello, which line of code is the one that is hiding the pop-up message "please choose the time for your pickup" that's showing (even when customer choose another method than pickup) ?

Thanks !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment