Как добавить пагинацию в свой виджет? Elementor.

I
На сайте с 02.11.2022
Offline
25
203
есть кто может помочь? Есть плагин мой который выводит каталог продуктов, но без пагинации. вот какой код используется в моем плагине для елементор:
<?php 
namespace Elementor;
 
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

// Download
class qqqqqqq {
 
   public function get_name() {
      return 'audio_product';
   }
 
   public function get_title() {
      return esc_html__( 'Audio Product', 'qqqqqqq' );
   }
 
   public function get_icon() { 
        return 'eicon-gallery-masonry';
   }
 
   public function get_categories() {
      return [ 'qqqqqqq-elements' ];
   }

   protected function _register_controls() {

      $this->start_controls_section(
         'audio_product_section',
         [
            'label' => esc_html__( 'Audio Product', 'qqqqqqq' ),
            'type' => Controls_Manager::SECTION,
         ]
      );
      
      $this->add_control(
         'category',
         [
            'label' => esc_html__( 'Category', 'qqqqqqq' ),
            'type' => Controls_Manager::SELECT2, 
            'title' => esc_html__( 'Select a category', 'qqqqqqq' ),
            'multiple' => true,
            'options' => tijarah_get_terms_dropdown_array([
               'taxonomy' => 'product_cat',
               'hide_empty' => false,
            ]),
         ]
      );

      $this->add_control(
         'ppp',
         [
            'label' => __( 'Number of Items', 'qqqqqqq' ),
            'type' => Controls_Manager::SLIDER,
            'range' => [
               'no' => [
                  'min' => 0,
                  'max' => 100,
                  'step' => 1,
               ],
            ],
            'default' => [
               'size' => 9,
            ]
         ]
      );

      $this->add_control(
         'order',
         [
            'label' => __( 'order', 'qqqqqqq' ),
            'type' => \Elementor\Controls_Manager::SELECT,
            'default' => 'DESC',
            'options' => [
               'ASC'  => __( 'Ascending', 'qqqqqqq' ),
               'DESC' => __( 'Descending', 'qqqqqqq' )
            ],
         ]
      );
          
          $this->add_control(
                'paginate',
                [
                    'label' => __( 'Pagination' ),
                    'type' => Controls_Manager::SWITCHER,
                    'default' => '',
                ]
            );

      $this->end_controls_section();

   }

   protected function render( $instance = [] ) {
 
      // get our input from the widget settings.
       
      $settings = $this->get_settings_for_display(); ?>
          

         
         <div class="download_items row justify-content-center">
            
            <?php
            $category = !empty( $settings['category'] ) ? $settings['category'] : 'All';

            $download = new \WP_Query( array( 
               'post_type' => 'product',
               'posts_per_page' => $settings['ppp']['size'],
               'order' => $settings['order'],
               'paginate' => $settings['paginate'],
               'tax_query'     => array(
                    array(
                        'taxonomy'  => 'product_cat',
                        'field'     => 'id', 
                        'terms'     => $category
                    )
                )
   ));
 

 
            /* Start the Loop */
            while ( $download->have_posts() ) : $download->the_post(); ?>       

               <!-- Item -->
               <div class="col-xl-4 col-md-6">
                  <?php get_template_part( 'template-parts/product-type/audio', 'item' ); ?>
               </div>


            <?php 
            endwhile; 
         wp_reset_postdata();
                 
         ?>
         </div>
                 

   <?php
   }
 
}



Plugin::instance()->widgets_manager->register_widget_type( new qqqqqqq );


Я Добавил этот код 

   $this->add_control(
                'paginate',
                [
                    'label' => __( 'Pagination' ),
                    'type' => Controls_Manager::SWITCHER,
                    'default' => '',
                ]
            );

и в меню админа появился выбор ставить пагинацию или нет. Но на деле пагинация не работает. какой код еще вставить чтобы она заработала?

.
На сайте с 18.03.2023
Offline
0
#1

Выводите-то как?

$args = array(
        'base'         => '/каталог/товар'/%_%',
        'format'       => 'page-%#%/',
        'total'        => ceil($count/$perpage), // $perpage - количество выводимых на странице товаров
        'current'      => $page,
        'mid_size'     => 2,
        'prev_text'    => '<i class="fas fa-angle-left" title="Предыдущая"></i>',
        'next_text'    => '<i class="fas fa-angle-right" title="Следующая"></i>',
);
<?=paginate_links($args);?>
I
На сайте с 02.11.2022
Offline
25
#2
.andrey. #:

Выводите-то как?

есть вот что еще,  elementor.php

<?php

if ( ! defined( 'ABSPATH' ) ) exit;


// get posts dropdown
function qqqqqqq_get_posts_dropdown_array($args = [], $key = 'ID', $value = 'post_title') {
  $options = [];
  $posts = get_posts($args);
  foreach ((array) $posts as $term) {
    $options[$term->{$key}] = $term->{$value};
  }
  return $options;
}

// get terms dropdown
function qqqqqqq_get_terms_dropdown_array($args = [], $key = 'term_id', $value = 'name') {
  $options = [];
  $terms = get_terms($args);

  if (is_wp_error($terms)) {
    return [];
  }

  foreach ((array) $terms as $term) {
    $options[$term->{$key}] = $term->{$value};
  }

  return $options;
}


function qqqqqqq_add_elementor_widget_categories( $elements_manager ) {

        $elements_manager->add_category(
                'qqqqqqq-elements',
                [
                        'title' => esc_html__( 'qqqqqqq Elements', 'qqqqqqq' ),
                        'icon' => 'fa fa-plug',
                ]
        );

}
add_action( 'elementor/elements/categories_registered', 'qqqqqqq_add_elementor_widget_categories' );

//Elementor init

class qqqqqqq_ElementorCustomElement {

   private static $instance = null;

   public static function get_instance() {
      if ( ! self::$instance )
         self::$instance = new self;
      return self::$instance;
   }

   public function init(){
      add_action( 'elementor/widgets/widgets_registered', array( $this, 'widgets_registered' ) );
   }


   public function widgets_registered() {

    // We check if the Elementor plugin has been installed / activated.
    if(defined('ELEMENTOR_PATH') && class_exists('Elementor\Widget_Base')){      
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-accordion.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-ajax-search.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-audio-products.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-banner.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-banner2.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-blog.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-button.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-counter.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-download.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-featured.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-newest.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-cta.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-partner.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-photo-products.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-pricing-woocommerce.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-pricing.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-products.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-infobox.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-team.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-testimonials.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-title.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-video-products.php');
         include_once(plugin_dir_path( __FILE__ ).'/widgets/widget-video.php');
      }
        }

}

qqqqqqq_ElementorCustomElement::get_instance()->init();
I
На сайте с 02.11.2022
Offline
25
#3
да вот я и не знаю как вывести( и как правильно код вставить и куда его правильно вставить
I
На сайте с 02.11.2022
Offline
25
#4
.andrey. #:

Выводите-то как?

$args = array(
        'base'         => '/каталог/товар'/%_%',
        'format'       => 'page-%#%/',
        'total'        => ceil($count/$perpage),        // $perpage - количество выводимых на странице товаров
        'current'      => $page,
        'mid_size'     => 2,
        'prev_text'    => '<i class="fas fa-angle-left" title="Предыдущая"></i>',
        'next_text'    => '<i class="fas fa-angle-right" title="Следующая"></i>',
);
<?=paginate_links($args);?>

этот код нужно вставить? как правильно и куда? 

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий