• Как перейти от ACF PRO на Gutenberg?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    ACF Pro помогает создавать блоки для Gutenberg с помощью PHP, это удобно и значительно ускоряет работу. Но если надо полностью отказаться от ACF Pro и использовать только Gutenberg, то придется запилить свои блоки (привет React) или же найти готовые, подходящие под ваши задачи.

    Впрочем, по некоторым блокам стоит выдохнуть и немного подумать - возможно стоит изменить свое мышление. К примеру, на ACF мы повторяющийся контент автоматом считаем рипитером и создаем соответствующие поля. А на Gutenberg часто repeater как таковой и не нужен - достаточно самого блока. Ведь создать несколько одинаковых блоков подряд в Gutenberg не составляет труда, это как бы встроено из коробки.

    Простой пример - блок testimonials. На ACF мы создаем обычно рипитер, в нем нужные поля которые будут повторяться, скажем - text, name, photo (текст отзыва, имя клиента и его аватар). А на gutenberg достаточно иметь блок testimonial с этими же полями, и просто вставить его X раз подряд - вот вам и повторяющиеся данные.
    Ответ написан
    Комментировать
  • Custom post type, как задать url на русском?

    @zudogav
    Скорее всего yoast тянет "doctors" из аргумента labels функции register_post_type.
    Ответ написан
    Комментировать
  • Как при отсутствии thumbnails в записи, выводить thumbnail заглушку?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ответ Вадим Кот полностью подходит, если надо в конкретном месте шаблона разово запилить. Но если это должно быть как стандартное поведение везде, где есть post thumbnails, а сторонний плагин ставить не хочется, то лучше написать свою функцию. У меня она среди прочих полезных лежит в mu-plugin'е, но можно и в functions.php:
    /**
     * Display native post thumbnail or a fallback image.
     *
     * @param  string  $size
     * @param  string  $attr
     */
    function the_post_thumbnail_fallback( $size = 'post-thumbnail', $attr = '' )
    {
    	if ( has_post_thumbnail() ) :
    		echo get_the_post_thumbnail( null, $size, $attr );
    
    	else :
    		$post_thumbnail_id = get_option( 'default_post_thumbnail' );
    
    		$html = wp_get_attachment_image( $post_thumbnail_id, $size, false, $attr );
    
    		/**
    		 * Filters the post thumbnail HTML.
    		 *
    		 * @param  string  $html  The post thumbnail HTML.
    		 * @param  int  $post_id  The post ID.
    		 * @param  string  $post_thumbnail_id  The post thumbnail ID.
    		 * @param  string|array  $size  The post thumbnail size. Image size or array of width and height values (in that order). Default 'post-thumbnail'.
    		 * @param  string  $attr  Query string of attributes.
    		 * @since 2.9.0
    		 */
    		echo apply_filters( 'post_thumbnail_html', $html, null, $post_thumbnail_id, $size, $attr );
    
    	endif;
    }

    В шаблонах просто используем эту функцию вместо the_post_thumbnail(), включая необходимые параметры (размер и тд):
    <header class="post-header">
        <h1 class="post-title">
            <?php the_title(); ?>
        </h1>
    
        <div class="post-thumbnail">
            <?php the_post_thumbnail_fallback(); ?>
        </div>
    </header>

    В самой функции the_post_thumbnail_fallback() обратите внимание на строчку
    $post_thumbnail_id = get_option( 'default_post_thumbnail' );

    Сама картинка загружена через медиабиблиотеку, ее ID хранится в wp_options. У меня это реализовано в настройках (как и в плагине, на который ссылается Вадим Кот), но можно захардкодить ID прямо в этой функции. HTML создается нативной wp_get_attachment_image(), идентично тому что создаст the_post_thumbnail() потому что она использует эту же функцию.

    Также здесь у нас сохранен фильтр post_thumbnail_html, с помощью которого сторонние плагины могут модифицировать html-код тега img - а это могут быть вполне полезные фичи - SEO, css-классы (например для lazyload), responsive и тд.
    Ответ написан
    Комментировать
  • Как отобразить количество фотографий в открытой галерее Nextgen Gallery (Wordpress)?

    mistype
    @mistype Автор вопроса
    Сам спросил, сам ответил) Оставляю решение вопроса, вдруг поможет кому-нибудь)))
    В общем, все очень просто:

    <?php
      global $wpdb;
      // Количество всех фото на сайте
      $imagescount    = intval( $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->nggpictures") ); 
      // Количество всех галерей на сайте
      $galleriescount = intval( $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->nggallery") ); 
      // Количество изображений в открытой галерее
      $total = $displayed_gallery->get_entity_count();
    ?>


    Ну и дальше "эхом" выводим, то что нужно будет.
    <?php echo $total; ?>

    Надеюсь, кто-то потратит меньше времени, чем я на это)) Я сутки точно убил))
    Ответ написан
    1 комментарий
  • Как сделать личный кабинет с услугами в WordPress?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Здравствуйте!
    мне нужно сделать функцию личного кабинета для каждого пользователя

    плагин Wp Recall для создания ЛК
    https://ru.wordpress.org/plugins/wp-recall/

    которые смогут регистрироваться сами по номеру телефона или по электронной почте.

    по эл. почте проблем нет, а вот, по номеру телефона с последующей отправкой смс для подтверждения - смотрите в сторону интеграции с АПИ стороннего сервиса.

    В личном кабинете нужны функции подачи заявок на подключении каких-либо услуг/ Должен быть какой-то список этих услуг со стоимостями и описанием. И чтобы потом эти заявки приходили определенному человеку на электронную почту или еще куда-нибудь.

    Кастомный тип записи + кастомные поля (ACF). Для самой формы можете использовать acf_form()
    https://ru.wordpress.org/plugins/advanced-custom-f...

    Так же в личном кабинете должны отображаться подключенные услуги, которые будут туда добавляться администратором.

    Все так же сводится к кастомным типам записей и к boolean вкл / выкл (+ дата подключения, дата исстечения)

    Если нужно оплату принимать сразу на сайте, то либо напишите платежный шлюз для выбранной платежной системы, либо вукомерц с выбранным плагином оплаты.
    Ответ написан
    Комментировать
  • Click добавить класс active и удалить?

    @MrColdCoffee
    web
    $("#menu-link").on("click", "button", function(){
        let is_active = false;
        
       if( $(this).hasClass('active') ){ is_active = true; }
        
       $("#menu-link button").removeClass('active');
       
     if(!is_active){  $(this).addClass('active');  }
    
    
        });
    Ответ написан
    6 комментариев
  • Wordpress меню активный класс для подменю?

    pLavrenov
    @pLavrenov
    Разработка сайтов
    Хуки меню почти на все случаи.

    wp_nav_menu([
        'theme_location' => 'top_left',
        'container'=> false,
        'items_wrap' => '<ul class="nav navbar-nav %2$s">%3$s</ul>',
        'menu_class' => '',
        'ul_class' => 'navbar-nav',
        'ul_child_class' => 'dropdown-menu',
        'li_class' => 'nav-item',
        'li_child_class' => 'nav-item',
        'a_class' => 'nav-link',
        'a_child_class' => 'nav-link',
    ]);


    ## Добавление стилей для стандартного меню
    add_filter('nav_menu_css_class', 'add_menu_list_item_class', 1, 3);
    function add_menu_list_item_class($classes, $item, $args) {
        if (property_exists($args, 'li_class') && !$item->menu_item_parent) {
            $classes[] = $args->li_class;
        }
        if (property_exists($args, 'li_child_class') && $item->menu_item_parent) {
            $classes[] = $args->li_child_class;
        }
        return $classes;
    }
    
    add_filter( 'nav_menu_link_attributes', 'add_menu_link_class', 1, 3 );
    function add_menu_link_class( $atts, $item, $args ) {
        if ( strpos( $atts['href'], home_url() ) === false ) {
            $atts['target'] = '_blank';
        }
        if (property_exists($args, 'a_class') && !$item->menu_item_parent) {
            $atts['class'] = $args->a_class;
        }
        if (property_exists($args, 'a_child_class') && $item->menu_item_parent) {
            $atts['class'] = $args->a_child_class;
        }
        return $atts;
    }
    
    add_filter( 'nav_menu_submenu_css_class', 'my_nav_menu_submenu_css_class', 1, 3);
    function my_nav_menu_submenu_css_class($classes, $args, $depth) {
        if (property_exists($args, 'ul_child_class')) {
            $classes[] = $args->ul_child_class;
        }
        return $classes;
    }
    Ответ написан
    Комментировать
  • Как вывести рубрики со статьями?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    $args = array(
    	'taxonomy' => 'category',
    	'hide_empty' => true, // не пустые
    	'exclude' => [1], // исключаем Без рубрики
    );
    
    $terms = get_terms( $args );
    
    if ( $terms ) {
    	foreach( $terms as $term ) {
    
    		$args =  array(
    			'posts_per_page' => 3, // по три поста
    			'post_type' => 'post', // тип записи "посты"
    			'post_status' => 'publish', // опубликованные посты
    			'tax_query' => array(
    				array(
    					'taxonomy' => 'category',
    					'field'    => 'id',
    					'terms'    => $term->term_id
    				)
    			)
    		);
    
    		$query = new WP_Query( $args );
    
    		if ( $query->have_posts() ) {
    
    			echo '<h2>' . $term->name . '</h2>';
    
    			while ( $query->have_posts() ) {
    				$query->the_post();
    				echo '<li>' . get_the_title() . '</li>';
    			}
    
    		} else {
    			// Постов не найдено
    		}
    
    	}
    }
    Ответ написан
    1 комментарий
  • Как вывести рубрики со статьями?

    tyoma_koder
    @tyoma_koder
    выводишь категории
    https://wp-kama.ru/function/get_categories
    для каждой категории получаешь записи, указав id категории
    https://wp-kama.ru/function/get_posts
    Ответ написан
    2 комментария
  • Как создать второй "single.php" в WP?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Шаблон: single-{post-type}.php
    Conditional tag: is_singular( 'post-type' );

    У the_permalink() нету таких функций.

    Каких "таких функций"? Эта функция получает объект WP_Post $post и собирает правильную ссылку.
    Ответ написан
    1 комментарий
  • Как сделать несколько Swiper Slider на странице?

    0xD34F
    @0xD34F
    Попробуйте заменить

    el: '.slidernav'

    на что-то вроде

    el: this.querySelector('.slidernav')

    Ну, то есть - найдите элемент пагинации текущего слайдера вместо того, чтобы указывать сразу все для всех.
    Ответ написан
    3 комментария
  • Select выбор option, открыть нужный select?

    @Aricus
    Есть два варианта. Первый - подгрузка по ajax по значениям из базы данных.
    Второй - создать все дочерние списки сразу. Тогда нужно в каждый дочерний список добавить data-атрибут со значением, равным value в option. При изменении родительского списка скрыть все дочерние и показать нужный.
    Спросите, если что-то непонятно.
    Ответ написан
    9 комментариев
  • Почему не работает svgSprite?

    serii81
    @serii81 Автор вопроса
    Я люблю phр...
    Наше ошибку, дело в том, что плагин называется gulp-svg-sprites, а я раньше установил gulp-svg-sprite, им и пользовался. Поэтому ничего и не происохдило. Теперь установил другой плагин, и все заработало.
    Ответ написан
    Комментировать
  • Wordpress contact form 7 отправка при выборе checkbox?

    vova87
    @vova87
    Разработка сайтов на wordpress
    1. создаете хук wpcf7_before_send_mail
    2. в нем определяете форму и какие данные заполнены.
    3. в зависимости от заполненных данных (телефон, телеграм, ватсап, email) выполняете нужное действиие.
    Ответ написан
    2 комментария
  • Как сделать плавающий placeholder contact form 7?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Обычно сначала я отключаю автоматическое создание параграфов вокруг полей
    add_filter('wpcf7_autop_or_not', '__return_false');


    Я добавляю некоторые элементы и классы в разметку
    <div class="form-group">[text* contact-name id:contact-name class:form-control class:input-text]<label for="contact-name">Name</label></div>
    <div class="form-group">[email* contact-email id:contact-email class:form-control class:input-text]<label for="contact-email">Email</label></div>
    <div class="form-group">[textarea contact-message x2 id:contact-message class:form-control class:input-text]<label for="contact-message">Message</label></div>
    <div class="form-submit">[submit class:gradient-btn class:btn-submit "Send Message"]</div>


    Стили
    .contact-form-wrapper .wpcf7 .form-group > label {
      position: absolute;
      top: 20px;
      left: 0;
      cursor: text;
      pointer-events: none;
      margin-bottom: 0;
      -webkit-transition: all 0.25s;
      transition: all 0.25s;
    }
    
    .contact-form-wrapper .wpcf7 .form-group.active > label {
      top: -5px;
      left: 2px;
      font-size: 16px;
      cursor: default;
    }
    Ответ написан
    6 комментариев
  • Как сделать плавающий placeholder contact form 7?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Решается с помощью :placeholder-shown

    Ответ написан
    2 комментария