Метка: functions.php

Как установить http код 410 для страниц на WordPress

У вас есть удаленные страницы на вашем сайте WordPress, и вы не собираетесь перенаправлять или восстанавливать их даже в будущем?

В этом случае вы можете настроить код статуса HTTP 410 на этих страницах. Это поможет пользователям и поисковым системам понять, что страницы удалены навсегда.

Но что делать, если у вас много удаленных страниц? Установка кода 410 вручную для каждой из них может занять целую вечность.

В этой статье базы знаний мы покажем вам быстрый и простой способ установки кода статуса 410 для всего вашего сайта WordPress.

1 Что такое код статуса 410 Gone?

Код статуса 410 Gone — это тип HTTP-ответа, который указывает, что запрошенный ресурс больше не доступен на сервере и не имеет адреса пересылки.

Проще говоря, сервер определил, что запрошенный ресурс навсегда исчез и больше не будет доступен.

Давайте проясним ситуацию. Предположим, у вас есть страница на вашем веб-сайте, и по какой-то причине вы намеренно удаляете ее, не желая перенаправлять или возвращать ее позже. Вот когда вам следует использовать код статуса 410.

Эта ошибка будет отображаться на стороне клиента для пользователей, которые пытаются получить доступ к странице, а не на сервере. С другой стороны, вы сообщаете поисковым системам, что больше никогда не нужно сканировать и индексировать страницу, что означает, что она исчезла навсегда.

Итак, вы можете видеть, что это отличается от типичного кода 404 Not Found, который предполагает, что ресурс может быть временно недоступен или просто никогда не существовал в этом месте.

Какой код ошибки использовать: 404 или 410 на вашем сайте WordPress?

Ну, это зависит от обстоятельств. Мэтт Каттс из Google сказал в одном из видеороликов Google Search Central:

«Если страница исчезла, и вы думаете, что это временно, используйте 404. Если страница исчезла, и вы не знаете другой страницы, которая могла бы ее заменить, вам некуда больше указывать, и вы знаете, что эта страница исчезнет и никогда не вернется, тогда используйте 410».

Использование кода статуса 404 может привести к тому, что поисковые системы, такие как Google, будут ждать до 24 часов, прежде чем удалить страницу из индекса, поскольку они проверяют, намеренно ли вы это сделали.

Однако, если вы используете код статуса 410, вы даете Google сигнал, что вы уверены в своих действиях, и они немедленно удалят страницу из индекса.

Поэтому, прежде чем решить использовать код статуса 410 на своем веб-сайте WordPress, тщательно подумайте, так как он навсегда удаляет страницу из индексов поисковых систем.

Но что, если нужно иметь дело со многими страницами? В следующем разделе мы обсудим, как массово установить для них код статуса 410.

2 шага для массовой установки кода статуса 410 для WordPress

Через файл .htaccess

Если вы используете сервер Apache, можно настроить код ответа 410 через .htaccess:

  1. Откройте файл .htaccess в корневой папке вашего сайта.
  2. Добавьте строки:
Redirect 410 /example-page
Redirect 410 /another-page

Замените example-page на путь к вашей странице.

Через файл functions.php

Вы можете добавить специальный код в файл functions.php вашей темы:

  1. Откройте файл functions.php вашей активной темы (в меню WordPress: Внешний вид → Редактор темы).
  2. Добавьте следующий код:
function set_410_for_pages() {
    // Укажите URL-адреса страниц, для которых нужен код 410
    $pages_to_410 = [
        'example-page', // Путь к странице: example.com/example-page
        'another-page', // example.com/another-page
    ];

    // Получаем текущий URL
    $current_slug = trim(parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH), '/');

    if (in_array($current_slug, $pages_to_410)) {
        // Устанавливаем заголовок 410 и выводим кастомное сообщение
        status_header(410);
        echo '<h1>410 Gone</h1>';
        echo '<p>Эта страница была удалена.</p>';
        exit; // Останавливаем выполнение скрипта
    }
}
add_action('template_redirect', 'set_410_for_pages');

Как добавить robots noindex в WordPress

Привет всем.

Как закрыть сайт на WordPress от индексации?

Сегодня мы закрываем сайт на WordPress от индексации. Расскажем же как это делать…

Первое, что нужно сделать, это зайти в админке вордпресс в меню Settings в подменю Reading и поставить там галочку напротив Discourage search engines from indexing this site

И после нажать Save Changes.

Это пропишет следующее в файле robots.txt

User-agent: *
Disallow:

Однако, это недостаточно. Необходимо еще в сам шаблон темы добавить тег:

<meta name='robots' content='noindex, nofollow' />

