Friday, 20 January 2023

Infinite scroll for WordPress sites without plugin.

a). Short code callback function to display initial posts at WordPress active theme functions.php file. Ex : /wp-content/themes/twentyseventeen/functions.php


* initial posts dispaly
*/
function script_load_more($args = array()) {
    //initial posts load
    echo '<div id="ajax-primary" class="content-area">';
        echo '<div id="ajax-content" class="content-area">';
            ajax_script_load_more($args);
        echo '</div>';
        echo '<a href="#" id="loadMore"  data-page="1" data-url="'.admin_url("admin-ajax.php").'" >Load More</a>';
    echo '</div>';

}

1
2
3
4
/*
* create short code.
*/
add_shortcode('ajax_posts', 'script_load_more');

2: a). Create a callback function to to load posts at WordPress active theme functions.php file.Ex : /wp-content/themes/twentyseventeen/functions.php


/*
* load more script call back
*/
function ajax_script_load_more($args) {
    //init ajax
    $ajax = false;
    //check ajax call or not
    if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
        strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
        $ajax = true;
    }
    //number of posts per page default
    $num =5;
    //page number
    $paged = $_POST['page'] + 1;
    //args
    $args = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'posts_per_page' =>$num,
        'paged'=>$paged
    );
    //query
    $query = new WP_Query($args);
    //check
    if ($query->have_posts()):
        //loop articales
        while ($query->have_posts()): $query->the_post();
            //include articles template
            include 'ajax-content.php';
        endwhile;
    else:
        echo 0;
    endif;
    //reset post data
    wp_reset_postdata();
    //check ajax call
    if($ajax) die();
}

c).Create a ajax action hook to call “ajax_script_load_more” function to to load posts at WordPress active theme functions.php file. Ex : /wp-content/themes/twentyseventeen/functions.php



4
5
/*
* load more script ajax hooks
*/
add_action('wp_ajax_nopriv_ajax_script_load_more', 'ajax_script_load_more');
add_action('wp_ajax_ajax_script_load_more', 'ajax_script_load_more');


* enqueue js script
*/
add_action( 'wp_enqueue_scripts', 'ajax_enqueue_script' );
/*
* enqueue js script call back
*/
function ajax_enqueue_script() {
    wp_enqueue_script( 'script_ajax', get_theme_file_uri( '/js/script_ajax.js' ), array( 'jquery' ), '1.0', true );
}

a). Load posts when user clicks the Load More button



JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
jQuery.noConflict($);
/* Ajax functions */
jQuery(document).ready(function($) {
    //onclick
    $("#loadMore").on('click', function(e) {
        //init
        var that = $(this);
        var page = $(this).data('page');
        var newPage = page + 1;
        var ajaxurl = that.data('url');
        //ajax call
        $.ajax({
            url: ajaxurl,
            type: 'post',
            data: {
                page: page,
                action: 'ajax_script_load_more'
 
            },
            error: function(response) {
                console.log(response);
            },
            success: function(response) {
                //check
                if (response == 0) {
                    $('#ajax-content').append('<div class="text-center"><h3>You reached the end of the line!</h3><p>No more posts to load.</p></div>');
                    $('#loadMore').hide();
                } else {
                    that.data('page', newPage);
                    $('#ajax-content').append(response);
                }
            }
        });
    });
});




b).Load more posts as the user scrolls the page.



jQuery.noConflict($);
/* Ajax functions */
jQuery(document).ready(function($) {
    //find scroll position
    $(window).scroll(function() {
        //init
        var that = $('#loadMore');
        var page = $('#loadMore').data('page');
        var newPage = page + 1;
        var ajaxurl = $('#loadMore').data('url');
        //check
        if ($(window).scrollTop() == $(document).height() - $(window).height()) {
 
            //ajax call
            $.ajax({
                url: ajaxurl,
                type: 'post',
                data: {
                    page: page,
                    action: 'ajax_script_load_more'
                },
                error: function(response) {
                    console.log(response);
                },
                success: function(response) {
                    //check
                    if (response == 0) {
                        //check
                        if ($("#no-more").length == 0) {
                            $('#ajax-content').append('<div id="no-more" class="text-center"><h3>You reached the end of the line!</h3><p>No more posts to load.</p></div>');
                        }
                        $('#loadMore').hide();
                    } else {
                        $('#loadMore').data('page', newPage);
                        $('#ajax-content').append(response);
                    }
                }
            });
        }
    });
});


FINAL RESULT
PHP
1
2
3
<?php
echo do_shortcode('[ajax_posts]');
?>

Tuesday, 17 January 2023

Cart automatic update in wordpress, when quantity change.

 add_action( 'wp_footer', 'wv_cart_refresh_update_qty' ); 


function wv_cart_refresh_update_qty() {

    if (is_cart()) {

        ?>

        <script type="text/javascript">

         jQuery('div.woocommerce').on('change', 'input.qty', function(){

            setTimeout(function() {

                jQuery('[name="update_cart"]').trigger('click');

            }, 100 );

        });

        </script>

        <?php

    }

}

Sunday, 30 October 2022

How we can create search filter on same page

 <script>

     $("#search-text").keyup(function() {

    var str = $(this).val(); /* Get the value of the textbox */

const arr = str.split(" ");

for (var i = 0; i < arr.length; i++) {

    arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);


}

const str2 = arr.join(" ");

    $(".arm_download_wrapper").show(); /* Show all .subcat-item */

    $(".arm_download_description p").filter(function() { /* Filter all .item and hide*/

      return !$(this).text().includes(str2);

    }).parent().parent().hide();

  });

});    

