Ответы пользователя по тегу WordPress
  • В ответ с севера приходит один пост при ajax пагинации (показать еще), в чем проблема?

    @doctor__23 Автор вопроса
    В общем решил вопрос +/- вроде даже понял почему не работало, но
    то только теория :D

    Фишка в том, что я решил аргументы для WP_Query передать через ajax запрос, и сразу все нормально заработало, приведу свой код ниже:

    код в functions.php

    function the_keys_loadmore() {
    	$paged =  ! empty( $_POST[ 'paged' ] ) ? $_POST[ 'paged' ] : 1;
        $post_type = '';
    	$paged++;
    
        $args = array(
            json_decode( stripslashes( $_POST['query_vars'] ), true ),
        );
    
    
        foreach ($_POST['args'] as $key => $value) {
            if ($key === "paged") {
                $args[$key] = $paged;
            } else if ($key === "post_per_page") {
                $args[$key] = "1000";
            } else if ($key === "post_type") {
                $args[$key] = $value;
                $post_type = $value;
            } else {
                $args[$key] = $value;
            }
        }
    
        $posts = new WP_Query( $args );
    
        if( ! $posts->have_posts() ) {
            get_template_part( 'content', 'none' );
        }
        else {
            while ( $posts->have_posts() ) {
                $posts->the_post();
                get_template_part( 'template-parts/content',  $post_type);
            }
        }
    
        die;
    }


    Пару комментариев в переменной 'args', которую мы получили через $_POST, как раз лежат аргументы для WP_Query, через цикл записываю все занчения в свою переменную $args, которую потом передаю в WP_Query.

    PHP код в шаблоне:

    global $wp_query;
    
    $args = array(
        'post_type' => 'team',
        'orderby' => 'team_order',
        'meta_query' => array(
            array(
                'key' => 'team_order',
                'value' => array(1, 1000),
                'type' => 'numeric',
                'compare' => 'BETWEEN'
            )
        ),
        'order' => 'ASC',
        'post_status' => 'publish',
        'posts_per_page' => 6,
        'paged' => 1
    );
    $argsJson = json_encode($args);
    $team = new WP_Query($args);
    
    <?php if ($team->have_posts()) : ?>
                    <div class="team__list">
                        <?php while ($team->have_posts()) : $team->the_post();
                            get_template_part('template-parts/content', 'team');
                        endwhile; ?>
                    </div>
    
                    <?php 
                    
                    $paged = get_query_var('paged') ? get_query_var('paged') : 1;
                    $max_pages = $team->max_num_pages;
    
                    if ($paged < $max_pages) : ?>
                        <button
                                class="btn team__btn-more"
                                data-max_pages="<?= $max_pages ?>"
                                data-paged="<?= $paged ?>"
                                data-args='<?= $argsJson ?>'
                        >
                            Показать еще
                        </button>
                    <?php endif; ?>
    
                <?php else: ?>
    
                    Здесь пока пусто
    
                <?php endif; ?>


    Пару комментариев. Создал переменную $argsJson и передал в нее переменную $args, конвертнув при этом все в JSON. и передал переменную $argsJson в дата параметр на кнопке (важное примечание, если в дата параметр передавать JSON, то обязательно нужно оборачивать в одинарные кавычки, иначе JS не считает, что в этом жата параметре).

    И, наконец, JS код

    var button = $('.team__btn-more'),
            maxPages = button.data('max_pages'),
            args = button.data('args');
    
        button.on('click', function (e) {
            e.preventDefault();
    
            var parentList = $('.team__list'),
                paged = $(this).data('paged');
    
            var myData = {
                paged: paged, // номер текущей страниц
                action: 'loadmore', // экшен для wp_ajax_ и wp_ajax_nopriv_
                args: args,
                query_vars: the_keys.query_vars,
            }
    
            $.ajax({
                url: the_keys.ajaxurl,
                type: 'post',
                data: myData,
                beforeSend: function (xhr) {
                    button.text('Загружаем...');
                    button.addClass('disabled');
                },
                success: function (result) {
                    // console.log(result);
    
                    parentList[0].insertAdjacentHTML('beforeend', result);
    
                    paged++;
    
                    if( paged === maxPages ) {
                        button.remove();
                    } else {
                        button.text( 'Показать ещё' );
                        button.data('paged', paged);
                        button.removeClass('disabled');
                    }
                }
            })
        });


    Тут в целом нечего комментировать :)

    Надеюсь, что кому-то помогу этим решением :)
    Ответ написан
    Комментировать
  • Ошибка при смене вариации в WordPress/WooCommerce, нужна помощь, чтобы разобраться?

    @doctor__23 Автор вопроса
    Вопрос решен. При возникновении подобных ошибок проверяйте в первую очередь, как у вас подключен JQuery, как оказалось для нормального функционирования WP/WC он должен подключаться в head, а не перед закрытием body.
    Ответ написан
    Комментировать
  • Как можно тег select сделать не раскрывающимся?

    @doctor__23 Автор вопроса
    Сделал:)

    Тегу select задал через CSS:
    display: inline;
    scrollbar-width: none;
    border: none;
    , а тегу option просто dislay:inline
    Ответ написан