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

    irtek
    @irtek
    Wordpress-addicted
    Поставьте, после вашего блока кода

    <?php wp_reset_postdata(); ?>
    Ответ написан
    Комментировать
  • Как полностью отключить черновики auto-draft и draft в WordPress?

    irtek
    @irtek
    Wordpress-addicted
    Вы отключаете Revisions, т.е. версии поста, которые по умолчанию сохраняются каждые 60 секунд, но auto-draft Черновики создаются всегда.

    Обычный черновик, который можно отключить это статус "draft", т.е. когда вы сохранили пост как Черновик, а "auto-draft" это автоматически создаваемая временная запись каждый раз при создании нового объекта поста/страницы.

    В большинстве систем когда вы создаете файл или загружаете файл в области памяти создается временный файл, затем после того выполнили какие-либо действия он сохраняется на диске как основная версия.

    Также и в архитектуре WordPress когда вы создаете Запись или Страницу создается auto-draft до момента его публикации или того же сохранения фиксации как draft черновик. Чтобы подчистить за собой черновик нужно выполнить какую-то функцию, а если у вас отключился интернет или вы закрыли браузер? Это не проконтролировать. Поэтому запись auto-draft останется в любом случае.

    Чтобы избавиться от auto-draft записей в базе в WordPress есть функция wp_delete_auto_drafts() которая удалит все auto-draft строки для Записей/Страниц старше 7 дней

    Вы можете эту функцию регулярно вызывать, чтобы чистить базу от лишних записей auto-draft черновиков.
    Только НЕ добавляйте эту функцию просто в файл functions.php, т.к. если она будет вызываться каждый раз при открытии сайта это значительно снизит производительность. Укажите какое-либо условие запуска для нее, например, когда заходит админ раз в 3 дня и т.п. либо посмотрите тему с CRON и повесьте регулярную чистку каждые 7 дней.

    Можете также сделать удаление auto-draft черновиков хоть каждые 10 секунд хоть при каждом открытии админки SQL запросом если критично взяв код запроса из функции
    https://developer.wordpress.org/reference/function...
    или если Запись никто не редактировал 1 час или при выходе из админки и т.п. варианты.
    Ответ написан
    Комментировать
  • Как из хлебных крошек удалить название товара woocommerce?

    irtek
    @irtek
    Wordpress-addicted
    Например таким кодом, добавленным в functions.php темы

    add_filter( 'woocommerce_get_breadcrumb', 'remove_product_name_from_breadcrumb' );
    
    function remove_product_name_from_breadcrumb( $breadcrumb ) {
    	
      if( is_product() ){
    		array_pop( $breadcrumb );
    	}
      
      return $breadcrumb;
    }
    Ответ написан
    Комментировать
  • Как сделать mysql запросы для замены сериализованных ссылок?

    irtek
    @irtek
    Wordpress-addicted
    Какая именно задача?

    Если найти в сериализованных полях какую-то ссылку или блок текста и заменить, то можно просто воспользоваться поиском и заменой в MySQL простым SQL запросом:

    table - название таблицы
    field_name - колонка

    UPDATE `table` SET `field_name` = replace(field_name, 'http://site1.ru', 'http://site2.ru')


    (!) все операции с БД выполняйте только после того как сделаете бэкап (!!!)

    Второй вариант через скрипт
    Если надо что-то сделать с данными, то можно написать простой скрипт на php, который выполнит эту операцию, предварительно проведя десериализацию данных, выполнив с ними операцию и затем опять обновив в БД.
    Если речь о WordPress, то можно получить все мета поля ( притом функция get_post_meta() автоматически десериализует данные при получении из БД ), затем провести с ними операцию, а затем обратно update_post_meta и так хоть тысячу полей.
    Ответ написан
    3 комментария
  • Откуда кавычка в начале названия страницы WP?

    irtek
    @irtek
    Wordpress-addicted
    Функция wp_title() по умолчанию добавляет перед заголовком знак двойных кавычек. Это регулируется первым аргументом.

    Вызовите функцию с первым аргументом пустой строкой и значка не будет
    wp_title( '' );

    https://developer.wordpress.org/reference/function...

    Либо примените фильтр 'wp_title_parts', чтобы убрать этот значок во всех функциях wp_title по всему сайту
    Ответ написан
    Комментировать
  • Почему не работает post__in в query_posts?

    irtek
    @irtek
    Wordpress-addicted
    Строка с запятыми это не массив, поэтому у вас она приводится только к первому значению. Чтобы эту строку превратить в массив замените первую строку на

    $first_five = explode( ',', get_field( 'first_five',  'option' ) );
    Ответ написан
    2 комментария
  • Как сделать разные дизайны для разных категории на Wordpress?

    irtek
    @irtek
    Wordpress-addicted
    В данном вопросе масса решений:

    Во-первых, можете создавать файлы category-name.php под каждую категорию и там делать любой дизайн

    Во-вторых, вы можете написать код, где подменять шаблон страницы в зависимости от категории в запросе можно централизованно повесить на ху wp_loaded или wp_init проверки либо в едином шаблоне категории
    if( in_category( 'category' ) ) include('base-category.php);
    else include( 'default-template.php' );


    В-третьих, можно посмотреть плагины на эту тему.
    https://wordpress.org/plugins/tags/category-template/
    Их правда маловато и что-то давно не обновлялись
    Ответ написан
    Комментировать
  • Как настроить чпу в wordpress?

    irtek
    @irtek
    Wordpress-addicted
    Вам тогда нужно обновить ЧПУ внутри WP. Добавьте следующий код в functions.php вашей темы

    function rewrites_init_q1226714( $rules ) {
    	add_rewrite_rule( 'catalog/offer/([0-9]+)$', 'index.php?pagename=catalog/offer&id=$matches[1]', 'top' );
    
    	return $rules;
    }
    
    add_action( 'init', 'rewrites_init_q1226714' );


    На всякий случай после добавления кода зайдите в Настройки - Постоянные ссылки и пересохраните настройки, чтобы обновить ЧПУ.

    Здесь по урлу /catalog/offer/123 откроется страница /catalog/offer и в ней будет $_GET параметр id с 123
    Соответственно у вас должна быть страница catalog к ней прикреплена страница offer с родительской страницей catalog и у страницы offer в шаблоне вы получите GET параметр с id

    Работая со вторым блоком, где index.php?pagename вы можете открывать там любой пост тип, категорию, тэг и т.п. меняя параметры, вплоть до конкретного ?post=123 и т.д.
    Ответ написан
    4 комментария
  • Таксономия или произвольные поля wordpress?

    irtek
    @irtek
    Wordpress-addicted
    Таксономии это одно из самых узких мест в WP по производительности. Работа с ними происходит в 3 таблицах + связь с основной таблицей _posts. Поэтому в известном плагине Woocommerce если добавить массово атрибуты к товарам, построенные на таксономиях, то сайт начинает сильно тормозить.

    Проще и эффективнее попробовать использовать мета поля. Если формировать свои запросы, то с мета полями будет проще и производительнее создавать запросы.

    Для максимальной производительности для доски объявлений лучше создать свои таблицы с параметрами и работать с ними уже своими запросами.
    Ответ написан
    Комментировать
  • Как разом удалить все медиа в wordpress?

    irtek
    @irtek
    Wordpress-addicted
    DELETE FROM `wp_posts` WHERE `post_type` = "attachment";
    DELETE FROM `wp_postmeta` WHERE `meta_key` = "_wp_attached_file";
    DELETE FROM `wp_postmeta` WHERE `meta_key` = "_wp_attachment_metadata";


    Эти 3 запроса в базе данных удалят все основные записи о медиа, если не создавали каких-то индивидуальных полей для изображений.
    Ответ написан
    1 комментарий
  • Как получить данные из этого массива?

    irtek
    @irtek
    Wordpress-addicted
    Есть соответствующие методы для получения данных из массива данных data данного объекта
    $product_type  = $data->get_type(); 
    $product_id    = $data->get_id();
    $product_name  = $data->get_name();
    $product_sku   = $data->get_sku(); 
    $product_price = $data->get_price();
    Ответ написан
    Комментировать
  • Не выводятся поля ACF после вывода через WP_Query как исправить?

    irtek
    @irtek
    Wordpress-addicted
    После endwhile(); допишите функцию wp_reset_postdata(); которая вернет глобальную переменную $post в исходное состояние.

    endwhile(); wp_reset_postdata();
    Ответ написан
    Комментировать
  • Как реализовать фильтр постов с помощью select?

    irtek
    @irtek
    Wordpress-addicted
    Создаете select, который при изменении будет добавлять к урлу get параметр disctict, допустим с номером района 1,2,3
    <select onchange="location=value">
            <option value="" selected="selected">Выбрать район</option>
            <option value="?district=1">Район 1</option>
            <option value="?district=2">Район 2</option>
            <option value="?district=3">Район 3</option>
        </select>


    В php коде выводите районы (допустим они в пост типе districts) запросом, например
    $disctricts = new WP_Query(['post_type' => 'disctricts', 'meta_key' => 'disctrict', 'meta_value' => $_GET['disctrict']]);
    
     // далее удобным вам способом выводите районы из массива $disctricts

    где указывается meta_key ваше поле в ACF,а в meta_value перехватываете get параметр с номером района.
    Ответ написан
    Комментировать
  • Как сделать так, чтобы стили темы не трогали wp-admin?

    irtek
    @irtek
    Wordpress-addicted
    В функции подключения стилей и скриптов оберните в условие
    if( ! is_admin() ) {
    // здесь стили
    }
    Ответ написан
    Комментировать
  • Как в WP делать переадресацию url в в зависимости от utm метки?

    irtek
    @irtek
    Wordpress-addicted
    В файл functions.php темы

    add_action( 'template_redirect', 'toster_q_1004505_redirect' );
    
    function toster_q_1004505_redirect() {
    
    	if ( ( isset( $_GET['link'] ) && ! $_GET['link'] ) || ! isset( $_GET['link'] ) ) {
    
    		$url = '/example'; // Куда переадресуем, если utm метка link пустая или отсутствует
    		wp_safe_redirect( $url ); // либо функция wp_redirect($url); если нужно переадресовать на внешний url
    		exit();
    
    	}
    
    }


    Замените функцию wp_safe_redirect($url) на функцию wp_redirect($url) если вам нужно переадресовать на внешний сайт.
    Ответ написан
  • Как создать свой archive в wordpress?

    irtek
    @irtek
    Wordpress-addicted
    Понятие archive относится к post_type. Архив вы получаете если регистрируете свой пост тип через register_post_type с параметром ['has_archive' => true] в таком случае подключится шаблон archive-works.php, если post_type называется 'works' и откроется по адресу /works.

    Для таксономии вы можете создать шаблон taxonomy-our_work.php, который будет выводиться по адресу /our_work, в данном шаблоне вы сможете вывести посты с нужными вам терминами.
    Ответ написан
    Комментировать
  • Как создать много постов в WP для теста?

    irtek
    @irtek
    Wordpress-addicted
    Вот хороший
    https://wordpress.org/plugins/fakerpress/

    Есть репозиторий с xml тестовыми данными для темы, готовые к импорту если необходимо
    https://github.com/WPTT/theme-test-data
    Ответ написан
    1 комментарий
  • Как в wordpress перехватить get запрос?

    irtek
    @irtek
    Wordpress-addicted
    1. Грубый метод
    Создать папку sitemap в корне и создать там index.php
    Если нужны функции WordPress и доступ к базе, то включить в файл основной файл загрузки WP

    require '../wp-load.php';

    2. Если нужно прямо в WordPress
    Скрипт нужно повесить на хук "init", который происходит до передачи заголовков страницы.
    Данный код добавить в functions.php темы

    add_action( 'init', 'qna_habr_q_971257' );
    
    function qna_habr_q_971257() {
    
    	global $wp;
    
    	// Получить базовый url
    	$current_url = home_url();
    
    	// Получить текущий url
    	$current_url = $current_url . $_SERVER['REDIRECT_URL'];
    
    	// Получить ID поста/страницы
    	$id = url_to_postid( $current_url );
    
      // Получить массив get запроса
    	print_r( $_GET );
    
    
    	// Здесь ваш скрипт... //
    
    
    	// Завершить функцию выходом если не хотите продолжать загружать страницу
    	wp_die();
    
    }


    Для условия определения страницы, на которой находимся я привёл пример нескольких функций. Вы можете определить по данным из глобального $_SERVER, можете воспользоваться определением ID страницы по url и определять по ID на какой странице находитесь. Но учтите, что is_page() функция на данном этапе загрузки еще не работает.

    И завершить функцию можно выходом wp_die(); если вам не нужно продолжение загрузки страницы.
    Ответ написан
    1 комментарий
  • Не выводятся посты через get_posts?

    irtek
    @irtek
    Wordpress-addicted
    'category' в функции get_posts используются если вы хотите указать категорию родной записи Записи WordPress с пост типом post, в остальных случаях при создании custom post_type вам необходимо работать с таксономиями

    # получаем записи из рубрики
        $myposts = get_posts( array(
          'numberposts' => -1,
          'orderby'     => 'post_date',
          'post_type'     => 'programms', 
          'order'       => 'DESC',
          'type_programms'    => $cat->slug
        ) );


    Попробуйте так
    Ответ написан
    1 комментарий
  • Как можно массово заменить ссылку в содержимом записи Wordpress?

    irtek
    @irtek
    Wordpress-addicted
    Плагин https://ru.wordpress.org/plugins/better-search-replace/ для поиска и замены по базе.

    Таблица записей — wp_posts

    Только указывайте как можно более точный поиск, чтобы не заменились все участки похожего текста. Иначе ко всем урлам в тексте добавится "catalog"
    Ответ написан
    Комментировать