Для этого вы можете отредактировать шаблон вашей темы и вставить этот код между открывающимся и закрывающимся тегом head.

Также это можно сделать с помощью кода, прописав его в файле functions.php вашей темы:

add_action( 'wp_head', function() {
echo '<meta name="robots" content="noindex, nofollow" />';
} );

Этот код добавит этот мета тег в тег head вашей темы.

После этого ваш сайт не будет проиндексирован поисковыми системами. Поздравляем! Задача достигнута.

Как отключить автоматическое обновление в WordPress

Чтобы отключить автоматические обновления в WordPress, можно воспользоваться несколькими способами. Я расскажу о каждом из них с пояснениями.

Способ 1: Использование файла wp-config.php

  1. Откройте файл wp-config.php: Этот файл находится в корневой папке вашего сайта WordPress.
  2. Добавьте следующие строки:
    • Чтобы полностью отключить автоматические обновления, добавьте следующую строку в wp-config.php:
define('AUTOMATIC_UPDATER_DISABLED', true);

Это отключит все типы автоматических обновлений: для ядра WordPress, плагинов и тем.

Чтобы отключить автоматические обновления только для ядра WordPress, добавьте эту строку:

define('WP_AUTO_UPDATE_CORE', false);

Таким образом, ядро WordPress не будет обновляться автоматически, но это не повлияет на обновления плагинов и тем.

Способ 2: Использование фильтров в файле functions.php

Откройте файл functions.php вашей темы: Этот файл находится в папке текущей активной темы (wp-content/themes/your-theme/).

Добавьте код для отключения обновлений:

  • Отключение всех автоматических обновлений:
add_filter('automatic_updater_disabled', '__return_true');

Отключение автоматических обновлений ядра WordPress:

add_filter('auto_update_core', '__return_false');

Отключение автоматических обновлений плагинов и тем:

add_filter('auto_update_plugin', '__return_false'); add_filter('auto_update_theme', '__return_false');

Способ 3: Использование плагинов

Если вы не хотите редактировать код вручную, можно воспользоваться плагинами для управления автоматическими обновлениями. Например:

  • Easy Updates Manager: Этот плагин предоставляет интерфейс для настройки автоматических обновлений для ядра, плагинов, тем и даже переводов.

Разъяснение:

  • Ядро WordPress — это основная система WordPress, которая время от времени получает обновления для исправления багов, повышения безопасности и добавления новых функций. Отключая автоматические обновления, вы берете на себя ответственность за своевременное обновление системы.
  • Плагины и темы также получают обновления. Отключая их автоматическое обновление, важно следить за обновлениями вручную, чтобы избежать уязвимостей.

Рекомендуется не отключать автоматические обновления безопасности, если нет крайней необходимости, поскольку это может сделать ваш сайт уязвимым для атак.

Замена вариаций продукта с Select на Radio buttons для WooCommerce (вариант 2)

В одном из статей был описан метод, как можно заменить стандарный вывод выбора вариаций с помощью select на radio. Эта статья находится тут.

Сегодня же будет показан еще один, альтернативный, вариант решения данной проблемы.

