Метка: functions.php

Как добавить 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

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

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

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