• Wp_query для кастомных типов записей?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    О боги! Такое ощущение, что все начинающие работать с WordPress учатся по одному какому-то старому уроку, написанному таким же начинающим. Сколько уже исписано - не используйте query_posts. Никогда!

    Если нужно получить 1 пост - get_post()
    Если нужно получить несколько постов вне контекста - get_posts()
    Если нужно модифицировать основной запрос - фильтр pre_get_posts
    Во всех остальных случаях - только WP_Query.

    В вашей ситуации, если нужно, например, на главной странице, где уже есть основной запрос, дополнительно вывести блок с кастомными записями (участники), делайте secondary loop с помощью WP_Query:

    $args = array(
        'post_type' => 'participants' // или как там он у вас называется
        'posts_per_page' => 5,
    );
    $participants = new WP_Query( $args );
    // дальше - loop
    if( $participants->have_posts() ) :
        while( $participants->have_posts() ) :
            $participants->the_post();
            // тут выводим пост
        endwhile;
    endif;
    wp_reset_postdata(); // возвращаем глобальные переменные к состоянию главного запроса


    Если же нужно вывести архив ваших участников - просто создайте шаблон archive-participants.php (вместо participants - ваше название custom post types).

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

    function my_modified_query( $query ) {
        // вместо is_home - проверяйте на соответствующий задаче шаблон
        // is_main_query - чтобы убедиться, что меняем именно основной запрос
        if ( $query->is_home() && $query->is_main_query() ) {
            $query->set( 'post_type', 'participants' );
            $query->set( 'posts_per_page', 20 );
        }
    }
    add_action( 'pre_get_posts', 'my_modified_query' );


    Судя по всему, английскую документацию вы либо не читали, либо сложно понять всю суть на английском. Есть отличный источник информации на русском: wp-kama.ru/function/wp_query
    Ответ написан
    Комментировать
  • Переход по id передачей параметров. Как сделать?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    +1 к "пример у вас в примере" от Андрей. Это Javascript. Весь код - в браузере, открываете консоль (F12) и изучаете, как это сделано. Если не можете понять с чего начать - еще один +1 к "учите JS". Без обид. Дело не в том, что нам ту лень объяснять, дело в том, что это требует определенного багажа знаний. Ну не бывает в таких ситуациях "нажать сюда, вставить вот это - и все работает" - это кастомный функционал. Ничего сложного для того, кто знает JS на среднем уровне, и одновременно - квантовая физика для новичка.
    Ответ написан
    Комментировать
  • Как сделать такую карусель?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ответ написан
    Комментировать
  • Ноутбук на Windows 8?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Подождите 2 недели, установите бесплатно Windows 10.
    Ответ написан
    Комментировать
  • Безопасно и правильно ли хранить какую-либо информацию в data-id атрибуте элемента?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Простой пример из жизни, прям вот вчера код дописан. Есть сайт, у юзеров авторизованных есть фронтенд и возможность заливать картинки, музыку и видео. Также, этот контент юзер может в любой момент удалить. На каждом объекте при наведении появляется иконка для удаления, по нажатию на нее на сервер аяксом уходит запрос и удаляет файл. Айдишка файла хранится как раз в data- артибуте. Если так топорно и оставить, это означает, что авторизованный пользователь может подменить ID на любую другую и удалить чужой файл, а это нехорошо. Посему на сервере мы не просто бездумно удаляем файлы, а еще делаем несколько проверок. Проверяем пользователя и его права на удаление данного типа контента, проверяем является ли он владельцем этого файла. Если все ок - удаляем. То есть, теоретически, он может удалять свои файлы путем подставления айдишек, ну и пусть забавляется. Но навредить другим он уже не сможет.
    Ответ написан
    6 комментариев
  • Как изменить отображения миниатюр в медиатеке Wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    WordPress использует несколько разных предустановленных размеров, вы также можете создавать свои. Для этого есть функции add_image_size(), remove_image_size(). Если вам нужно изменить именно формат thumbnail, нужно изменить опцию:

    add_action( 'after_setup_theme', 'my_theme_setup' );
    function my_theme_setup() {
        update_option( 'thumbnail_crop', 0 );
    }


    После этого нужно перегенерить все превьюшки. Например, плагином Ajax Thumbnail Rebuild.
    Ответ написан
    Комментировать
  • Из какой CMS картинка?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Картинка из Gravatar, как уже подсказали. Означает, что пользователь на Gravatar не зареган. Используется Gravatar в WordPress, возможно еще в каких-то CMS.
    Ответ написан
    Комментировать
  • Какую использовать программу для просмотра иконочных шрифтов?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Для неустановленных попробуйте NexusFont, MainType, Suitcase Fusion. Они же работают и с установленными.
    Ответ написан
    2 комментария
  • Как конвертировать базу данных MySQL сайта на Wordpress из utf8mb4_general_ci в utf8_general_ci?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вы шутите? VDS - это же виртуальный сервер, а не shared-хостинг. Одна из основных прелестей VDS/VPS - возможность установки нужного софта и его обновление до любых версий. Просто обновите MySQL. Если же на этом VDS у вас нет доступа для этого, то что это вообще за сервис такой? +1 к Дмитрий Энтелис - уходите оттуда.

    И еще хинт - если не будете переходить, а будете использовать обычную utf8 - отключите Emoji. Именно им нужна mb4 в первую очередь, а раз вы не будете их использовать - отключите их поддержку, чтобы WordPress не пихал вам в страницы ненужные скрипты и стили.
    Ответ написан
  • Почему не работает форма php?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    maks843: не будет так шаблон работать, WordPress не понимает, что это за шаблон. Почитайте Template Hierarchy. У вас форма принудительно уходит на mail.php и передает ей данные полей через $_POST. Именно в этом файле нужно проводить обработку формы. Или же, правильнее, для самой формы action указать пустой - тогда форма будет отправлять данные на ту же страницу, где она размещена (перезагрузка страницы по сути). Далее определите, какой шаблон эта страница использует и в нем уже добавляйте обработчик, только обязательно через проверку if( isset($_POST['name']) && isset($_POST['email']) && isset($_POST['message']) ). Кстати, у вас textarea в коде формы стоит без атрибута name, каким образом вы надеетесь эти данные получать? Также, у вас поле для Subject имеет тип type="subject" - такого не существует.

    Кроме того, ряд ваших IFов лучше переписать как тернарные операторы или if/else, unset делать не нужно. Ну и сами данные $_POST еще надо валидировать и фильтровать, у вас сейчас нет никакой защиты от передачи вредоносных данных.

    <div class="window-container fadeInDown animated">
    <button class="close">Закрыть</button>
        <h1>Напишите мне письмо</h1>
                <form action="" method="post">
                    <input class="first" type="text" name="name" placeholder="Имя" required><br>
                    <input class="first" type="email" name="email" placeholder="Email" required><br>
                    <input class="first" type="text" name="subject" placeholder="Тема"><br>
                    <textarea class="input textarea" name="message" placeholder="Сообщение" required></textarea><br>
                    <input type="submit" class="button" value="Отправить">
                </form>
    </div>


    if( isset($_POST['name']) && isset($_POST['email']) && isset($_POST['message']) ) {
    
        $name = sanitize_text_field( $_POST['name'] );
        $email = sanitize_email( $_POST['email'] );
        $subject = ( !empty($_POST['subject']) ) ? sanitize_text_field( $_POST['subject'] ) : 'Default subject';
        $message = sanitize_text_field( $_POST['message'] );
    
        $to = 'your@email.com';
        $headers = 'From: ' . $name . ' <' . $email . '>' . "\r\n";
        $send = wp_mail( $to, $subject, $message, $headers ); // returns true/false
    
        echo ( true == $send ) ? 'Success message' : 'Error message';
    
    }


    Проверку, заполнены ли все обязательные поля, надо делать javascript'ом, плюс у вас есть атрибут required, тут уже браузер убедится, что поля заполнены. Также, не мешало бы валидировать формат email еще до отправки данных на сервер (или использовать HTML5 тип input type="email").

    В общем, если честно, я не совсем понимаю, зачем вы пытаетесь вручную делать то, в чем пока еще смутно разбираетесь, вместо того, чтобы использовать один из сотни плагинов для форм обратной связи, которые уже учитывают безопасность, валидацию данных, обработку черех Ajax и тд. Если же все-таки хотите освоить эту сферу - начните последовательно изучать то, как правильно нужно работать с формами. Уроков в сети масса.
    Ответ написан
  • Какая CMS выдержит большую нагрузку?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Статические генераторы.
    2. WordPress как бекэнд + WP REST API + фронтэнд на каком-нибудь Angular.
    Ответ написан
    Комментировать
  • Какое будущее у конструкторов wix или ucos?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Пока будет жива ЦА, которой таких решений достаточно - будут жить. А ЦА будет всегда.
    Ну и, не стоит все же ставить Wix и Ucoz в одну линейку, это как мед и говно сравнивать :)
    Ответ написан
    Комментировать
  • Стараетесь ли вы использовать flex?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Используем по максимуму. Если есть требование под IE8-9, тогда нет, но такой проект обходится клиенту дороже. После недолгого объяснения с показом статистики IE8-9 vs Mobile Devices (плюс динамику роста последних) обычно удается убедить клиента, что не нужен ему IE8-9, а вот всякие современные плюшки, media-queries и тд - очень даже нужны.
    Ответ написан
    Комментировать
  • Почему нельзя просто переносить код в woocomerce и почему не работает так?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Потому что это вам не хтмл, а php, при чем это - шаблон, который подгружается в определенном месте, где доступны определенные переменные и их значения определены - функции в этом шаблоне зависят от этих значений и без них работать корректно не могут. А подобной копипастой, без учета контекста исполнения, вы вырываете с мясом из одного места, и вставляете непонятно куда. Для подобных ситуаций есть хуки и custom templates. Лучше опишите подробно задачу - что есть и что нужно сделать, тогда больше шансов, что сможем помочь.
    Ответ написан
  • Галерея для Wordrress с поп-апами?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ответ написан
    Комментировать
  • Можно ли получить ссылку на кнопку Send Message в LinkedIn?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Сразу отправить сообщение с вашего сайта в LikedIn точно не получится, а вот на страницу написания - вполне можно. Ссылка должна быть вида:

    https://www.linkedin.com/inbox/#compose?subject=&connId=ХХХХХХХХ


    Где ХХХХХХХХ - ID пользователя LinkedIn. Как видите, можно даже тему письма сразу установить.
    Ответ написан
    Комментировать
  • Как добавить свои кнопки соц сетей addthis в тему wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У AddThis есть родной плагин для WP, который все делает как надо. Установите и не страдайте.
    Ответ написан
  • Как сделать форму обратной связи wordpress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Если action у вас - send.php, то после нажатия на submit браузер уйдет на эту страницу, передав ей все заполненные поля в массиве $_POST. Вот его и надо в этом send.php обработать, обязательно очистить и экранировать, и отправить письмо с помощью функции wp_mail(). Поскольку send.php эту отдельный файл, который не является шаблоном темы, надо будет включить wp-header.php, или попросту воспользоваться стандартной функцией PHP - mail().

    Но это не совсем правильный путь. Есть и другие, более удобные варианты, а поскольку форма у вас в попапе, то лучше всего воспользоваться Ajax'ом. Пишете в functions.php функцию обработки массива $_POST и отправки письма, саму функцию хукаете в аяксовые экшны, далее с фронтенда отправляете javascript'ом данные на этот action, возвращаете результат json'ом и выводите в вашем попапе.

    Если все это звучит для вас слишком сложно - установите Contact Form 7, Ninja Forms или другой нормальный плагин для форм обратной связи, установите к нему расширение для работы формы в попапе и не морочьте себе голову.
    Ответ написан
    4 комментария