Открываем файл /ваша_тема/woocommerce/single-product/add-to-cart/variable.php (если такого файла нет, то нужно создать его.

В папке /ваша_тема/woocommerce/ находятся шаблоны woocommerce, которые изменяются для темы. Исходники их находятся в папке с плагином woocommerce в папке /templates.

В этом файле мы перед функцией вывода select выбора вариаций товара добавляем

<?foreach($options as $index => $item):?>
<label for="<?=sanitize_title( $attribute_name );?>_<?=$item;?>" <?if($index===0):?>class="active"<?endif;?>><?=$item;?></label>
<?endforeach;?>

и оборачиваем все это (вместе с выводом select) в обертку

<div class="radio-input-container"></div>

В итоге у нас получится следующая конструкция:

<div class="radio-input-container">
<?foreach($options as $index => $item):?>
<label for="<?=sanitize_title( $attribute_name );?>_<?=$item;?>" <?if($index===0):?>class="active"<?endif;?>><?=$item;?></label>
<?endforeach;?>
<?php
wc_dropdown_variation_attribute_options(
array(
'options'   => $options,
'attribute' => $attribute_name,
'product'   => $product,
)
);
?>
</div>

в js файл со скриптами добавляем:

$('.radio-input-container label').on('click', function(){
var Value = $(this).text();
var Label = $(this);
$('.radio-input-container label').removeClass('active');
Label.addClass('active');
Label.parent().find('select').val(Value).change();
});

Я также добавил очистку наших «лейблов» по клику на ссылку «Очистить»:

$('.reset_variations').on('click', function(){
$('.radio-input-container label').removeClass('active');
});

и следующие стили получились:

.radio-input-container {
display: flex;
gap: 10px;
flex-wrap: wrap;
margin-bottom: 15px;
label {
width: 20%;
text-align: center;
border: 1px solid @colorGrey;
border-radius: 5px;
padding: 6px 15px 5px 15px;
cursor: pointer;
font-weight: 500;
&:hover, &.active {
border-color: @colorRed;
background: @colorWhite;
}
}
select {
display: none;
}
}

Select я спрятал намеренно, что не портило дизайн и не путало пользователя.

В итоге получилась такая вот красота:

Замена вариаций продукта с Select на Radio buttons для WooCommerce

Столкнулся с такой задачей, что для одного из проектов требовалось заменить возможность выбора вариации для товара с селекта выбора на радиокнопки. Так клиенту кажется более нативно будет понятным выбор для пользователя да и вообще.

Конечно, можно это реализовать с помощью плагина дополнительного. Однако, я не приверженник такого подхода. По этому решил написать свое решение. Однако, оговорюсь сразу — я нашел уже готовый код и стал дальше перерабатывать его под свои нужны.

Нашел текущий код тут https://gist.github.com/brendonexus/1def5ec2689b66c2101d969c183042bc

Однако обнаружил, что он не просто заменяет вариации продукта, но и выводит предыдущие значения в select.

Поправил его немного и получилось такое:

// add radio buttons for woocommerce's product
function variation_radio_buttons($html, $args)
{
$args = wp_parse_args(apply_filters('woocommerce_dropdown_variation_attribute_options_args', $args), array(
'options' => false,
'attribute' => false,
'product' => false,
'selected' => false,
'name' => '',
'id' => '',
'class' => '',
'show_option_none' => __('Choose an option', 'woocommerce'),
));

if (false === $args['selected'] && $args['attribute'] && $args['product'] instanceof WC_Product) {
    $selected_key = 'attribute_' . sanitize_title($args['attribute']);
    $args['selected'] = isset($_REQUEST[$selected_key]) ? wc_clean(wp_unslash($_REQUEST[$selected_key])) : $args['product']->get_variation_default_attribute($args['attribute']);
}

$options = $args['options'];
$product = $args['product'];
$attribute = $args['attribute'];
$name = $args['name'] ? $args['name'] : 'attribute_' . sanitize_title($attribute);
$id = $args['id'] ? $args['id'] : sanitize_title($attribute);
$class = $args['class'];
$show_option_none = (bool)$args['show_option_none'];
$show_option_none_text = $args['show_option_none'] ? $args['show_option_none'] : __('Choose an option', 'woocommerce');

if (empty($options) && !empty($product) && !empty($attribute)) {
    $attributes = $product->get_variation_attributes();
    $options = $attributes[$attribute];
}

$radios = '<div class="variation-radios">';

if (!empty($options)) {
    if ($product && taxonomy_exists($attribute)) {
        $terms = wc_get_product_terms($product->get_id(), $attribute, array(
            'fields' => 'all',
        ));

        foreach ($terms as $term) {
            if (in_array($term->slug, $options, true)) {
                $radios .= '<div><input type="radio" name="' . esc_attr($name) . '" value="' . esc_attr($term->slug) . '" ' . checked(sanitize_title($args['selected']), $term->slug, false) . '><label for="' . esc_attr($term->slug) . '">' . esc_html(apply_filters('woocommerce_variation_option_name', $term->name)) . '</label></div>';
            }
        }
    } else {
        foreach ($options as $option) {
            $checked = sanitize_title($args['selected']) === $args['selected'] ? checked($args['selected'], sanitize_title($option), false) : checked($args['selected'], $option, false);
            $radios .= '<div><input type="radio" name="' . esc_attr($name) . '" value="' . esc_attr($option) . '" id="' . sanitize_title($option) . '" ' . $checked . '><label for="' . sanitize_title($option) . '">' . esc_html(apply_filters('woocommerce_variation_option_name', $option)) . '</label></div>';
        }
    }
}

$radios .= '</div>';

return $radios;

}

add_filter('woocommerce_dropdown_variation_attribute_options_html', 'variation_radio_buttons', 20, 2);
// end add radio buttons for woocommerce's product

Тут представлен код, который подойдет для многих задач. Конкретно свое кастомное решение для моего проекта я не показываю, так как там еще учитывались «побочные» параметры и значени, которых у вас никогда не будет и которые специфичны исключительно для разрабатываемого мною проекта.

Надеюсь, что эта статья будет полезна вам, также как и код.

Также добавлена статья, где рассказывается еще один метод, как решить эту проблему — тут.