Ответы пользователя по тегу WordPress
  • Как внести в базу WooComerce кастомные типы поста?

    @zordq Автор вопроса
    В системе WP невозможно переназначить тип продукта, но это было и не нужно.
    Мною был совершен экспорт через WP All Export моего кастомного набора полей для будущих товаров. Далее данный файл экспорта CSV я открыл в Google Sheets, так как Excel их ломает и для каждого нужного мне поля, которое должно быть перенесено я задал загловок, в виде meta:size -

    60b3d5d8efdd8282741270.png

    После чего, я создал еще один тип (либо можно переименовать старый) групп полей для, уже, товаров. С теми же "направлениями". После чего в базу товаров я импортировал мой файл с полями типа meta: и на этапе импорта мои поля автоматически подтянулись как мета-данные. Когда я закончил импорт, мои кастомные поля для типа "товар" уже были заполненые моими мета-данными и шаблон продукта подтянул при помощи the_field() нужные мне данные из полей, в которых уже новые данные из импорта для типа "товар".

    Все query() и loop() в моем проекте были рабочими, так как после удаления моего кастомного типа поста "projects", тип "товар" стал по умолчанию типом "post" и всё стало работать как прежде, только уже с учетом новых _id и данными для _price.
    Ответ написан
    Комментировать
  • Вывод конкретных записей post_type в цикле с учетом custom_fields?

    @zordq Автор вопроса
    Чтобы получить конкретные посты - делаем кастомные поля для id. Далее вводим id из urla и через get_field выводим их в нашем цикле, я использовал массив с данными и его вывод.

    Главное, что нужно использовать get_field, если будете использовать the_field - это вернет вам строку, а не массив.

    <?php
      $loop = new WP_Query([
      'post_type' => 'blogs',
      'post__in'  => [ get_field('id'), get_field('id_2'), get_field('id_3')]
      ]); ?>
      
      <?php while ($loop->have_posts()) : $loop->the_post(); ?>
        <div class="block__project blogs col-md-3 col-sm-12" style="width: 100%; height: 300px !important; padding: 0; position: relative; margin-bottom: 15px;">
          <span class="block__project_title blogs" style="position: absolute; top: 10px; bottom: auto; left: 10px; max-width: 480px;">
            <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
          </span>
          
          <div class="blogs__template" style="height: 100%; position: relative; text-align: right;">
            <div class="" style="z-index: 2; height: 100%; width: 100%; position: absolute; background: linear-gradient(90deg, rgba(218,223,225,1) 45%, rgba(255,255,255,0) 99%);"> </div>
            <div class="ellipsis" style="position: absolute; z-index: 3; top: auto; bottom: 50px; left: 20px; max-width: 500px; max-height: 140px; overflow: hidden; text-overflow: ellipsis;"><?php the_field('post_text'); ?></div>
            <img src="<?php the_field('post_avatar'); ?>" alt="" style="height: 100%;">
          </div>
          
        </a>
        <!-- <div class="blogs__text" style="position: absolute; left: 10px; bottom: 10px; color: #000; padding: 5px; background-color: #fff; display: flex; justify-content: center; align-items: center;">
        <?php the_field('post_text'); ?>
      </div> -->
    </div>
    <?php endwhile; ?>
    Ответ написан
    Комментировать
  • Как поместить цикл постов конкретной категории в общем виде вывода всех постов на страницу Wordpress?

    @zordq Автор вопроса
    Был сделан вывод категорий в отдельные секции методом -
    <?php
    /* Template name: Результаты */
    /* Template part for displaying posts */
    ?>
    
    <?php
    
    $count_items = -1;
    
    if ($query->have_posts()) {
        ?>
    <section>
        <h2>Филлеры</h2>
        <?php $query = new WP_Query(array('post_type' => 'catalog', 'category_name' => 'fillers', 's' => $_GET['_sf_s'], 'posts_per_page' => 8)); while ($query->have_posts()) : $query->the_post(); ?>
        <a href="<?php the_permalink() ?>">
        <div class="offer__item">
            <img src="<?php the_field('image'); ?>" alt="">
            <span class="category__span">Категория товара</span>
            <span><?php the_title(); ?></span>
            <div>
                <button>Заказать</button>
                <button>Информация</button>
            </div>
        </div>
    </a>
        <?php endwhile; wp_reset_postdata(); ?>
    </section>
    
    <section>
        <h2>Биоревитализанты</h2>
        <?php $query2 = new WP_Query(array('post_type' => 'catalog', 'category_name' => 'biorevitalizanty', 's' => $_GET['_sf_s'], 'posts_per_page' => 8)); while ($query2->have_posts()) : $query2->the_post(); ?>
        <a href="<?php the_permalink() ?>">
        <div class="offer__item">
            <img src="<?php the_field('image'); ?>" alt="">
            <span class="category__span">Категория товара</span>
            <span><?php the_title(); ?></span>
            <div>
                <button>Заказать</button>
                <button>Информация</button>
            </div>
        </div>
    </a>
        <?php endwhile; wp_reset_postdata(); ?>
    </section>
    
    <?php
    } else {
            echo "</br> Результатов не найдено :(";
        }
    ?>


    Спасибо @Антон Куликов.
    Ответ написан
    Комментировать
  • Отправка данных из кастомной корзины в Telegram?

    @zordq Автор вопроса
    Было сделано интересное решение. Далее "Осторожно костыль!".

    function displayCart() {
        var cartArray = shoppingCart.listCart();
        var output = "" + "<div ><input class='input-send' name='phone' value='' placeholder='Номер телефона' requaired>" + "<input class='input-send' name='name' value='' placeholder='Ваша почта' requaired>"  + "<button class='sendspan' type='submit'>Отправить заказ</button></div>";
        for (var i in cartArray) {
            output += "<div class='form-group'>"
                + "<img src=" + cartArray[i].name + ">"
                + "<div class='input-group'><button class='minus-item input-group-addon' data-name=" + cartArray[i].name + ">-</button>"
                + "<input name='mutch' type='number' class='item-count form-control' data-name='" + cartArray[i].name + "' value='" + cartArray[i].count + "' requaired>"
                + "<button class='plus-item btn input-group-addon' data-name=" + cartArray[i].name + ">+</button></div>"
                + "<div name='price' requaired>" + cartArray[i].total + "</div>"
                + "<button class='delete-item btn btn-danger' data-name=" + cartArray[i].name + ">×</button>"
                + "<p class='form-message'></p>"
                + "<div id='message'></div>"
                + "</div>"
                + "<input class='offer' name='offer[]' value='Артикул: " + cartArray[i].name + " | Количество: " + cartArray[i].count + " | Сумма: " + cartArray[i].total + "' requaired>"
                + "</div>";
        }
    
        $('.show-cart').html(output);
        $('.total-cart').html(shoppingCart.totalCart());
        $('.total-count').html(shoppingCart.totalCount());
    }


    В данную строку передавались данные из дивов нужных нам переменных. Формировался один инпут, который счастливо улетал в телеграм.

    + "<input class='offer' name='offer[]' value='Артикул: " + cartArray[i].name + " | Количество: " + cartArray[i].count + " | Сумма: " + cartArray[i].total + "' requaired>"
    Ответ написан
    2 комментария
  • Не работает AJAX плагина "Search & Filter" в поиске для custom_post_types в Wordpress?

    @zordq Автор вопроса
    Я идиот, забыл про wp_head().

    Мой Вам совет, не забывайте про wp_head()!
    Ответ написан
    Комментировать
  • Как использовать несколько слайдеров Bootstrap в цикле Wordpress?

    @zordq Автор вопроса
    Благодаря Eugene Chefranov, найдено решение.

    Присваивая к id-слайдера id-поста через -

    post-<?php the_ID(); ?>
    Ответ написан
    Комментировать
  • Навигация на кастомной странице постов Wordpress?

    @zordq Автор вопроса
    Решение нашёл такое. Подкрепляю скриншотами.5cec3f1539daa762829356.png

    Его нужно убрать и решение тут, да это хук. Подробнее по ссылке.

    // Удалим слэш на конце, если нужно. Если слэш есть в структуре ЧПУ, то он будет добавляться и к постоянным страницам.
    add_filter( 'user_trailingslashit', 'no_page_slash', 70, 2 );
    function no_page_slash( $string, $type ){
       global $wp_rewrite;
    
    	if( 'page' === $type && $wp_rewrite->using_permalinks() && $wp_rewrite->use_trailing_slashes )
    		$string = untrailingslashit( $string );
    
       return $string;
    }


    Далее - помог еще один блог.

    Пример страницы с кастомными постами.
    <?php
    
      $current_page = $_GET['page']; // текущая страница
      $post_type = 'projects'; // имя custom post type
    
      // если GET параметр пустой, то принимаем, что текущая страница равна 1
      if ( empty($current_page) ) {
        $current_page = 1;
      }
    
      // аргументы, передаваемые в запрос
      $args = array(
        'post_type'      => $post_type, // custom post type
        'posts_per_page' => 10,         // количество постов на одной странице
        'paged'          =>  $current_page,      // задаем номер страницы, которую хотим отобразить
      );
    
      $projects = new WP_Query( $args ); // отправляем запрос
    
      if ( $projects->have_posts() ) :
    
        while ( $projects->have_posts() ) : $projects->the_post(); ?>
    
          // здесь HTML разметка поста
    
        <?php endwhile; 
    
        // если максимальное количество страниц больше 1, то выводим пагинацию
        if ( $projects->max_num_pages > 1 ) : 
    
          // если это не последняя страница и не первая, то выводим ссылки на следующую и предыдущую страницу
          if ( $projects->max_num_pages > $current_page && $current_page > 1 ) : ?> 
    
            <a href="<?php prevlink($current_page) ?>">Предыдущая страница</a>
            <a href="<?php nextlink($current_page) ?>">Следующая страница</a>
    
          // если текущая страница является первой страницей, выводим только ссылку на следующую страницу
          <?php elseif ( $current_page == 1 ) : ?> 
    
            <a href="<?php nextlink($current_page) ?>">Следующая страница</a>
    
          // если текущая страница - это последняя страница, выводим ссылку только на предыдущую страницу
          <?php elseif ( $current_page == $projects->max_num_pages ) : ?> 
    
            <a href="<?php prevlink($current_page) ?>">Предыдущая страница</a>
    
          <?php endif;
    
        endif;
    
      endif;
    ?>


    + добавляем функцию
    <?php
      // ссылка на следующую страницу
      function nextlink($current){
          echo '?page=' . ($current + 1);
      }
    
      // ссылка на предыдущую страницу
      function prevlink($current){
          echo '?page=' . ($current - 1);
      }
    ?>


    И всё, наша пагинация приобретает вид - sitename.ru/projects?page=2
    5cec41a87c583758949359.png
    Ответ написан
  • Кастомный скелет поста Worpdress?

    @zordq Автор вопроса
    Добрый день, мною была решена поставленная задача. Благодаря azerphoenix и пробам, да ошибкам.

    Что было сделано, поэтапно.
    В functions.php Вашего проекта нужно зарегистрировать тип постов, который мы хотим использовать, поэтому пишем.

    add_action( 'init', 'register_post_types' );
    function register_post_types(){
    register_post_type('имя_вашего_типа_поста', array(
    'label' => null,
    'labels' => array(
    'name' => 'Проекты', // основное название для типа записи
    'singular_name' => 'Проект', // название для одной записи этого типа
    'add_new' => 'Добавить проект', // для добавления новой записи
    'add_new_item' => 'Добавление проекта', // заголовка у вновь создаваемой записи в админ-панели.
    'edit_item' => 'Редактирование проекта', // для редактирования типа записи
    'new_item' => 'Новый проект', // текст новой записи
    'view_item' => 'Смотреть проект', // для просмотра записи этого типа.
    'search_items' => 'Искать проект', // для поиска по этим типам записи
    'not_found' => 'Не найдено', // если в результате поиска ничего не было найдено
    'not_found_in_trash' => 'Не найдено в корзине', // если не было найдено в корзине
    'parent_item_colon' => '', // для родителей (у древовидных типов)
    'menu_name' => 'Проекты', // название меню
    ),
    'description' => '',
    'public' => true,
    'publicly_queryable' => null, // зависит от public
    'exclude_from_search' => null, // зависит от public
    'show_ui' => null, // зависит от public
    'show_in_menu' => null, // показывать ли в меню адмнки
    'show_in_admin_bar' => null, // по умолчанию значение show_in_menu
    'show_in_nav_menus' => null, // зависит от public
    'show_in_rest' => null, // добавить в REST API. C WP 4.7
    'rest_base' => null, // $post_type. C WP 4.7
    'menu_position' => null,
    'menu_icon' => null,
    //'capability_type' => 'post',
    //'capabilities' => 'post', // массив дополнительных прав для этого типа записи
    //'map_meta_cap' => null, // Ставим true чтобы включить дефолтный обработчик специальных прав
    'hierarchical' => false,
    'supports' => array('title','thumbnail'), // 'title','editor','author','thumbnail','excerpt','trackbacks','custom-fields','comments','revisions','page-attributes','post-formats'
    'taxonomies' => array(),
    'has_archive' => false,
    'rewrite' => true,
    'query_var' => true,
    ) );
    }


    Где add_action( 'init', 'register_post_types' ); действие инициализации функции регистрации типа поста, которая и приведена выше в коде.

    Далее ставим плагин для кастомных полей нашего поста.
    После чего в панеле управления CMS, появляется пункт с группой наших полей. Именуем группу, добавляем поля, у которых есть ярлык - имя самой строки \ поля, и имя - которое нужно для обращения к нашей верстке.

    В нашей верстке, где нужно то или иное значение или элемент из наших полей мы добавляем обращение через
    <?php the_field("имя_наших_полей") ?>.

    Создаем страницу с нашими постами, куда требуется вывод (каталог, например). В моем случае - это страница projects.php и в него пишем (далее идёт пример на основе моих данных, но интуитивно понятно):
    <?php
    /*
    * Template Name: Проекты
    */
    ?>
    
    <?php get_header(); ?>
    
    <?php
    
    /*
    * Получаем все посты
    * post_type - название нашего произвольного типа записей (идентификатор)
    * posts_per_page - количество получаемых записей
    * (в нашем случае стоит -1, это значит, что нужно получить все посты)
    */
    $projects = new WP_Query(array('post_type' => 'ваш_тип_постов', 'posts_per_page' => -1));
    
    ?>
    
    <div class="wrap">
    
    <!— Не забудьте в цикл добавить полученный объект постов $reviews —>
    <?php if ( $projects->have_posts() ) : while ( $projects->have_posts() ) : $projects->the_post(); ?>
    
    <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
    <div class="review-excerpt"><?php the_excerpt(); ?></div>
    <span>Цена проекта: <?php the_field("цена_проекта") ?></span>
    <span>Кол-во спален: <?php the_field('количество_спален') ?></span>
    
    <?php endwhile; ?>
    <?php endif; ?>
    
    </div>
    
    <?php get_footer(); ?>


    После чего в админке создаем страницу с шаблоном, который создали выше. Публикуем и видим цикл наших постов, то есть все посты, которые мы "попросили" вывести на странице. Постарался обратить внимание на все детали. Буду рад вопросам и замечаниям, если кто столкнется с подобным.
    Ответ написан
    Комментировать
  • Wordpress не подключает style.css?

    @zordq Автор вопроса
    Ответ написан
    Комментировать