Задать вопрос
Ответы пользователя по тегу WordPress
  • Как добавить условие, чтобы в 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 Куратор тега WordPress
    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;
    }
    Ответ написан
    Комментировать
  • Wordpress + QR агента. Как фиксировать лида от агента на базе WP?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Данные клиентов необходимо хранить (и взаимодействовать с ними) не на сайте, а в crm. Сайт должен лишь передавать эти данные в CRM, например:
    1. Проверяем url параметры на сайте и при обнаружение необходимых - пишем их в localStorage.
    2. При отправке формы, отправляем не только данные самой формы, но и добавляем значение из п1.
    2.1. Здесь имеем промежуточный бэк, который по идее должен принимать данные из п2 и по условию - отправить их в п3, а так же отправлять событие в сервис статистики (например, Яндекс Метрика), чтобы потом можно было фильтровать и таргетировать рекламу на определенную целевую аудиторию.
    3. В CRM получаем лид с нужным полем, по которому потом ищем/фильтруем/собираем статистику.
    Ответ написан
    9 комментариев
  • Почему не работает такая конструкция тернарного оператора в 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 комментария
  • Как более оптимизированно подгружать посты через кнопку "показать еще"?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Второе.
    за пагинацию отвечает уже php

    Не обязательно. JS может содержать цифру последнего загруженного поста, на основе этого делать расчет.
    минусы этого варианта в долгих wp-ajax запросах

    Кэширование никто не отменял.
    Ответ написан
    1 комментарий
  • Что это может быть?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Стили не подгрузились, возможно, пути до стилей не корректны.
    Ответ написан
    Комментировать
  • Перезд разных сайтов к одному провайдеру. Организация инфраструктуры?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Всего пока 4 сайта, на разных CMS (Wordpress, Joomla).

    1. С чего нужно начинать, чтобы подготовить сайт(ы) к переезду?

    Любой хостинг (shared с поддержкой MySQL и PHP) или VDS/DS.
    2. Что нужно подготовить на новом пустом сервере?

    Что такое "пустой сервер"? Если это VDS/DS, то гуглим, если это shared хостинг, то "создать сайты" (так обычно называется манипуляция у хостера, которая регистрирует место для расположения файлов для сайта) и MySQL БД для сайтов.
    3. Нужен ли для каждого сайта (их четыре) свой виртуальный сервер (VM)?

    Не нужен.
    Или как эти сайты вообще размещать чтобы в случае чего они не упали все вместе?

    Падение хостера достаточно редкое явление, чаще происходит дедос, который как раз и блокирует доступ к сайтам. Если критически важно, чтобы одновременно не легли все сайты, то нужны физически разные сервера и возможно, у разных хостеров.
    5. ... какие советы дадите

    Задавать более конкретные вопросы.
    Ответ написан
    Комментировать
  • Как создать и вывести текстовое поле в Carbon Fileds?

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

    Rich Text:
    use Carbon_Fields\Container;
    
    Container::make('post_meta', 'Наименование группы полей')
        ->where('post_type', '=', 'page') // условие, только для страниц
        ->add_fields([Field::make('rich_text', 'rich_text_field', '');

    и потом его вывести в шаблоне?

    Как вариант:
    $fields = apply_filters('fields_name', [], get_the_ID());
    echo esc_html($fields['rich_text_field'] ?? '') ?>
    Ответ написан
    1 комментарий
  • Как по api получать поля Carbon Fileds?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Все верно, CF по умолчанию не возвращает данные из своих полей (только имена полей). Чтобы CF возвращал данные, необходимо явно разрешить это для каждого созданного поля, например так:
    use Carbon_Fields\Field;
    
    Field::make('text', $key, $this->meta_labels[$key])
        ->set_visible_in_rest_api(true);
    Ответ написан
    1 комментарий