Monday 27 November 2023

Shipping option update on cart and checkout page using ajax

 


add_action( 'wp_footer', 'refresh_shipping_js' );

function refresh_shipping_js() {

    // Only on checkout

    if( is_checkout() && ! is_wc_endpoint_url() ):

    ?>

    <script type="text/javascript">

    jQuery( function($){

        if (typeof wc_checkout_params === 'undefined') 

            return false;


        var refresh = 'yes';


        $.ajax({

            type: "POST",

            url: wc_checkout_params.ajax_url,

            data: ({

                'action': 'updating_shipping',

                'refresh_shipping': refresh,


            }),

            success: function(response) {

                if( response === '1' ) {

                    $(document.body).trigger('update_checkout');

                    console.log('Success: '+response); // For testing (to be removed)

                } else {

                    console.log('Failled: '+response); // For testing (to be removed)

                }

            },

            error:function(error) {

                console.log('Error: '+error); // For testing (to be removed)

            }

        });

    });

    </script>

    <?php

    endif;

}


// function that gets the Ajax data

add_action( 'wp_ajax_updating_shipping', 'updating_shipping' );

add_action( 'wp_ajax_nopriv_updating_shipping', 'updating_shipping' );

function updating_shipping() {

    if ( isset($_POST['refresh_shipping']) && $_POST['refresh_shipping'] === 'yes' ){

        WC()->session->set('refresh_shipping', '1' );

    } else {

        WC()->session->set('refresh_shipping', '0' );

    }

    echo  WC()->session->get('refresh_shipping');

    die(); // Alway at the end (to avoid server error 500)

}


// Function that refresh session shipping methods data

add_action( 'woocommerce_checkout_update_order_review', 'refresh_shipping_methods', 10, 1 );

function refresh_shipping_methods( $post_data ){

    if ( WC()->session->get('refresh_shipping' ) === '1' ) {

        foreach ( WC()->cart->get_shipping_packages() as $package_key => $package ){

            WC()->session->set( 'shipping_for_package_' . $package_key, false );

        }

        WC()->cart->calculate_shipping();

    }

}

Thursday 14 September 2023

How to skip file when you update the wordpress plugin

function disable_plugin_updates( $value ) {

      if ( isset($value) && is_object($value) ) {

        if ( isset( $value->response['woocommerce/woocommerce.php'] ) ) {

          //unset( $value->response['woocommerce/woocommerce.php'] );

          unset( $value->response['woocommerce/templates/emails/email-order-items.php'] );

        }

      }

      return $value;

    }

    add_filter( 'site_transient_update_plugins', 'disable_plugin_updates' ); 

Sunday 30 July 2023

Backup and Restore MySQL database in PHP

 Script to backup using Php


<?php
define("BACKUP_PATH", "/home/abdul/");

$server_name   = "localhost";
$username      = "root";
$password      = "root";
$database_name = "world_copy";
$date_string   = date("Ymd");

$cmd = "mysqldump --routines -h {$server_name} -u {$username} -p{$password} {$database_name} > " . BACKUP_PATH . "{$date_string}_{$database_name}.sql";

exec($cmd);
?>

Script to restore

<?php

$restore_file  = "/home/abdul/20140306_world_copy.sql";
$server_name   = "localhost";
$username      = "root";
$password      = "root";
$database_name = "test_world_copy";

$cmd = "mysql -h {$server_name} -u {$username} -p{$password} {$database_name} < $restore_file";
exec($cmd);

?>

Wednesday 19 April 2023

Product gallery slider wordpress without plugin on single product page.

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/flexslider/2.7.0/flexslider.css">

<?php


global $product;


$columns           = apply_filters( 'woocommerce_product_thumbnails_columns', 4 );

$post_thumbnail_id = $product->get_image_id();

$wrapper_classes   = apply_filters(

    'woocommerce_single_product_image_gallery_classes',

    array(

        'woocommerce-product-gallery',

        'woocommerce-product-gallery--' . ( $post_thumbnail_id ? 'with-images' : 'without-images' ),

        'woocommerce-product-gallery--columns-' . absint( $columns ),

        'images',

    )

);


$attachment_ids = $product->get_gallery_image_ids();


if ( $attachment_ids && $product->get_image_id() ) { ?>

        <div class="<?php echo esc_attr( implode( ' ', array_map( 'sanitize_html_class', $wrapper_classes ) ) ); ?>" data-columns="<?php echo esc_attr( $columns ); ?>" style="opacity: 0; transition: opacity .25s ease-in-out;">

            <figure>

                <section class="slider">

                    <div id="slider" class="flexslider">

                        <ul class="slides">

                            <?php 

                            foreach ( $attachment_ids as $attachment_id ) {

                                $image_url = wp_get_attachment_url($attachment_id);

                            ?>

                                <li data-thumb="<?php echo $image_url; ?>">

                                    <img src="<?php echo $image_url; ?>" />

                                </li>

                            <?php } ?>

                        </ul>

                    </div>

                </section>

            </figure>

        </div>

<?php } ?>