</script>

We can make slider using multiple row.

<div class="slider">
<li>here</li>

</div>


 jQuery('.slider').slick({

        dots: true,

        infinite: true,

        draggable: true,

        speed: 500,

        slidesToShow: 3,

        slidesToScroll: 1,

        autoplay: true,

        autoplaySpeed: 2000,

        arrows: false,

        responsive: [{

          breakpoint: 600,

          settings: {

            slidesToShow: 1,

            slidesToScroll: 1

          }

        },

        {

           breakpoint: 400,

           settings: {

              arrows: false,

              slidesToShow: 1,

              slidesToScroll: 1

           }

        }]

    });

Friday, 29 July 2022

Create widgets in wordpress by codex.

 add_filter( 'use_widgets_block_editor', '__return_false' );

// Register sidebars by running tutsplus_widgets_init() on the widgets_init hook.

add_action( 'widgets_init', 'tutsplus_widgets_init' );


function tutsplus_widgets_init() {


    // First footer widget area, located in the footer. Empty by default.

register_sidebar( array(

'name' => __( 'First Footer Widget Area', 'tutsplus' ),

'id' => 'first-footer-widget-area',

'description' => __( 'The first footer widget area', 'tutsplus' ),

'before_widget' => '<div id="%1$s" class="widget-container %2$s">',

'after_widget' => '</div>',

'before_title' => '<h3 class="widget-title">',

'after_title' => '</h3>',

) );

}

Overrite wordpress template file using hooks.

    function my_plugin_custom( $template ) {

if( is_404() ){

        $template =  get_template_directory(). '/templates/404.php';

    }

return $template;

}

add_filter( 'template_include', 'my_plugin_custom' ); 

Error page redirect on 404 page.

 add_action( 'template_redirect', 'unlisted_jobs_redirect' );

function unlisted_jobs_redirect() {

if(is_404()) {

global $wp;

$link = home_url($wp->request);

$link_array = explode('/',$link);

$page_not_found = end($link_array);

if($page_not_found != 404) {

wp_redirect( home_url( '/404/' ) );

exit();

}

}

}        

Add custom text on product page.

 add_filter( 'woocommerce_cart_item_name', 'custom_text_cart_item_name', 10, 3 );

function custom_text_cart_item_name( $item_name, $cart_item, $cart_item_key ) {

        $item_name .= '<br /><div class="item-shipping-class">'Here is add some text'</div>';

    return $item_name;

}


Tuesday, 5 October 2021

Create tab using ajax in WordPress.

 Create ajax function : 

function passPortDateSave() {

global $wpdb;

  $code = explode("_",$_REQUEST['id']);

  if($code[0] == 'gform' ){

  $id= $code[1];

  echo do_shortcode("[gform id=$id]");

  }else{

   $id= $code[0];

   echo do_shortcode("[tableau_embade id=$id]");

  }

die();

}

add_action('wp_ajax_passPortDateSave', 'passPortDateSave');

add_action('wp_ajax_nopriv_passPortDateSave', 'passPortDateSave');


Create shortcode function 


function tab_with_parameter($attr){

 $tabtitle = explode(",",$attr['title']);

 $tabcode = explode(",",$attr['datacode']);

 

 if(!empty($_REQUEST['code'])){

  $code = explode("_",$_REQUEST['code']);

  if($code[0] == 'gform' ){

  $id= $code[1];

  echo "[gform id=$id]";

  }else{

   $id= $code[0];

   echo "[tableau_embade id=$id]";

  }

 }else{

 foreach($tabtitle as $key=>$att){

 echo '<a href="JavaScript:Void(0);" class="clickbtn button1 button" id="'.$tabcode[$key].'">'.$att.'</a>'; 

  }

  echo '<div id="loader" style="display:none;"><img src="https://flevix.com/wp-content/uploads/2019/07/Color-Loading-2.gif"/></div><div id="showtab"></div>';

 }

 

 echo '<style>

.button {

  border: none;

  color: white;

  padding: 0px 32px;

  text-align: center;

  text-decoration: none;

  display: inline-block;

  font-size: 16px;

  margin: 4px 2px;

  transition-duration: 0.4s;

  cursor: pointer;

}


.button1 {

  background-color: white; 

  color: black; 

  border: 2px solid #4CAF50;

}


.button1:hover {

  background-color: #4CAF50;

  color: white;

}


.clickbtn.active {

  background-color: #4CAF50;

  color: white;

}

</style>';

?>

<script>

jQuery(document).ready(function(){

var ajaxurl = '<?php echo admin_url( 'admin-ajax.php' ) ?>';

    jQuery(".clickbtn").click(function(){

    jQuery(this).siblings().removeClass('active');

    jQuery(this).addClass('active');

        //alert ('test');

jQuery('#loader').show();

        var data = {

            action: 'passPortDateSave',

            id: jQuery(this).attr('id')

        };

        jQuery.post(ajaxurl, data, function(response) {

//var datanew = '[contact-form-7 id="'+response+'" title="Contact form"]';

jQuery('#showtab').html(response);

jQuery('#loader').hide();

            //alert('Got this from the server: ' + response);

        });

    });    

});

</script>

<?php

}

add_shortcode( 'rascassettab' , 'tab_with_parameter' );