Ответы пользователя по тегу WordPress
  • Если это то покажи это, а если нет, то вот это, как в 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 комментарий
  • Как сделать тайтл записи в формате: Название - Рубрика?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Попробуйте так:
    add_filter('document_title_parts', 'test', 10, 1);
    
    function test($title) {
        if (is_single()) {
            $categories = get_the_category();
            if (!empty($categories)) {
                $title['title'] .= ' — ' . $categories[0]->name;
            }
        } elseif (is_category()) {
            $title['title'] = single_cat_title('', false);
        }
    
        return $title;
    }
    Ответ написан
    Комментировать
  • Как вывести определенный пост на страницу?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Ответ написан
    Комментировать
  • Как и откуда формируются страницы ?postID в wordpress?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    1. При переходе на https://easyvisavdk.ru/stranica-vizy/ - выдает пустую страницу, но с кодом 200.
    2. При переходе на https://easyvisavdk.ru/stranica-vizy/?postID=1238:
    2.1. Вначале сервер отдает страницу "Процесс оформления визы в Германию" (да да, мы загружали Мексику).
    2.2. Затем, происходит динамическая замена контента на Мексику. Для этого, в п2.1. предусмотрен div#usa_visa, который заменяется контентом в скрипте https://easyvisavdk.ru/wp-content/themes/visa-lend... на 189 строке. Данные запрашиваются из API WP по адресу https://easyvisainc.ru/wp-json/wp/v2/posts/1238.
    КартинкО

    66b0aaddb8e90296004489.png

    66b0ab0c45c81425402865.png

    Т.к. не видно самих постов в админке, то предположу один из вариантов:
    - Используется всего 1 страница со слагом stranica-vizy, где с помощью ACF полей созданы данные под каждую страну, которые потом динамически заменяют основной контент страницы.
    - Используется какой то CPT (Custom Post Types) со своими записями, тогда надо искать плагин, который взаимодействует с такими записями.
    - Данные зашиты в файлы, без возможности изменения из админки.

    P.S. SEO будет хромать!

    P.P.S. Точно нужно писать в консоль все данные о записи?
    КартинкО
    66b0ab4881c55369561823.png

    Ответ написан
    1 комментарий
  • Как посадить сайт созданный с помощью webpack на wordpress?

    Mike_Ro
    @Mike_Ro Куратор тега WordPress
    Python, JS, WordPress, SEO, Bots, Adversting
    Возможно ли это?

    Оо, это Вы по адресу, чего изволите?
    - Обычная статика без шаблонизатора.
    - Статика с шаблонизатором.
    - Статика с шаблонизатором и внедрением react.
    - React фронт без api.
    Как мне это сделать я очень сильно запутался и ничего не понимаю. Возможно ли это?

    Возможно, необходимо:
    1. Собрать статику.
    2. Перебить пути до изображений (если используется шаблонизатор).
    3. Срезать шапку и подвал у каждого html из п1.
    4. Конвертировать п1 и п3 в php файлы.
    5. Врезать wp/php код из п4.
    6. Врезать wp/php код с метатегами в header.php.
    7. (опционально) встряхнуть (tree-shaking) css и js файлы, вырезав весь не используемый код.
    8. (опционально) произвести оптимизацию статики, не только вес, но и размер изображений под разные размеры дисплеев устройств.
    Мне хочется посадить сайт созданный с помощью webpack

    Webpack не создаёт сайт, а собирает.

    Эта тема очень обширна, нужен более точный вопрос.
    Ответ написан
    5 комментариев