<script src="https://cdnjs.cloudflare.com/ajax/libs/flexslider/2.7.0/jquery.flexslider.js"></script>

<script type="text/javascript">

    jQuery(window).load(function(){

        jQuery('.flexslider').flexslider({

        animation: "slide",

        controlNav: "none",

        start: function(slider){

            jQuery('body').removeClass('loading');

        }

    });

    });

</script>

Friday 31 March 2023

Reviews Tab always show on single product page.

     $args = array(

        'post_type'      => 'product',

        'posts_per_page' => -1

    );


    $loop = new WP_Query( $args );


    while ( $loop->have_posts() ) : $loop->the_post();

              global $product;

$product->set_reviews_allowed( 'yes' );

$product->save();

    endwhile;


    wp_reset_query();

Wednesday 29 March 2023

Update Custom Cart Count (or any HTML) after AJAX Add to Cart in WooCommerce

 

Template Code

Let’s say you’ve added an element in your header that displays the total cart count, like so:

<div class="header-cart-count"><?php echo WC()->cart->get_cart_contents_count(); ?></div>


add_filter( 'woocommerce_add_to_cart_fragments', 'iconic_cart_count_fragments', 10, 1 );

function iconic_cart_count_fragments( $fragments ) {
    
    $fragments['div.header-cart-count'] = '<div class="header-cart-count">' . WC()->cart->get_cart_contents_count() . '</div>';
    
    return $fragments;
    
}

Saturday 4 February 2023

Create Elementor duplicate pages with different name .

  $csvdata = csv_to_array('../city.csv');

foreach($csvdata as $key=>$csvrow){

if($key==1){

$postidd = get_post(13); 

$frontend = new \Elementor\Frontend();

$pagecontentorg = $frontend->get_builder_content_for_display( 13, $with_css = true );

//apply_filters('the_content', $postidd->post_content); 

$pagecontent = str_replace("problèmes",$csvrow['city'],$pagecontentorg); 

  $post_details = array(

  'post_title'    => 'testing page 5',

  'post_content'  =>$pagecontent,

  'post_status'   => 'publish',

  'post_author'   => 1,

  'post_type' => 'page',

  'page_template'  => 'elementor_header_footer'

   );

   wp_insert_post( $post_details );

/*echo '<pre>';

print_r($csvrow['city']);

echo '</pre>';*/

}

Friday 3 February 2023

Create duplicate pages with different name .

 $postidd = get_post(2457); 

$pagecontent = apply_filters('the_content', $postidd->post_content); 


  /*$post_details = array(

  'post_title'    => 'manjeet page',

  'post_content'  => $pagecontent,

  'post_status'   => 'publish',

  'post_author'   => 1,

  'post_type' => 'page'

   );

   wp_insert_post( $post_details );*/


function csv_to_array($filename='', $delimiter=',')

{

    if(!file_exists($filename) || !is_readable($filename))

        return FALSE;


    $header = NULL;

    $data = array();

    if (($handle = fopen($filename, 'r')) !== FALSE)

    {

        while (($row = fgetcsv($handle, 1000, $delimiter)) !== FALSE)

        {

            if(!$header)

                $header = $row;

            else

                $data[] = array_combine($header, $row);

        }

        fclose($handle);

    }

    return $data;

}


$csvdata = csv_to_array('../city.csv');

foreach($csvdata as $csvrow){

echo '<pre>';

print_r($csvrow['city']);

echo '</pre>';

}

Deletes all posts from "products" custom post type.

 /**

* Deletes all posts from "products" custom post type. */ function wpdocs_delete_all_products() { $myproducts = get_pages( array( 'post_type' => 'products') ); foreach ( $myproducts as $myproduct ) { // Delete all products. wp_delete_post( $myproduct->ID, true); // Set to False if you want to send them to Trash. } } add_action( 'init', 'wpdocs_delete_all_products' );

Tuesday 31 January 2023

Save One field data in option table.

 add_action('admin_menu','admin_menu_adding');

add_action('admin_init','admin_reg_settings');


function admin_menu_adding(){

    add_menu_page('Phone Number','Phone Number','administrator','mega-page','settings_page_test');

}


function settings_page_test(){

$phonenumber = get_option('phonenumber');

    ?>

<div class="wrap">

            <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>

    <form method="post" action="<?php echo admin_url('options.php'); ?>">

        <?php

        settings_fields('local-settings');

        do_settings_sections('local-settings');

        ?>

<input type="text" name="phonenumber" value="<?php echo $phonenumber; ?>" />

        <?php submit_button(); ?>

    </form>

</div>

    <?php

}


add_action('admin_action_trotbgo','save_value_here');


function save_value_here(){

    update_option();

    exit;

}


function admin_reg_settings(){

    register_setting('local-settings','phonenumber');

}