Задать вопрос
Ответы пользователя по тегу WordPress
  • Метод разработки и обновления сайта?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Все зависит от организации работы в конкретной конторе и конкретного разработчика, но лично у меня работает следующий подход:
    1. Пишем начальное тз, минимальный необходимый перечень.
    2. Говнокодим на основание п1 по принципу - "сделать быстро и чтобы работало по тз".
    3. Пушим п2 в гит и разворачиваем сайт (или компонент на сайте).
    4. Записываем фидбэк о компоненте, что не работает, как хотелось бы чтобы работало итп. Если это не критические замечания (безопасность или что то основное не работает), то откладываем изменения на месяц, квартал или год.
    5. При накопление критической массы замечаний в п4 (ну или у Вас просто не осталось задач на настоящий момент) - добавляем рефакторинг п3 в очередь задач.
    6. Повторяем 3-6 пункты до бесконечности.

    При данном режиме работы решается сразу 3 задачи:
    - Не требуется детальное тз на старте, в котором все равно не удастся предвидеть все наперед, соответственно сокращается общее время разработки и его стоимость.
    - Сайт или компонент сайта выпускается в релиз очень быстро, а значит решает задачу бизнеса так же быстро.
    - Прозрачный и прогнозируемый по срокам и стоимости режим релизов.

    Важное уточнение!

    Схема с минимальным ТЗ и говнокодом работает лишь с теми заказчиками, которым Вы подробно разъяснили, почему сроки и стоимость ниже, почему за каждую "хотелку" не указанную в тз придется доплачивать, и почему необходим рефакторинг.

    Идеальный вариант, донести до заказчика мысль, что проект будет требовать постоянного финансирования (в определенном ежемесячном объеме) на разработку новых или рефакторинг старых компонентов. В таком случае у Вас всегда будет под рукой разработчик, который сможет оперативно и за привычную стоимость решить поставленную задачу, который уже привык работать в таком режиме и ему не нужно лишний раз объяснять одно и то же.
    Ответ написан
    Комментировать
  • Как лучше создать мультиязычный сайт?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    Если сайт не большой, то лучше плагином. How to make multi language website wordpress. Для seo, url лучше сделать подпапками, например: site.com/en/page
    Ответ написан
    Комментировать
  • Как сделать условие внутри echo?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Так?
    $categories = get_categories([
        'taxonomy' => 'video',
        'orderby' => 'ID',
        'order' => 'DESC',
        'number' => '8',
    ]);
    
    foreach ($categories as $c) {
        $vQuality = get_field('video_quality', 'category_' . $c->term_id);
    
        if ($vQuality === '4K') {
            echo '<img src="/image2.jpg">';
        }
        
        elseif ($vQuality === '1080') {
            echo '<img src="/image3.jpg">';
        }
        
        else {
            echo '<img src="/image1.jpg">';
        }
    
        echo '<p>' . esc_html($c->name) . '</p>';
    }
    Ответ написан
    5 комментариев
  • Как продвинуть свой сайт на wordpress?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    Практически из любого сайта можно сделать образцово seo оптимизированный сайт (в обратную сторону это так же работает). Для начала начните с Гугла, затем задавайте более конкретные вопросы.
    Ответ написан
    1 комментарий
  • Как использовать одну страницу для вывода в разных частях сайта?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Ответ написан
    Комментировать
  • Почему не работает редактирование и добавление постов WordPress?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Используйте wp отладку, для выявления большинства проблем.
    Ответ написан
    1 комментарий
  • Как перенести лендинг на WordPress у которого НЕТ базы данных?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Может, сталкивались с подобным в своей практике?

    Конечно сталкивались, скорее всего заказчик "очень хотел сайт на wp" и готов был заплатить за дополнительные работы, и его не интересовало, что из админки сайт не будет редактироваться. Можно предпринять следующие шаги:
    1. Скопировать текущую лендинг-тему.
    2. Развернуть нулевый wp в нужном месте.
    3. Перенести п1. на п2. и активировать тему.
    НО у сайта банально нет базы данных, та база, которая указана у него в wp-config, не числится среди баз данных на нашем хостинге, да и лендингу без разницы, если вписать что-то другое. При этом, если после юрла прописать что-либо ещё, например wp-admin или даже index.php, то сайт всё-таки вспоминает про отсутствие БД и закономерно выдаёт ошибку. CSS и картинки подтягиваются из /wp-content/themes/имясайта, плагины из /wp-content/plugins/, как положено. Странно, ну да ладно. Работает и работает.

    Скорее всего тема сверстана не классическим образом, а как обычный html (php) шаблон без wp-специфичного кода, соответственно запросов к бд так же не формируется.
    Ответ написан
    Комментировать
  • Как добавить условие, чтобы в 1 товаре из категории показать кнопку?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Если я правильно понял задачу (с учетом комментариев), то так?
    $productId = $post->IDp;
    
    // Кнопка только для товара с id 534 + marketing-materials
    if (is_object_in_term($productId, 'product_cat', 'marketing-materials')) :
        
        if ($productId == 534) :
            echo '<a>Купить</a>';
        endif;
    
    // Кнопка для всех остальных товаров
    else :
        echo '<a>Купить</a>';
    endif;
    Ответ написан
  • Как составить GET-запрос, получающий записи из термина таксономии?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Как через GET-запрос получить все записи принадлежащие к этому термину?

    Согласно документации, запрос должен выглядеть так:

    $array = [
    'tax_query' => [
    [
    'taxonomy' => 'some_taxonomy',
    'field' => 'slug',
    'terms' => 'some_term'
    ]
    ]
    ];

    Начнем с того, что GET запрос к WP по Вашей задаче выглядит так:
    https://site.ru/wp-json/wp/v2/posts?taxonomy=taxonomy_name&term=term_name

    Теперь определитесь, Вам необходим GET или WP_Query запрос?
    Ответ написан
  • Блочный сайт сверстать с уникальным дизайном, как лучше организовать редактирование текста конечным пользователем?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    сделать небольшой блочный сайт

    Что Вы подразумеваете под "блочным" сайтом?
    Сейчас попросили сделать небольшой блочный сайт с готовым дизайном. Я его сверстала.

    Теперь необходимо его натянуть на wp.
    Как лучше организовать редактирование текстов для конечного пользователя?

    Для редактирования - гутенберг, элементор или условно "без редактора" (при отключение гутенберга). Контент на странице выводится классическим образом.
    Ответ написан
    Комментировать
  • Почему мой сайт не индексируется?

    Mike_Ro
    @Mike_Ro Куратор тега Поисковая оптимизация
    Python, JS, WordPress, SEO, Bots, Adversting
    По моим наблюдениям, последний год гугл индексирует ру и бел сегмент очень медленно. Для одного из моих сайтов потребовалось 6 месяцев, чтобы пошла индексация.
    Ответ написан
    1 комментарий
  • Если это то покажи это, а если нет, то вот это, как в Wordpress?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    <?php
    
    $field_value = get_field('название-поля');
    
    if ($field_value): ?>
      <p><a href="<?php echo esc_url($field_value); ?>">СсылкО</a></p>
    <?php else: ?>
      <p>Не заполнено...</p>
    <?php endif; ?>
    Ответ написан
    Комментировать
  • PHP Fatal error: Uncaught Error: Call to undefined function WP_CLI\Utils\check_proc_available() - при вызове с сайта?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    WP_CLI используется для работы через консоль и либо не поддерживает веб запросы, либо поддерживаем их с ограничениями.

    Используйте в плагине выборку из БД без WP_CLI, например:
    global $wpdb;
    $data = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}table", ARRAY_A);
    file_put_contents($path . '/' . $this->backup_filename . '.json', json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
    Ответ написан
    3 комментария
  • Почему не получается вывести шорткод в шаблоне Wordpress?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Вариант с экранированием:
    <?php echo do_shortcode( '[gridmaster grid_style="style-2" post_type="game" posts_per_page="10" orderby="date" order="DESC" content_from="excerpt" excerpt_type="characters" excerpt_length="15" show_read_more="yes" read_more_text="Скачать" grid_image_size="medium" grid_image_width="350" grid_image_height="200" link_thumbnail="no" link_thumbnail_to="post" show_filter="yes" filter_style="default" btn_all="no" taxonomy="category" hide_empty="1" multiple_select="no" toggle_filter_items="no" pagination_type="load_more" infinite_scroll="true" animation="true" heading_font_size=\'{"xs":"16px","sm":"18px","md":"20px","lg":"22px","xl":"24px"}\' grid_col_gap=\'{"xs":"30","sm":"30","md":"30","lg":"30","xl":"30"}\' grid_row_gap=\'{"xs":"30","sm":"30","md":"30","lg":"30","xl":"30"}\' grid_item_per_row=\'{"xs":"1","sm":"2","md":"3","lg":"3","xl":"3"}\' slider_args=\'{"arrows":"1","autoplaySpeed":"3000","infinite":"1","slidesToShow":{"xs":"1","sm":"2","md":"3","lg":"3","xl":"3"},"slidesToScroll":{"xs":"1","sm":"1","md":"1","lg":"1","xl":"1"}}\']' ); ?>

    Вариант с NOWDOC синтаксисом, как подсказал Ivan Ustûžanin:
    <?php echo do_shortcode( '[gridmaster grid_style="style-2" post_type="game" posts_per_page="10" orderby="date" order="DESC" content_from="excerpt" excerpt_type="characters" excerpt_length="15" show_read_more="yes" read_more_text="Скачать" grid_image_size="medium" grid_image_width="350" grid_image_height="200" link_thumbnail="no" link_thumbnail_to="post" show_filter="yes" filter_style="default" btn_all="no" taxonomy="category" hide_empty="1" multiple_select="no" toggle_filter_items="no" pagination_type="load_more" infinite_scroll="true" animation="true" heading_font_size=\'{"xs":"16px","sm":"18px","md":"20px","lg":"22px","xl":"24px"}\' grid_col_gap=\'{"xs":"30","sm":"30","md":"30","lg":"30","xl":"30"}\' grid_row_gap=\'{"xs":"30","sm":"30","md":"30","lg":"30","xl":"30"}\' grid_item_per_row=\'{"xs":"1","sm":"2","md":"3","lg":"3","xl":"3"}\' slider_args=\'{"arrows":"1","autoplaySpeed":"3000","infinite":"1","slidesToShow":{"xs":"1","sm":"2","md":"3","lg":"3","xl":"3"},"slidesToScroll":{"xs":"1","sm":"1","md":"1","lg":"1","xl":"1"}}\']' ); ?>

    Если использовать нормальную IDE, то она сообщит о возможных проблемах:
    67347946022ff024286243.png
    Ответ написан
    1 комментарий
  • Нормальная ли практика использовать ACF + встроенный редактор WordPress?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Нормальная. Если Вы соберётесь показывать превью поста (например), то Вам в любом случае придётся брать данные этого поста.
    Ответ написан
    Комментировать
  • Длительное время выполнения функции get_posts()?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Но появилась идея запрашивать не все посты, а в зависимости от нужной категории. Все существующие ~ 2000 постов разделить на категории. Будет ли такая реализация работать быстрее?

    Хорошая идея, конечно будет.
    Либо есть какие-то другие идеи?

    Не "либо", а "вместе" - почему бы не кэшировать выборку постов из БД (Transients API)?
    $cache = get_transient('all_posts_cache');
    
    if (!$cache) {
        $posts = get_posts([
            'numberposts' => -1,
            'orderby' => 'date',
            'order' => 'DESC',
            'post_type' => 'post-item',
    
            // Искать по слагу категории
            'category_name' => 'category_name',
    
            // Или искать по id категории
            // 'cat' => 123,
    
        ]);
    
        // Кэширование на 1 час
        set_transient('all_posts_cache', $posts, HOUR_IN_SECONDS);
    
    }
    
    else {
        $posts = $cache;
    }
    Ответ написан
    Комментировать
  • Почему не работает такая конструкция тернарного оператора в WP?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    <header class="<?php echo (is_front_page()) ? 'black_bg' : 'white_bg'; ?>">
    Ответ написан
    Комментировать
  • Как правильно передать проект Wordpress?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    или будет достаточно только самой папки находящаяся в themes

    Если Вы собираетесь передать лишь вёрстку натяную на wp (php файлы темы), то да, можно передать тему из директории /wp-content/themes.

    Если же проект не ограничивается wp версткой, то не рекомендую так делать, т.к. многий функционал находится в плагинах и их настройках, которые Вы таким образом не перенесете. В таком случае, лучше забэкапить все файлы проекта + бд и передать этот .jar (например) заказчику. Для этого удобно использовать плагины Duplicator или Akeeba.
    Ответ написан
    Комментировать
  • Как правильно выбрать файл шаблона в зависимости от урла?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Неужели в Вордпрессе нет возможности задать файл-шаблон любому урлу и я должен использовать вариант с index.php?

    Есть возможность, можно использовать функцию add_rewrite_rule() вместе с хуком template_include:
    function test_rewrite_rule(): void {
        add_rewrite_rule('^catalog/?$', 'index.php?catalog_page=1', 'top');
    }
    
    add_action('init', 'test_rewrite_rule');
    
    function test_query_var($vars) {
        $vars[] = 'catalog_page';
        return $vars;
    }
    
    add_filter('query_vars', 'test_query_var');
    
    function test_include_catalog($template) {
        if (get_query_var('catalog_page')) {
            $new_template = locate_template(['catalog.php']);
            if ('' != $new_template) {
                return $new_template;
            }
        }
        return $template;
    }
    
    add_filter('template_include', 'test_include_catalog');

    Затем, создаем шаблон catalog.php в теме, и когда пользователь перейдет по site.com/catalog/, wp будет использовать catalog.php, без необходимости создавать страницу.
    Ответ написан
    1 комментарий
  • Как просуммировать ячейку в постах wp?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Получить все опубликованные посты с нужным типом.
    2. Объявить счетчик.
    3. В цикле обойти п1, увеличивая при каждой итерации п2. на значение кастомного поля.
    4. Вывести значение на страницу.
    <?php
    function get_total_population() {
        $args = [
            // Заменить на свой тип постов
            'post_type' => 'city',
            'posts_per_page' => -1,
            'post_status' => 'publish',
        ];
    
        $query = new WP_Query($args);
        $sum = 0;
    
        if ($query->have_posts()) {
            while ($query->have_posts()) {
                $query->the_post();
                // Заменить на свое кастомное поле
                $sum = get_post_meta(get_the_ID(), 'city_population', true) ?? 0;
                $sum += (int)$sum;
            }
    
            wp_reset_postdata();
        }
    
        return $sum;
    }
    
    // >Нужно вывести общую цифру населения по всем городам)
    echo 'Результат: ' . get_total_population();
    Ответ написан
    3 комментария