Ответы пользователя по тегу WordPress
  • Как вывести дополнительные поля из последних трех статей(или рандомно) на главную?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У ACF для вывода значений кастомных полей есть функции the_field(), get_field(). Обе функции принимают 2 параметра - ID поста и имя кастомного поля. Поэтому, ваша задача в первую очередь сводится к получению 3х постов, что очень просто:
    // параметры для получения постов
    $args = array(
        'numberposts' => 3,
        'orderby' => 'rand', // рандомные 3 поста, удалите строку если надо последние 3
    );
    // получаем массив постов
    $posts_array = get_posts( $args );
    // проходимся циклом по массиву постов
    foreach( $posts_array as $post ) {
        echo '<h1>'.$post->post_title.'</h1>';
        echo '<img src="'.get_field( $post->ID, 'custom_field_name' ).'">';
    }

    Второй echo выводит URL из кастомного поля в тег IMG, чтобы это работало, в настройках этого поля в ACF укажите в качестве return чтобы поле возвращало именно URL.
    Ответ написан
    8 комментариев
  • Как правильно отображать плагины-приложения?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Посмотрите в сторону фильтра template_include
    Ответ написан
    Комментировать
  • Wordpress. Как фильтровать посты по категориям, ajax?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Сейчас вы циклом выводите все посты (posts_per_page равен -1). То есть, все посты у вас уже есть, аякс по большому счету не нужен - достаточно просто прятать ненужные элементы. Чтобы определить какой пост в какой рубрике, необходимо в вывод поста добавить дополнительный атрибут, через который вы ее будете отлавливать. Например
    <?php $category = get_the_category(); // получить  ?>
    <a href="<?php the_permalink() ?>" rel="bookmark" data-category="<?php echo $category[0]->cat_name; ?>">
        <?php the_post_thumbnail('thumbnail'); ?>
    </a>

    Далее уже в javascript при клике на ссылку в фильтре берете ее имя из $(this), проходитесь с помощью each() по всем постам, скрываете те, у которых data('category') не равен имени категории.

    Еще раз, зачем аякс?
    Ответ написан
  • Вывод стилей в шапке темы?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Я вообще перед title ничего лишнего не увидел. А вот по качеству разметки соглашусь с faragly. Зачем, например, DD_belatedPNG fix? Это же технология десятилетней давности, давно утратившая свой смысл.
    Ответ написан
    Комментировать
  • Двухуровневое меню WordPress?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Читайте документацию wp_nav_menu(). Эта функция позволяет переопределить практически все элементы, их классы и айди. Если этого мало - используйте Walker класс, как уже подсказали.
    Ответ написан
    Комментировать
  • Как сделать разные single.php для AJAX вывода через шорткод, и остальных страниц?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    crazyASD: вам не нужно выводить аяксом весь индекс целиком. Есть 2 пути.

    Если вы используете вордпресовский аякс (через функцию, которая подключена на wp_ajax_ и/или wp_ajax_nopriv_, как положено) - тогда в этой функции получите нужный пост с помощью get_post() и отформатируйте как надо, результирующий хтмл отдайте с помощью wp_send_json_success().

    Если вариант 1 непонятен (хотя он правильный и корректный), если вы аяксом дергаете непосредственно урл индекса, вспомните, что аякс-запрос позволяет получать не только страницу по урл целиком, но и ее часть, если указать #element_id то будет получен только контент этого элемента.
    Ответ написан
    Комментировать
  • Как осуществить переход на внутреннюю html страницу?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Тема лежит не в корне относительно домена, а в папке /wp-content/themes/theme_name/
    Соответственно, если вы попытаетесь открыть domain.com/inside.html напрямую - получите 404, потому что такого файла по этому пути нет. У вас в этом месте (по этому пути) - wp-config.php, index.php вордпресовский и тд. Используйте адрес, который соответствует пути - domain.com/wp-content/themes/theme_name/inside.html - тогда откроется. Но это - через Ж. Хотите статические файлы - перенесите их в корень сайта. Хотите чтобы оставалось в папке темы, но открывалось напрямую - из статики делайте шаблоны, которые будет понимать WordPress.
    Ответ написан
    Комментировать
  • Возможно -ли позволить любому пользователю сайта создавать пост Custom Post Type (пост-анкета)?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вопрос старый, но может будущим поколениям будет полезно.
    Да, можно. Принимаете данные через POST со своей формы и используете функции
    wp_insert_post() / wp_update_post()
    add_post_meta() / update_post_meta()
    Ответ написан
    Комментировать
  • Реально ли сделать сайт хостела на WP?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Можно, без проблем. Но придется закатывать рукава и писать немного кастомного кода. Если с этим проблема - наймите разработчика. Кастомный код придется писать под любую CMS, кроме, разве что, специально заточенной под хостелы. А такую вы вряд ли найдете.
    Ответ написан
    Комментировать
  • Создание генерированных страниц Wordpress. Как запретить?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Откуда у вас вообще такие страницы? Цифры после названия - это произвольные цифры которые вы вписываете и видите при этом страницу interesnaya_stranica, хотя ожидали увидеть 404? Или это реальный ID страниц, который дописывается плагином или кастомными rewrite_rules?
    Ответ написан
  • Как выводить изменения из админки в публичную часть?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    У вас платный шаблон? Стучитесь в поддержку к разработчикам, вы именно за это заплатили деньги.
    Ответ написан
    Комментировать
  • WordPress галерея из общей папки Windows?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Надо загружать фотографии в медиа-библиотеку WordPress, чтобы получить возможность работать с ними внутри WP - генерить превью и другие размеры, добавлять описание, привязывать к постам, создавать галереи и тд. Та же галерея - это шорткод, который принимает перечисленные через запятую ID изображений в медиабиблиотеке.
    Ответ написан
    Комментировать
  • 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
    Ответ написан
    Комментировать
  • Как изменить отображения миниатюр в медиатеке 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.
    Ответ написан
    Комментировать
  • Как конвертировать базу данных 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 и тд. Если же все-таки хотите освоить эту сферу - начните последовательно изучать то, как правильно нужно работать с формами. Уроков в сети масса.
    Ответ написан
  • Почему нельзя просто переносить код в woocomerce и почему не работает так?

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

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Ответ написан
    Комментировать