• В ответ с севера приходит один пост при 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');
                    }
                }
            })
        });


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

    Надеюсь, что кому-то помогу этим решением :)
    Ответ написан
    Комментировать
  • Как сделать такое скругление?

    @doctor__23
    Скорее всего никак, потому что на background стоит картинка.

    Был бы bg-color (например, черный #000), то можно было бы сделать кнопку вот такой:

    button {
        width: 300px;
        height: 50px;
        background-color: #7c65ab;
        border: 10px solid #000;
        border-radius: 30px;
    }


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

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

    @doctor__23 Автор вопроса
    Вопрос закрыт. В разметке в теге stop, относящемуся к svg графике был аттрибут offset с пустым значением.
    6006efd07181f510400275.png
    Ответ написан
    Комментировать
  • Как можно при клике на кнопку выбрать option в select?

    @doctor__23 Автор вопроса
    https://ru.stackoverflow.com/questions/456549/%D0%...

    Вот в принципе рабочий вариант, но при таком выборе, не имитируется клик по выбранному option, и соответственно не применяется событие (выбор категории для отображения этих категорий в календаре).
    Ответ написан
    Комментировать
  • Как можно тег select сделать не раскрывающимся?

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

    Тегу select задал через CSS:
    display: inline;
    scrollbar-width: none;
    border: none;
    , а тегу option просто dislay:inline
    Ответ написан
  • Почему при обновлении страницы через ajax перестает работать Jquery?

    @doctor__23 Автор вопроса
    Вопрос решен.
    Весь код скопировал в тег script в HTML документ без события ready и все заработало:)
    Всем спасибо!:)
    Ответ написан
    Комментировать
  • Есть код для Gulpfile.js от более поздних версии Gulp, который не работает с синтаксисом Gulp 4 и выше. Есть ли те кто могли бы помочь разобраться?

    @doctor__23 Автор вопроса
    Вопрос решен, если кому инетерсно или может поможет, то вот конечный код, который получился для gulp <4.
    var gulp 			= require('gulp'),
    	sass 			= require('gulp-sass'),
        prefixer      	= require('gulp-autoprefixer'),
        cleanCSS       	= require('gulp-clean-css'),
        uglify         	= require('gulp-uglify'),
        imagemin       	= require('gulp-imagemin'),
        pngquant       	= require('imagemin-pngquant'),
        watch          	= require('gulp-watch'),
        rimraf         	= require('rimraf'),
        browserSync    	= require("browser-sync"),
        sourcemaps     	= require('gulp-sourcemaps'),
        mainBowerFiles 	= require('main-bower-files'),
        cache 			= require('gulp-cache'),
        reload         	= browserSync.reload;
    
    
    var path = {
        vendor: {
            js: 'app/js/',
            css: 'app/css/'
        },
        dist: { //Тут мы укажем куда складывать готовые после сборки файлы
            html: 'dist/',
            js: 'dist/js/',
            sass: 'dist/css/',
            css: 'dist/css/',
            img: 'dist/img/',
            fonts: 'dist/fonts/'
        },
        app: { //Пути откуда брать исходники
            html: 'app/*.html', //Синтаксис src/*.html говорит gulp что мы хотим взять все файлы с расширением .html
            js: 'app/js/*.js',//В стилях и скриптах нам понадобятся только main файлы
            sass: 'app/sass/*.sass',
            css: 'app/css/*.css',
            img: 'app/img/**/*.*', //Синтаксис img/**/*.* означает - взять все файлы всех расширений из папки и из вложенных каталогов
            fonts: 'app/fonts/**/*.*'
        },
        watch: { //Тут мы укажем, за изменением каких файлов мы хотим наблюдать
            html: 'app/**/*.html',
            js: 'app/js/**/*.js',
            sass: 'app/sass/**/*.sass',
            css: 'app/css/**/*.css',
            img: 'app/img/**/*.*',
            fonts: 'app/fonts/**/*.*'
        },
        clean: './dist'
    };
    
    var config = {
        server: {
            baseDir: "./dist"
        },
        notify:false
    };
    
    gulp.task('vendorJs:build', async function () {
        gulp.src( mainBowerFiles('**/*.js')) //Выберем файлы по нужному пути
            .pipe(gulp.dest(path.vendor.js)) //Выплюнем готовый файл в app
    });
    
    gulp.task('vendorCss:build', async function () {
        gulp.src( mainBowerFiles('**/*.css') ) //Выберем файлы по нужному пути
            .pipe(gulp.dest(path.vendor.css)) //И в app
    });
    
    gulp.task('html:build', function () {
        gulp.src(path.app.html) //Выберем файлы по нужному пути
            .pipe(gulp.dest(path.dist.html)) //Выплюнем их в папку build
            .pipe(reload({stream: true})); //И перезагрузим сервер
    });
    
    gulp.task('sass:build', function () {
        gulp.src(path.app.sass) //Выберем наш main.scss
            .pipe(sourcemaps.init()) //То же самое что и с js
            .pipe(sass()) //Скомпилируем
            .pipe(prefixer(['last 15 versions', '> 1%', 'ie 8', 'ie 7'], { cascade: true })) //Добавим вендорные префиксы
            .pipe(cleanCSS()) //Сожмем
            .pipe(sourcemaps.write())
            .pipe(gulp.dest(path.dist.css)) //И в build
            .pipe(reload({stream: true})); //И перезагрузим сервер
    });
    
    gulp.task('js:build', function () {
        gulp.src(path.app.js) //Найдем наш main файл
            .pipe(sourcemaps.init()) //Инициализируем sourcemap
            .pipe(uglify()) //Сожмем наш js
            .pipe(sourcemaps.write()) //Пропишем карты
            .pipe(gulp.dest(path.dist.js)) //Выплюнем готовый файл в build
            .pipe(reload({stream: true})); //И перезагрузим сервер
    });
    
    gulp.task('css:build', function () {
        gulp.src(path.app.css) //Выберем наш main.css
            .pipe(sourcemaps.init()) //То же самое что и с js
            .pipe(prefixer(['last 15 versions', '> 1%', 'ie 8', 'ie 7'], { cascade: true })) //Добавим вендорные префиксы
            .pipe(gulp.dest(path.dist.css)) //И в build
            .pipe(reload({stream: true})); //И перезагрузим сервер
    });
    
    gulp.task('image:build', function () {
        gulp.src(path.app.img) //Выберем наши картинки
            .pipe(imagemin({ //Сожмем их
                progressive: true,
                svgoPlugins: [{removeViewBox: false}],
                use: [pngquant()],
                interlaced: true
            }))
            .pipe(gulp.dest(path.dist.img)) //И бросим в build
            .pipe(reload({stream: true})); //И перезагрузим сервер
    });
    
    gulp.task('fonts:build', function() {
        gulp.src(path.app.fonts)
            .pipe(gulp.dest(path.dist.fonts))
            .pipe(reload({stream: true})); //И перезагрузим сервер
    });
    
    
    
    gulp.task('build', gulp.parallel('vendorCss:build', 'vendorJs:build',  'html:build', 'sass:build', 'js:build', 'css:build', 'image:build', 'fonts:build'));
    
    gulp.task('watch', function(event, cb){
        watch(path.watch.html, gulp.parallel('html:build'));
        watch(path.watch.sass, gulp.parallel('sass:build'));
        watch(path.watch.css, gulp.parallel('css:build'));
        watch(path.watch.js, gulp.parallel('js:build'));
        watch(path.watch.img, gulp.parallel('image:build'));
        watch(path.watch.fonts, gulp.parallel('fonts:build'));
    });
    
    gulp.task('webserver', function () {
        browserSync(config);
    });
    
    gulp.task('clean', function (cb) {
        rimraf(path.clean, cb);
    });
    
    gulp.task('clear', () =>
        cache.clearAll()
    );
    
    gulp.task('default', gulp.parallel('build', 'webserver', 'watch'));
    Ответ написан
    Комментировать