Ответы пользователя по тегу WordPress
  • Есть ли хорошие книги или курсы по разработке на WP?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Разработка веб-приложений на WordPress. 2-е издание
    https://bhv.ru/product/razrabotka-veb-prilozhenij-...

    К сожалению книжка не очень глубокая, много контента начального уровня
    Ответ написан
    Комментировать
  • Как универсально использовать шаблон для блока ACF Blocks и блока для Flexible content?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Антон, поделюсь своим решением, в котором не нужно дублировать переменные.

    Допустим, у меня есть группа acf-полей Hero. Я хочу использовать эти поля и в Flexible Content и в Гутенберге.
    Файл с версткой и вызовом полей, пусть находится в blocks/hero.php. Основная проблема тут в том, что Flexible Content использует get_sub_field(), а для работы Гутенберга по-умолчанию нужны get_field().

    Чтобы "обмануть" Гутенберг — я создаю еще одну группу полей. Пусть будет Hero Block. Группа очень простая, это репитер (пусть будет имя block) с одним полем типа clone, в котором указаны все поля из группы Hero. В настройках репитера стоит мин и макс 1 строка.

    При регистрации блока я указываю не render_template, а render_callback и создаю функцию в которой этот репитер будет вызываться. В итоге в functions.php следующая конструкция:

    Регистрация блока: (хук и проверку наличия ацф опустил)
    acf_register_block_type(array(
        'name'              => 'Hero',
        'title'             => __('Hero Block'),
        'description'       => __('A custom Hero block.'),
        'render_callback'   => 'block_hero',
        'category'          => 'formatting',
     ));

    Колбэк-функция:
    function block_hero() {
    	while (have_rows('block')): the_row();
    		get_template_part('blocks/hero');
    	endwhile;
    }
    Ответ написан
  • Как подтянуть файл с медиа-запросами через functions.php в WordPress?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Скорее всего дело в первом параметре 'media', попробуйте поменять на другое слово
    Ответ написан
    1 комментарий
  • Как добавить класс для ссылки в записи или странице из редактора?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Как компромисное решение -- сделать шорткод. Тогда в тексте будет выглядеть, например, так [csslink href="https://ya.ru"]Текст ссылки[/csslink]
    Ответ написан
    1 комментарий
  • Как сделать добавление слайдов в слайдер Wordpress?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Здравствуйте, записывал видео для решения похожей задачи: Бутстрап слайдер на ACF Pro (https://youtu.be/N1H_F-ycnKw). Принцип для других слайдеров такой же, по идее можно сделать и вариант на бесплатном ACF
    Ответ написан
    1 комментарий
  • Как добавить в админку wordpress вкладку для страниц?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Чтобы новый тип записи работал как страницы, а не как посты укажите в функции еще один параметр hierarchical => true. Подробнее: https://wp-kama.ru/function/register_post_type#hie...
    Ответ написан
    Комментировать
  • Мультиязычный сайт на WP?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Подскажите, а посты вы перевели на другие языки? Скорее всего в этом проблема. Когда включен Полиланг все динамические поля работают только в выбранном языке
    Ответ написан
  • Как в атрибут title автоматически подставлять текст из title страницы?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Попробуйте add_theme_support( 'title-tag' ); добавить в functions.php
    Ответ написан
    Комментировать
  • Как вывести значение массива в functions из ACF при регистрации шорткода?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Для начала посмотрите структуру массива, например так
    $pliusi = get_field('pliusi');
    print_r($pliusi);

    Получите в выводе строку примерно такого содержания: Array( key_1 => value1, key2 => some_value )

    После этого, обратиться к элементам массива, зная соответсвующие ключи
    echo  '<div class="pliusi">'.  $pliusi["key_1"] . '  ' . $pliusi["key2"]  .'</div>
    Ответ написан
  • Как вывeсти страницы worpress?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Здравствуйте. Попробуйте добавить в начало цикла setup_postdata($page); и не забудьте wp_reset_posdata(); после окончания цикла
    Ответ написан
    Комментировать
  • Как в Advanced Custom Fields вывести 3 ссылки через "Group"?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Здравствуйте, если у вас есть группа some_group с 3-мя полями first, second, third, то для вывода ссылок можно использовать следующий код:
    $some_group = get_field('some_group'); 
    //Переменная $some_group это ассоциативный массив, 
    //где ключ равен названию поля, а значение элемента массива 
    //равно значению внутри поля
    
    $link1 = $some_group['first'];
    $link2 = $some_group['second'];
    $link3 = $some_group['third'];


    Чтобы посмотреть структуру любого массива и понять как обращаться к его элементам я обычно использую
    print_r($some_array);
    Ответ написан
    Комментировать
  • Можно ли с одного основного шаблона подключать разные шаблоны по условию?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Здравствуйте, да такое возможно, надо только правильно подобать условные тэги (https://wp-kama.ru/id_89/uslovnyie-tegi-v-wordpres...). Единственный момент, я бы цикл WordPress разметил внутри основного шаблона и проверку бы делал внутри цикла.

    Несколько примеров
    <?php
      while ( have_posts() ): the_post();
       //Вывод постов на главной странице
       if ( is_home() ) { ... }
    
       //Вывод шаблона одной записи
       if ( is_single() ) { ... }   
    
      //Выбор шаблона для конкретной записи
      if ( $post->ID == 15 ) { ... }   
    
      //Выбор по шаблону страницы
      if ( is_page_template('my_page.php') ){ ... }
    
      endwhile;
    ?>
    Ответ написан
    Комментировать
  • Как посадить многостраничный сайт на wordpress?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Здравствуйте, Дмитрий.
    Одно из простых решений — использовать шаблоны страниц. Чтобы создать новый шаблон страницы достаточно в теме создать новый php-файл и добавить в начале следующий код: <?php //Template Name: Название шаблона. Шаблон автоматически станет доступен для выбора при редактировании / создании страницы.

    Таким образом можно создать шаблоны для всех разделов многостраничного сайта. По умолчанию в WordPress у страницы только 2 основных поля для заполнения Заголовок и Контент. Но с помощью плагина Advanced Custom Fields можно добавить дополнительные поля, чтобы удобно было управлять контентом для разных шаблонов.
    Ответ написан
    9 комментариев
  • Как вывести данные нескольких пользователей полученных с помощью ACF?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    В предыдущем варианте у нас был массив с данными пользователя. Если пользователей указано несколько, то get_field вернет массив, каждый элемент которого является массивом. Для перебора элементов массива воспользуемся циком foreach. Получим следующий код:

    <?php 
       $current_user = wp_get_current_user(); 
       $managers = get_field('your_manager', 'user_' . $current_user->ID); 
    
       foreach($managers as $usermassive) {
          echo '<ul>';
            echo '<li>' . $usermassive['user_firstname'] . ' ' . $usermassive['user_lastname']  . '</li>';
            echo '<li>' . $usermassive['user_email'] . '</li>';
          echo '</ul>';    	
       }
    ?>
    Ответ написан
    Комментировать
  • Почему не работает редирект в вордпресс?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Чтобы редирект работал он должен вызываться до get_header(), возможно в этом проблема
    Ответ написан
  • Как скрыть некоторые значения из массива?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Здравствуйте.
    В вашем случае код должен выглядеть несколько по-другому

    <?php 
        $current_user = wp_get_current_user(); 
        $usermassive = get_field('your_manager', 'user_' . $current_user->ID); 
    
        echo '<ul>';
          echo '<li>' . $usermassive['user_firstname'] . ' ' . $usermassive['user_lastname']  . '</li>';
          echo '<li>' . $usermassive['user_email'] . '</li>';
        echo '</ul>';    	
    ?>

    Указанный код выведет в первой строке Имя и Фамилию и почту во втором элементе

    Если вам нужен логин, то конструкция будет сложнее, так как в $usermassive этих данных нет
    <?php
        $manager_id = $usermassive['ID'];
        $manager_data = get_userdata($manager_id);
        $manager_login = $manager_data -> user_login;
    Ответ написан
    6 комментариев
  • Как загрузить картинки WordPress не меняя пути в коде?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Здравствуйте, есть 2 варианта ответа на ваш вопрос.

    Первый вариант решения неправильный, но в точности отвечает на ваш вопрос. Допустим у вас все картинки расположены в папке images и в верстке прописаны относительный пути <img src="/images/image_1.jpg">, тогда можно разместить папку images в корне сайта и, по идее, должно заработать. Важно, это очень кривой способ, нет адекватных причин к нему прибегать.

    Второй вариант. Разделить картинки на 2 большие категории. Первая категория -- элементы верстки и дизайна, то без чего сайт не будет соответствовать дизайну (иконки, графические элементы и т.д.). Такие картинки -- нужно перенести в папку images вашей темы. Картинки, которые относятся к контенту -- придется загружать в медиа-библиотеку.

    Коллега выше предложил использовать функцию get_template_directory_uri(), c этой функцией все хорошо, но код получается громоздким, я обычно делаю обертку, добавляя следующую функцию в functions.php:
    function theme_image($image) {
      $image_url = get_template_directory_uri() . '/images/' . $image;
      echo  $image_url;
    }

    Код в верстке тогда становится лаконичным:
    <img src="<?php theme_image('image_1.jpg'); ?>">
    Ответ написан
  • Подключение скриптов в WordPress?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Здравствуйте. Здесь должны помочь условные теги WordPress в частности проверка на конкретную страницу или шаблон.

    Допустим, Слик слайдер нужен только на странице c шаблоном page-slider.php, тогда код будет выглядеть следующим образом:

    <?php
        add_action('wp_enqueue_scripts', 'mk_scripts', 'mk_scripts_slick');
        function mk_scripts() {
            wp_enqueue_style('mk-style', get_stylesheet_uri());
            wp_enqueue_script('mk_scripts', get_template_directory_uri() . '/assets/js/app.js', array(), null, true);
    
            if (is_page_template('page-slider.php')):
              wp_enqueue_script('mk_scripts_slick', get_template_directory_uri() . '/assets/js/slick.js', array('jquery'), null, true);
            endif;
        };
    ?>
    Ответ написан
    Комментировать
  • Как в wordpress добавлять или редактировать элементы html?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Здравствуйте. Подобную можно решить с помощью плагина Advanced Custom Fields. В нем очень легко настроить интерфейс в котором вы бы могли задавать Value Option и Содержание каждого DIVа и привязать это к конкретной странице или шаблону.

    1) Устанавливаете плагин Advanced Custom Fields
    2) Создаете новую группу полей и привязываете ее к шаблону или конкретной странице
    3) Создаете нужные поля. Например вот так:
    value_1, option_1, content_1
    value_2, option_2, content_2
    ...
    value_n, option_n, content_n

    В интерфейсе редактирования страницы это будет выглядеть вот так:
    5ffb500be0337726131672.png

    4) В шаблоне страницы меняете статический код на html + вставки php
    Было:
    <select>
      <option value="moscow">Москва</option>
      <option value="piter">Санкт-Петербург</option>
      <option value="kazan">Казань</option>
    </select>
    <div class="moscow">Что-то о Москве...</div>
    <div class="piter">Что-то о Питере...</div>
    <div class="kazan">Что-то о Казани...</div>


    Стало:
    <select>
      <option value="<?php the_field('value_1'); ?>"><?php the_field('option_1'); ?></option>
      <option value="<?php the_field('value_2'); ?>"><?php the_field('option_2'); ?></option>
      <option value="<?php the_field('value_3'); ?>"><?php the_field('option_3'); ?></option>
    </select>
    <div class="<?php the_field('value_1'); ?>"><?php the_field('content_1'); ?></div>
    <div class="<?php the_field('value_2'); ?>"><?php the_field('content_2'); ?></div>
    <div class="<?php the_field('value_3'); ?>"><?php the_field('content_3'); ?></div>


    Специально не стал использовать циклы, чтобы изменения в коде были более наглядны. Функция the_field() позволяет вывести в шаблоне значения любого поля, заданного на странице.
    Ответ написан
    3 комментария
  • Как не в базовой странице wordpress сделать цикл для вывода постов?

    solidcreature
    @solidcreature
    WordPress-митапы в Москве (vk.com/wpmeetup)
    Здравствуйте. Тут есть несколько вариантов
    1) Если у вас статьи -- кастомный тип записи, например article, то в этом случае будет достаточно переименовать articles.php в archive-article.php. Вордпресс сам подхватит данный шаблон и будет его использовать для страницы вывода записей типа article.

    2) Если статьи у вас -- это обычные записи (post). То при условии, что внутри шаблона article.php вы используете цикл Вордпресса, то можно переименовать article.php в archive.php и записи будут выводиться с использованием вашего шаблона. Не забудьте в настройках сайта указать страницу вывода записей.

    3) Если варианты 1 и 2 вам не подходят. Тогда для вывода записей используйте класс wp_Query. Его синтаксис очень похож на стандартный цикл, но позволяет вывести именно то, что вам нужно в конкретном шаблоне.
    Подробнее о wp_Query на сайте wp-kama.ru
    Ответ написан
    Комментировать