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

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    'has_archive' => true,

    - Для архивной страницы: /wp-content/themes/ваша-тема/archive-services.php
    - Для отдельной страницы: /wp-content/themes/ваша-тема/single-services.php
    'has_archive' => false,

    /wp-content/themes/ваша-тема/services.php
    Ответ написан
  • Как увеличить стоимость товара при помощи чекбоксов?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Использовать woocommerce и вариативный товар.
    Ответ написан
    Комментировать
  • Как сделать ссылку на полное изображение?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Попробуйте так (при необходимости, поправить регулярку и формирования нового тега):
    // functions.php or any plugin
    
    function test($content) {
        // Регулярка для поиска изображений
        $pattern = '/<img[^>]+src="([^"]+)"[^>]+>/';
        
        preg_match_all($pattern, $content, $m);
        if (isset($m[1])) {
            foreach ($m[1] as $i => $url) {
                // Получаем url "полного" изображения
                $full_url = preg_replace('/-\d+x\d+(\.\w+)$/', '$1', $url);
                
                // Изменяем стандартный <img/> на <a><img/></a>
                $r = '<a href="' . $full_url . '" target="_blank">' . $m[0][$i] . '</a>';
                $content = str_replace($m[0][$i], $r, $content);
            }
        }
        return $content;
    }
    
    add_filter('the_content', 'test');
    Ответ написан
    1 комментарий
  • Неизвестные скрипты на сайте (plupload и moxie). Для чего?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Это основные скрипты, которые входят в состав wp для обеспечения функциональности загрузки файлов:
    - plupload - загрузка файлов для wp.
    - moxie - расширение возможностей plupload.
    Ответ написан
  • Как реализовать индексацию страниц каталога с фильтрацией?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Поставить фильтр товаров, который сможет формировать get запрос. Соответсвенно, магазин должен отвечать на этот запрос и формировать выдачу с запрошенными товарами.
    2. Переписать шаблон поиска товаров так, чтобы он подставлял все необходимые данные в title, h1 и прочие важные seo элементы. Так же, переписать формирование микроразметки для более точечного отображения ссылки, рейтинга итп в поиске.
    3. Заранее создать маршруты из п1. так, чтобы они были доступны для индексации.
    4. Проследить, чтобы в меню и sitemap были проставлены ссылки на п3.

    Либо, воспользоваться плагинами, искать примерно так - woocommerce filtering with save url params (Premmerce WooCommerce Product Filter).
    Ответ написан
    Комментировать
  • Как переопределить класс в WP?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Наследованием и переопределением?
    class My_ReviewsListTable extends Automattic\WooCommerce\Internal\Admin\ProductReviews\ReviewsListTable {
        public function get_review_count($product_id) {
            $args = [
                'post_type' => 'product_review',
                'post_status' => 'publish',
                'meta_query' => [
                    [
                        'key' => 'custom_field',
                        'compare' => 'NOT EXISTS',
                    ],
                ],
                'fields' => 'ids',
            ];
    
    
            if($product_id) {
                $args['meta_query'][] = [
                    'key' => '_product_id',
                    'value' => $product_id,
                    'compare' => '=',
                ];
            }
    
            $query = new WP_Query($args);
            return $query->found_posts;
        }
    }
    Ответ написан
    1 комментарий
  • Я могу использовать модифицированную тему в интернете?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Я хочу отредактировать тему Вордпресса, распространяемую под лицензией GNU General Public License v2.
    Я могу использовать эту модифицированную тему для своего сайта в интернете? Как сделать это правильно, чтобы избежать юридических казусов?

    GPLv2 позволяет свободно использовать и изменять ПО, при условии, что вы также распространяете его под той же лицензией.
    Мне кажется, что использование модифицированной темы на сайте в интернете не является распространением, так ли это?

    Если Вы не предлагаете скачать или продать эту тему, то да.
    Ответ написан
    1 комментарий
  • Дожна ли быть папка wp-json в корне сайта (для работы с Rest API в Wordpress)?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Дожна ли быть папка wp-json в корне сайта (для работы с Rest API в Wordpress)?

    Нет.
    Перед этим установил и активировал соответствующий плагин

    Какой?
    Он выдает ошибку

    Ошибку покажите?
    Ответ написан
    Комментировать
  • Что за файл p.log?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Что это за файл? Откуда он?

    Похож на обычный лог файл, ничего криминального.
    Ответ написан
    Комментировать
  • Как правильно добавлять данные о кол-ве просмотров постов в базе данных WordPress?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Корректно ли это делать при каждом просмотре поста?

    Или тут зависит от посещаемости? Чем больше она, тем больше проблем от этого способа будет?

    Все верно, нагрузка на сервер/бд будет прямо пропорциональна посещаемости.
    Хотел узнать, каким образом правильно обновлять количество просмотров в БД.

    Или данные где-то сохраняются и в базу добавляются потом, а не так часто?

    Все верно, но зависит от нагрузки:
    - Малая нагрузка: делаем стандартным образом, при обновление поста - обновляем счетчик в бд.
    - Средняя нагрузка: обновляем код так, чтобы он мог использовать транзитное кэширование wp (set_transient()).
    - Большая нагрузка: используем внешние очереди (например redis или rabbitmq), данные с которых снимаем и пишем в бд раз в N сек/мин.
    Ответ написан
    Комментировать
  • Как вывести ссылку в echo через acf?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    $link_bc = get_field('link-bc');
    $bc = get_field('bc');
    
    echo '<a href="' . esc_url($link_bc) . '"><span class="breadcrumbs__current">' . esc_html($bc) . '</span></a>';
    Ответ написан
    Комментировать
  • Как изменить только главную страницу WordPress?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Подключение отдельного css файла для главной страницы, functions.php:
    function test() {
        if (is_home() || is_front_page()) {
            wp_enqueue_style('home-style', get_stylesheet_directory_uri() . '/path/to/style-from-home.css');
        }
    }
    
    add_action('wp_enqueue_scripts', 'test');
    Ответ написан
    2 комментария
  • Как создать небольшой Интернет Магазин без Woocommerce?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    преподаватель сказал, что нам нельзя использовать Woocommerce, Elementor для создания магазина.

    1. Создать 3 новых типа записей "Товар", "Категория товара" и "Корзина", с необходимыми полями.
    2. Написать php код, который будет добавлять товар в корзину, если кликнули на соответствующую кнопку.
    3. Наполнить тестовыми товарами и протестировать работу своего велосипеда.
    Подскажите, пожалуйста, как можно создать более менее рабочий магазин?

    и прочие функции типичного Интернет магазина.

    Я бы начал с ТЗ, а не реализации, т.к. слово "прочие функции" слишком широко трактуется.
    Не очень понимаю, как возможно реализовать "добавление товара в корзину"

    Пример работы через сессии:
    if (!session_id()) {
        session_start();
    }
    
    function test_session() {
        if (!session_id()) {
            session_start();
        }
    }
    
    add_action('init', 'test_session', 1);

    Функция добавление товара в корзину:
    function add_to_cart($id, $q = 1) {
        if (isset($_SESSION['cart'][$id])) {
            $_SESSION['cart'][$id] += $q;
        } else {
            $_SESSION['cart'][$id] = $q;
        }
    }

    Функция получения товаров из корзины:
    function show_cart() {
        if (!empty($_SESSION['cart'])) {
            foreach($_SESSION['cart'] as $id => $q) {
                $product = get_post($id);
                echo "<div>{$product->post_title} (x$q)</div>";
            }
        } else {
            echo "Cart has empty";
        }
    }
    Ответ написан
    Комментировать
  • Как реализовать две цены в карточках товаров (вариативных) в каталоге?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Примерно так:
    function test() {
        global $product;
    
        if($product->is_type('variable')) {
            $variations = $product->get_available_variations();
            echo '<div class="custom-variations-wrapper">';
    
            foreach($variations as $variation) {
                if(isset($variation['display_price'])) {
                    $variation_id = $variation['variation_id'];
                    $variation_price = $variation['display_price']; // or 'display_regular_price'
    
                    echo '<form action="' . esc_url($product->add_to_cart_url()) . '" method="post" enctype="multipart/form-data">';
                    echo '<div class="variation" data-variation-id="' . esc_attr($variation_id) . '">';
                    echo '<p class="price">' . sprintf(__('%s'), wc_price($variation_price)) . '</p>';
                    echo '<input type="hidden" name="product_id" value="' . esc_attr($product->get_id()) . '" />';
                    echo '<input type="hidden" name="variation_id" value="' . esc_attr($variation_id) . '" />';
                    foreach($variation['attributes'] as $attribute => $value) {
                        echo '<input type="hidden" name="' . esc_attr($attribute) . '" value="' . esc_attr($value) . '">';
                    }
                    echo '<button type="submit">' . __('В корзину') . '</button>';
                    echo '</div>';
                    echo '</form>';
                }
            }
    
            echo '</div>';
        }
    }
    
    add_action('woocommerce_after_shop_loop_item', 'test', 20);
    Ответ написан
    5 комментариев
  • Проблема с плагином кастомной оплаты?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Здесь что лежит?
    $response_body['data']['attributes']['redirect_url'];

    А здесь?
    $response_body['data']['attributes'];
    Подозреваю, что нужно так:
    $response_body['data']['attributes']['hpp_url'];
    Еще интересный момент со статусом оплаты [status] => process_pending, возможно, платеж еще не обработан и нужно время.
    Ответ написан
  • Как создать отдельные категории для страниц wordpress?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Добавление поддержки категорий (и меток) для страниц, functions.php:
    function test() {
        register_taxonomy_for_object_type('category', 'page');
        register_taxonomy_for_object_type('post_tag', 'page');
    }
    
    add_action('init', 'test');
    Ответ написан
    Комментировать
  • Как обрезать описания рубрик в админке Worpress?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Изменяя уже существующие колонки, есть вероятность, что эти колонки может изменить и разработчик любого из плагинов или сами разрабы WP, соответственно, в определенный момент, привязки на эти колонки могут перестать работать. Я использую более надежный способ, добавление своей колонки с нужным мне содержимым.

    functions.php:
    // add custom column
    function add_custom_column($columns) {
        $columns['short_description'] = __('Краткое описание', 'my_custom_plugin');
        unset($columns['description']);
        return $columns;
    }
    
    add_filter('manage_edit-category_columns', 'add_custom_column');
    
    // fill custom column
    function fill_custom_column($deprecated, $column_name, $term_id) {
        if('short_description' === $column_name) {
            $term = get_term($term_id);
            echo mb_substr($term->description, 0, 20) . (mb_strlen($term->description) > 20 ? '…' : '');
        }
    }
    
    add_action('manage_category_custom_column', 'fill_custom_column', 10, 3);
    Ответ написан
    1 комментарий
  • Как ограничить количество пользователей для регистрации на сайте WordPress?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Отключаем возможность регистрации пользователей, если их более 140, и включаем обратно, если их мене 140, functions.php:
    add_action('init', function() {
        $limit = 140;
        $count_users = count_users();
        $total_users = $count_users['total_users'];
    
        if($total_users > $limit) {
            update_option('users_can_register', false);
        } else {
            update_option('users_can_register', true);
        }
    });
    Ответ написан
    Комментировать
  • Как заблюрить товары на страницах для незарегистрированных пользователей?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Как заблюрить товары на страницах для незарегистрированных пользователей?

    Т.к. не понятно, какой метод блюра использовать, то покажу пример реализации css блюра у класса .product:
    // functions.php:
    
    function test() {
        if (!is_user_logged_in()) {
            wp_add_inline_style('woocommerce-general', '.product {filter: blur(5px)}');
        }
    }
    add_action('wp_enqueue_scripts', 'test');

    А также есть вопрос по закрытию доступа к заказу из корзины, если пользователь не авторизован.

    Можно кодом, с редиректом на страницу с id=myaccount:
    // functions.php:
    
    function test() {
        if (!is_user_logged_in()) {
            wp_redirect(get_permalink(wc_get_page_id('myaccount')));
            exit;
        }
    }
    add_action('woocommerce_before_checkout_form', 'test');

    Или плагинами:
    - WooCommerce Members Only plugin
    - YITH WooCommerce Catalog Mode plugin
    Ответ написан
    3 комментария