Как отключить прилепленные записи на главной странице WordPress

Если у вам не нужны прикрепленные записи и у вас их= несколько, то зайдите в консоль и там просто открепите эти записи и все. Но если, на вашем сайте раньше специально прилеплялись записи, таким образом выводились избранные статьи, а теперь вы решили поменять концепцию и желания редактировать все прилепленные статьи у вас нет, то вам поможет следующая небольшая функция.

add_action( 'pre_get_posts', 'turn_off_sticky' );
function turn_off_sticky( $query ) {
    if ( $query->is_main_query() ) {
        $query->set( 'ignore_sticky_posts', true );
    }
}

Функция добавляется в файл пользовательских функций - function.php. Если не знакомы с его структурой, то добавляете в самый конец перед закрывающим тегом PHP ?>. Если его нет, то просто в самый конец файла.

Перед изменением function.php, обязательно сохраните его копию, чтобы в дальнейшем, в случаи ошибки, вернуть все как было.


После добавления можете оценить результат.

Добавлено: 28 Сентября 2021 06:43:39 Добавил: Андрей Ковальчук

Как отключить прилепленные записи на главной странице WordPress

Если у вам не нужны прикрепленные записи и у вас их= несколько, то зайдите в консоль и там просто открепите эти записи и все. Но если, на вашем сайте раньше специально прилеплялись записи, таким образом выводились избранные статьи, а теперь вы решили поменять концепцию и желания редактировать все прилепленные статьи у вас нет, то вам поможет следующая небольшая функция.

add_action( 'pre_get_posts', 'turn_off_sticky' );
function turn_off_sticky( $query ) {
    if ( $query->is_main_query() ) {
        $query->set( 'ignore_sticky_posts', true );
    }
}

Функция добавляется в файл пользовательских функций - function.php. Если не знакомы с его структурой, то добавляете в самый конец перед закрывающим тегом PHP ?>. Если его нет, то просто в самый конец файла.

Перед изменением function.php, обязательно сохраните его копию, чтобы в дальнейшем, в случаи ошибки, вернуть все как было.


После добавления можете оценить результат.

На этом все, спасибо за внимание.

Добавлено: 10 Сентября 2021 14:20:19 Добавил: Андрей Ковальчук

Tailwind CSS: за и против

По данным опроса The State of CSS 2020, больше всего разработчиков в мире, использующих CSS-фреймворки, сейчас заинтересованы в изучении и применении Tailwind CSS. Он опережает конкурентов в этом рейтинге уже второй год подряд. Команда Tailwind предлагает альтернативный подход для поддержки и стилизации HTML-разметки, но у него есть и свои противники. Проштудировав статьи и комментарии на таких ресурсах, как Dev.to, Product Hunt и Codeburst, мы собрали наиболее популярные доводы за и против использования этого фреймворка.

Концепт Tailwind CSS
Но сначала о том, чем Tailwind отличается от других CSS-фреймворков. Главное отличие — в том, что он не содержит какой-либо концепт дизайна, а предоставляет готовые классы, утилиты и директивы для стилизации и разметки HTML-тегов. Такой подход позволяет реализовать полностью настраиваемый дизайн компонентов без написания даже строчки пользовательского CSS-кода. Авторы фреймворка предполагают, что разработчики получат от этого следующие преимущества:

Не нужно тратить время на придумывание названий для CSS-классов.
CSS код почти не увеличивается в размерах, а все классы и утилиты используются многократно. Поэтому редко когда придется писать новый CSS-код.
Вносить изменения безопаснее. Не нужно переписывать CSS, если достаточно поменять классы в HTML.
Еще из полезных функций: тему можно настроить под свой проект, адаптивные утилиты Tailwind помогут создать полностью отзывчивый интерфейс, а наведение, фокус и другие состояния легко стилизовать с помощью служебных классов. Функция @apply при этом позволяет использовать Tailwind-классы для создания собственных переиспользуемых абстракций:

<!-- Using utilities -->
<button class="py-2 px-4 font-semibold rounded-lg shadow-md text-white bg-green-500 hover:bg-green-700">
  Click me
</button>
 
<!-- Extracting classes using @apply -->
<button class="btn btn-green">
  Button
</button>
 
<style>
  .btn {
    @apply py-2 px-4 font-semibold rounded-lg shadow-md;
  }
  .btn-green {
    @apply text-white bg-green-500 hover:bg-green-700;
  }
</style>

За Tailwind CSS
Синтаксис
Синтаксис Tailwind очень прост: к элементам HTML или JSX добавляются имена классов. Вот как это выглядит на примере уведомления, созданного с помощью этого фреймворка:

<div class="max-w-sm mx-auto flex p-6 bg-white rounded-lg shadow-xl">
  <div class="flex-shrink-0">
    <img class="h-12 w-12" src="/img/logo.svg" alt="ChitChat Logo">
  </div>
  <div class="ml-6 pt-1">
    <h4 class="text-xl text-gray-900 leading-tight">ChitChat</h4>
    <p class="text-base text-gray-600 leading-normal">You have a new message!</p>
  </div>
</div>


Каждое имя класса содержит одно или несколько свойств CSS. Например, flex — это display: flex;, p-6 — padding: 1.5rem, mx-auto — margin-left: auto; margin-right: auto; и так далее. Этот подход очень прост и полезен, так как сложные компоненты строятся из ограниченного набора примитивных утилит.

Встроенная отзывчивость, псевдоклассы и стили
Отзывчивый дизайн, стилизация элементов и псевдоклассов, таких как hover, focus, active, доступны прямо в HTML-коде. Весь стиль определяется самим элементом. Это означает, что посмотрев на элемент, вы сразу поймете его стили. При этом вам не нужно открывать другой файл, чтобы редактировать CSS-правила.

По умолчанию Tailwind использует систему брейкпоинтов mobile first, аналогичную той, которая используется в других фреймворках, таких как Bootstrap.

Меньше CSS-кода
Размер CSS-кода не растет линейно. Имена классов совместно используются элементами, а это гарантирует постоянный размер пакета. Кроме того, Purge CSS удалит все неиспользуемые стили, поэтому кодовая база не будет перегружена.

Более высокая производительность
Написание классов Tailwind происходит быстрее, чем в CSS или CSS-in-JS. С использованием Tailwind верстка сводится к добавлению классов CSS к HTML-разметке.

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

Рассмотрим это на примере. В обычном CSS у нас было бы:

/* Small (sm) */
@media (min-width: 640px) { /* ... */ }
 
/* Medium (md) */
@media (min-width: 768px) { /* ... */ }
 
/* Large (lg) */
@media (min-width: 1024px) { /* ... */ }
 
/* Extra Large (xl) */
@media (min-width: 1280px) { /* ... */ }

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

Теперь посмотрим на Tailwind:

<!-- Width of 16 by default, 32 on medium screens, and 48 on large screens -->
<img class="w-16 md:w-32 lg:w-48" src="...">

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

Множество вариаций настройки проекта
Tailwind предоставляет разработчику рабочую тему по умолчанию, которая подойдет для множества проектов. Есть и возможность расширять или изменять настройки с помощью файла tailwind.config.js. Он также позволяет добавлять собственные плагины, что открывает целый мир возможностей для сторонних разработчиков.

Против Tailwind CSS
Создание сложных анимаций
Несмотря на то, что простые анимации включены в готовом виде, а другие можно добавить через конфигурацию, сложную анимацию в Tailwind очень сложно реализовать. Но проблему можно решить с помощью простого CSS, библиотеки анимации, такой как Framer Motion, или библиотеки CSS-in-JS, такой как Styled Components.

Уродливый HTML
Базовые классы содержат одно-два CSS-правила, поэтому может потребоваться много классов для стилизации отдельного тега. Это значит, что HTML-разметка будет выглядеть раздуто и неряшливо с эстетической точки зрения. Но не только эстетика может пострадать — во множестве классов, написанных в одну строку, будет легко запутаться.

Для наглядности посмотрите на пример ниже:

<div class="min-w-0 flex-auto space-y-0.5">
  <p class="text-lime-600 dark:text-lime-400 text-sm sm:text-base lg:text-sm xl:text-base font-semibold uppercase">
    <abbr title="Episode">Ep.</abbr> 128
  </p>
  <h2 class="text-black dark:text-white text-base sm:text-xl lg:text-base xl:text-xl font-semibold truncate">
    Scaling CSS at Heroku with Utility Classes
  </h2>
  <p class="text-gray-500 dark:text-gray-400 text-base sm:text-lg lg:text-base xl:text-lg font-medium">
    Full Stack Radio
  </p>
</div>

Для решения этой проблемы авторы фреймворка предлагают использовать @apply. Например в проектах, где большая часть HTML ориентирована на имена классов с компонентной областью видимости (что близко по концепции к методологии БЭМ), @apply широко используется. Но это подводит к следующему вопросу.

@apply принципиально несовместим и нестандартен
Проблемы возникнут, если попробовать отказаться от Tailwind. Везде, где классы были созданы с помощью @apply, они просто перестанут работать. Особенно это будет болезненно для проектов, использующих компонентный подход.

Избыточная сложность настроек
Токены дизайна Tailwind настраиваются с помощью сложной системы на JavaScript. Настройки темы Tailwind можно заменить настраиваемыми CSS-переменными (CSS Custom Properties), которые поддерживаются всеми браузерами, кроме Internet Explorer.

Tailwind CSS плохо работает через CDN
Минусы подключения через CDN:

Нельзя настроить тему
Нельзя использовать директивы: @apply, @variants и т.д.
Нельзя включить дополнительные варианты, такие как group-focus
Нельзя устанавливать сторонние плагины
Нельзя избавиться от неиспользуемых стилей
Это будет минусом для тех, кто привык не хранить у себя стандартный код. Единственный приемлемый вариант использования CDN — для прототипирования.

Tailwind забывает о существовании веб-компонентов
Tailwind полностью непригоден для использования в Shadow DOM. Некоторые предприимчивые разработчики придумали решения, в которых отдельные элементы стиля Tailwind можно внедрить в компоненты в процессе сборки, но это определенно “костыль”.

Вместо этого Tailwind поощряет суп с тегами div/span. Использование тегов <div> и <span> повсюду в разметке — это анти-шаблон. Пользовательские элементы полностью поддерживаются современными браузерами, и нет причин этим пренебрегать. Например вместо <div class = “card”> </div> можно написать <ui-card> </ui-card>.

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

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

Добавлено: 29 Июня 2021 07:37:08 Добавил: Андрей Ковальчук

Статистика за месяц по дням

SELECT PoleUser,PoleDate,COUNT(*) AS CntCount
  FROM MyTablica
  WHERE DATEPART(yy,PoleDate)=2011 AND DATEPART(m,PoleDate)=12
  GROUP BY PoleUser,PoleDate

Если в проге даты нужно в колонки вытянуть, то транспонировать программно

Добавлено: 27 Июня 2021 08:05:11 Добавил: Андрей Ковальчук

Закрытие элемента при клику за его пределами

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

О том как сделать подобные окна, подробно мы останавливаться не будем.

Теперь подробнее о скрипте. Он работает на основе jQuery,поэтому, мы должны убедится что к сайту уже подключена библиотека jQuery. Если нет, то это нужно сделать.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>

После библиотеки нужно подключить наш скрипт. Метод подключения, тоже можете взять со статьи упомянутой выше. Выглядит скрипт так:
$(document).mouseup(function (e){
var modalctr = $("#modal_cinw_ctnr");
var modal = $(".modal_cinw");
if (!modal.is(e.target) && modal.has(e.target).length === 0){
modalctr.hide();
}
});

Скрипт имеет важные параметры, настройка которых нужна для корректной работы скрипта.

$(document).mouseup(function (e){ - эта строка определяет, что скрипт будет работать когда отпущена любая из стандартных клавиш мыши.
var modalctr = $("#modal_cinw_ctnr"); - создаем переменную. В данном случаи это родительский контейнер окна. В примере это затемненная область поверх сайта. Иногда такой области нет, все зависит от типа вашего окна или другого элемента который вы хотите скрыть по клику вне его области. #modal_cinw_ctnr - это айди нашего родительского контейнера. Меняйте на свой нужный.
var modal = $(".modal_cinw"); - создаем вторую переменную. Как раз эта переменная и является нашим окном, нажимая вне его области и будет скрываться именно оно. .modal_cinw - класс нашего окна. Вы можете менять на айди или класс, вашего элемента, что нужно скрыть.
if (!modal.is(e.target) && modal.has(e.target).length === 0){ - в этой строке мы определяем был ли совершен клик по нашему главному элементу, то бишь по окну или нет, а также по его дочерних элементах, что размещены внутри. Если это не они, то переходим далее.
modalctr.hide(); - скрываем наш родительский контейнер, первую переменную - modalctr. То бишь нажимая вне окна, мы скрываем область, что затемняет сайт, внутри которой и лежит окно. Если у вас нет родителя, а нужно скрыть просто элемент из переменной modal. То есть строка будет иметь такой вид - modal.hide();
Далее, просто закрываем скобки.
Если вы настроите все правильно то результат не заставит себя ждать.

Добавлено: 27 Июня 2021 07:52:39 Добавил: Андрей Ковальчук

Как добавить рейтинг записей к комментариям WordPress

Я предлагаю добавить код функций будущего рейтинга прямо в файл функций function.php. Вы, если хорошо знакомы с WordPress, можете сделать плагин - Как создать плагин для WordPress, или вынести функции в отдельный файл, а потом его уже подключить в function.php, если вам так удобнее.

Добавить надо следующий код нужно в самый конец перед закрывающим тегом PHP ?>. Если его нет, то просто в самый конец.

Перед изменением function.php, обязательно сохраните его копию, чтобы в дальнейшем, в случаи ошибки, вернуть все как было.

//ДОБАВЛЯЕМ РЕЙТИНГ К КОММЕНТАРИЯМ
add_action( 'comment_form_logged_in_after', 'comm_rating_rating_field' );
add_action( 'comment_form_after_fields', 'comm_rating_rating_field' );
function comm_rating_rating_field () { ?>
<div class="com_block_star">
<label for="rating">Рейтинг<span class="required">*</span></label>
<fieldset class="comments-rating">
<span class="rating-container">
            <?php for ( $i = 5; $i >= 1; $i-- ) : ?>
                <input type="radio" id="rating-<?php echo esc_attr( $i ); ?>" name="rating" value="<?php echo esc_attr( $i ); ?>" /><label for="rating-<?php echo esc_attr( $i ); ?>"><?php echo esc_html( $i ); ?></label>
            <?php endfor; ?>
<input type="radio" id="rating-0" class="star-cb-clear" name="rating" value="0" /><label for="rating-0">0</label>
</span>
</fieldset>
</div>
<?php
}
//СОХРАНЯЕМ РЕЗУЛЬТАТ
add_action( 'comment_post', 'comm_rating_save_comment_rating' );
function comm_rating_save_comment_rating( $comment_id ) {
    if ( ( isset( $_POST['rating'] ) ) && ( '' !== $_POST['rating'] ) )
    $rating = intval( $_POST['rating'] );
    add_comment_meta( $comment_id, 'rating', $rating );
}
 
//ОБЯЗАТЕЛЬНОСТЬ РЕЙТИНГА
add_filter( 'preprocess_comment', 'comm_rating_require_rating' );
function comm_rating_require_rating( $commentdata ) {
    if ( ! isset( $_POST['rating'] ) || 0 === intval( $_POST['rating'] ) )
    wp_die('Ошибка: Вы не добавили оценку. Нажмите кнопку «Назад» в своем веб-браузере и повторно отправьте свой комментарий с оценкой.');
    return $commentdata;
}
 
//ВЫВОДИМ РЕЙТИНГ В ОПУБЛИКОВАННОМ КОММЕНТАРИИ
add_filter( 'comment_text', 'comm_rating_display_rating');
function comm_rating_display_rating( $comment_text ){
if ( $rating = get_comment_meta( get_comment_ID(), 'rating', true ) ) {
$stars = '<div class="com_star">';
for ( $i = 1; $i <= $rating; $i++ ) {$stars .= '<span class="dashicons dashicons-star-filled"></span>';}
$stars .= '</div>';
$comment_text = $comment_text . $stars;
return $comment_text;
} else {return $comment_text;}
}
 
//ПОДКЛЮЧАЕМ СТИЛИ DASHICONS
add_action( 'wp_enqueue_scripts', 'comm_rating_styles' );
function comm_rating_styles() {
wp_enqueue_style( 'dashicons');
}

Код разбит комментариями, за что отвечает каждая его часть.

//Добавляем рейтинг к комментариям - эта часть кода, добавит в вашу форму комментариев рейтинг. Изначально это просто радио кнопки. Чтобы они превратились в звезды, понадобится еще несколько моментов.
//Сохраняем результат - данная функция, сохраняет результат голосования от комментатора.
//Обязательность рейтинга - эта функция делает наш рейтинг обязательным. Если комментатор не выставит оценку, комментарий не будет отправлен. Если это вам не нужно, то не добавляйте эту часть кода, а так же в самой первой части, можете удалить код - <span class="required">*</span> По-умолчанию, в комментариях WordPress, звездочка означает обязательность заполнения. Если у вас не так, можете поменять.
//Выводим рейтинг в опубликованном комментарии - данная функция выводит рейтинг в опубликованном комментарии. То бишь результат.
//Подключаем стили dashicons - данная функция подключает вшитые в WordPress стили шрифта dashicons. Благодаря ему наши радио кнопки и превратятся в звезды. Но чтобы шрифт заработал, нужен еще один шаг.
Чтобы рейтинг красиво отобразился, ему нужно добавить CSS стили. Можете добавить их в свой файл стилей или в отдельный, а потом его подключить, в общим, как вам удобно.
.all_com_pr span:before{color:#FB9C30;}
.com_block_star{margin:10px 0;}
.comments-rating{border: none;padding: 0;margin-left: 0;}
.comments-rating label{display:inline-block;font-size:18px;}
.rating-container{font-size: 0;unicode-bidi: bidi-override;direction: rtl;}
.rating-container * {font-size: 1.4rem;}
.rating-container > input {display: none;}
.rating-container > input + label {
    font-family:'dashicons';
    display: inline-block;
    overflow: hidden;
    text-indent: 9999px;
    width: 1em;
    white-space: nowrap;
    cursor: pointer;
    margin: 0;
}
 
.rating-container > input + label:before {
    display: inline-block;
    text-indent: -9999px;
    content: "\f154";
    color: #888;
}
 
.rating-container > input:checked ~ label:before,
.rating-container > input + label:hover ~ label:before,
.rating-container > input + label:hover:before {
    content: "\f155";
    color: #FB9C30;
    text-shadow: 0 0 1px #888;
}
 
.rating-container > .star-cb-clear + label {
    text-indent: -9999px;
    width: .5em;
    margin-left: -.5em;
}
 
.rating-container > .star-cb-clear + label:before {
    width: .5em;
}
 
.rating-container:hover > input + label:before {
    content: "\f154";
    color: #888;
    text-shadow: none;
}
 
.rating-container:hover > input + label:hover ~ label:before,
.rating-container:hover > input + label:hover:before {
    content: "\f155";
    color: #FB9C30;
    text-shadow: 0 0 1px #888;
}

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

Теперь хочу показать как сделать общую оценку взятую из всех комментариев и выведенную перед контентом, то бишь перед текстом статьи. Для этого вам нужно добавить псоле уже добавленных выше функций, еще парочку:
//ПОДСЧЕТ ОБЩЕЙ ОЦЕНКИ.
function comm_rating_get_average_ratings( $id ) {
    $comments = get_approved_comments( $id );
    if ( $comments ) {
        $i = 0;
        $total = 0;
        foreach( $comments as $comment ){
            $rate = get_comment_meta( $comment->comment_ID, 'rating', true );
            if( isset( $rate ) && '' !== $rate ) {
                $i++;
                $total += $rate;
            }
        }
 
        if ( 0 === $i ) {
            return false;
        } else {
            return round( $total / $i, 1 );
        }
    } else {
        return false;
    }
}
 
// ВЫВОД ОЦЕНКИ ПЕРЕД ПОСТОМ
add_filter( 'the_content', 'comm_rating_display_average_rating' );
function comm_rating_display_average_rating( $content ) {
    global $post;
    if ( false === comm_rating_get_average_ratings( $post->ID ) ) {
        return $content;
    }
    $stars   = '';
    $average = comm_rating_get_average_ratings( $post->ID );
 
    for ( $i = 1; $i <= $average + 1; $i++ ) { $width = intval( $i - $average > 0 ? 20 - ( ( $i - $average ) * 20 ) : 20 );
 
        if ( 0 === $width ) {
            continue;
        }
 
        $stars .= '<span style="overflow:hidden; width:' . $width . 'px" class="dashicons dashicons-star-filled"></span>';
 
        if ( $i - $average > 0 ) {
            $stars .= '<span style="overflow:hidden; position:relative; left:-' . $width .'px;" class="dashicons dashicons-star-empty"></span>';
        }
    }
     
    $custom_content  = '<div class="all_com_pr">Оценка: ' . $average .' ' . $stars .'</div>';
    $custom_content .= $content;
    return $custom_content;
}

//Подсчет общей оценки - эта функция вычисляет среднюю оценку.
// Вывод оценки перед постом - то что получилось выводит перед контентом.
Выводится будет только перед контентом.

Если вас это не устраивает, вы хотите выводить где-то в своем месте, то можете вместо последней функции, добавить немного измененную, которую нужно вызывать в нужном месте.
function comm_rating_display_average_rating() {
global $post;
$stars   = '';
$average = comm_rating_get_average_ratings( $post->ID );
for ( $i = 1; $i <= $average + 1; $i++ ) { $width = intval( $i - $average > 0 ? 20 - ( ( $i - $average ) * 20 ) : 20 );
if ( 0 === $width ) {continue;}
$stars .= '<span style="overflow:hidden; width:' . $width . 'px" class="dashicons dashicons-star-filled"></span>';
if ( $i - $average > 0 ) {
$stars .= '<span style="overflow:hidden; position:relative; left:-' . $width .'px;" class="dashicons dashicons-star-empty"></span>';
}
}
$custom_content  = '<div class="all_com_pr">Оценка: ' . $average .' ' . $stars .'</div>';
echo $custom_content;
}

Что-бы вызвать данную функцию, то есть запустить ее, в нужном вам месте, внутри цикла добавьте такую строку:
comm_rating_display_average_rating();

Данная строка помещается в среду PHP, если у вас HTML, то нужно заключить строку в теги PHP, выглядеть она будет так:
<?php comm_rating_display_average_rating(); ?>

В том месте где вы разместите эту строку, там и появится рейтинг.

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

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

Добавлено: 18 Июня 2021 04:32:24 Добавил: Андрей Ковальчук

Как отключить редактор Gutenberg для записи или рубрики WordPress

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

Отключаем Gutenberg для одной или нескольких записей
Для отключения редактора Gutenberg только одной для записи, в файл функций вашей текущей темы function.php, нужно добавить небольшой фильтр и внести в него ID нужной вам записи.

Перед изменением function.php, обязательно сохраните его копию, чтобы в дальнейшем, в случаи ошибки, вернуть все как было.

add_filter( 'use_block_editor_for_post', 'disable_gutenberg_for_post', 10, 2 );
function disable_gutenberg_for_post( $use, $post ){
if( $post->ID == 855) 
return false;
return $use;
}

Все что в этом коде вы должны менять, это цифру в третей строке. 855 - это и есть ID вашей записи. Чтобы узнать нужный вам ID, перейдите в список ваших записей, найдите в нем нужную и наведите на ее название курсором.

post=2056 - и есть ID нужной вам записи. Добавляете его вместо 855 и у вашей записи будет классический редактор.

Если вы захотите отключить редактор Gutenberg для нескольких записей, то нужно и их номер добавить в код. Выглядеть это будет примерно так:
add_filter( 'use_block_editor_for_post', 'disable_gutenberg_for_post', 10, 2 );
function disable_gutenberg_for_post( $use, $post ){
if( $post->ID == 855 || $post->ID == 624 ) 
return false;
return $use;
}

$post->ID == 855 - указатель номера записи разделяется со следующим, логическим оператором PHP - ||.

Отключаем Gutenberg для одной или нескольких рубрик
С рубриками, дела обстоят аналогично, меняется код функции для фильтра, но смысл тот же. Он аналогично, с фильтром для записей, добавляется в - function.php. Теперь код выглядит так:
add_filter( 'use_block_editor_for_post', 'disable_gutenberg_for_post', 10, 2 );
function disable_gutenberg_for_post( $use){
if( has_category(1))
return false;
return $use;
}

Как и в прошлых примерах, в третей строке указывается ID нужной рубрики. В примере это - 1. Узнается ID рубрики аналогично с ID записи. Переходите в список рубрик, находите нужную, наводите и в появившейся ссылке внизу страницы увидите ID.

Если решите отключить сразу для нескольких рубрик, то нужно добавить массив, в котором указать через запятую ID рубрик. Выглядит это примерно так:
add_filter( 'use_block_editor_for_post', 'disable_gutenberg_for_post', 10, 2 );
function disable_gutenberg_for_post( $use){
if( has_category(array(1,3)))
return false;
return $use;
}

array(1,3) - и есть наш массив с айди рубрик. Поменяйте на свои и в тех что вы укажите будет выводится классический редактор.

Вот такой получилась еще одна статья об отключении редактора Gutenberg для записи или рубрики. Надеюсь мой цикл статей об этом редакторе вам помог, не знаю будут ли еще статьи о новом редакторе от WordPress, но пока больше новой полезной информации не имею.

Добавлено: 17 Июня 2021 04:32:37 Добавил: Андрей Ковальчук

Плавающая корзина с счетчиком товаров в ней для Woocommerce

Чтобы добавить такую кнопку на свой сайт нужно добавить небольшой код в вашу тему, на которой активирован плагин Woocommerce. Добавлять код нужно, например в файл шапки или подвала. Тогда, ваша иконка плавающая будет отображаться на всех страницах сайта. Лично я добавляю в файл подвала - footer.php. Конкретно, перед функцией - wp_footer();, она есть в любой теме WordPress, в файле footer.php.

<?php 
if (class_exists('WooCommerce' )){
global $woocommerce; ?>
<a href="<?php echo $woocommerce->cart->get_cart_url() ?>" class="fix_cart_btn fz_an">
        <span class="basket-btn__label">Корзина</span>
        <span class="fix_cart_count"><?php echo sprintf($woocommerce->cart->cart_contents_count); ?></span>
</a>
<?php 
} 
?>

Добавлять можно с тегами PHP, можно без, в зависимости от того в какую среду вы добавляете код. В данном примере для HTML среды, если в РНР добавляете, то нужно без первой и последней строки.

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

Внутри ссылки добавлено 2 элемента. Первый это иконка, картинка, слово или то что вы захотите туда добавить. Я добавляю иконку от шрифта Font Awesome, если у вас подключена его 5 версия, то тоже можете добавить ее вместо слова Корзина:
<i class="fas fa-shopping-basket"></i>

Придаем стили нашей кнопке. Она будет фиксированной и плавать в правом нижнем углу. Счетчик товаров в корзине будет над кнопкой в правом ее верхнем углу.
.fix_cart_btn{position:fixed;text-align:center;font-size:10px;color:#fff;line-height:50px;bottom:110px;right:40px;background:#01D19D;border-radius:50px;height:50px;width:50px;z-index:100;}
.fix_cart_btn:hover{color:#fff;background:#E666B1;}
.fix_cart_count{position:absolute;top:2px;right:2px;font-size:11px;line-height:15px;min-width:15px;font-weight:bold;background:#E666B1;-webkit-border-radius:10px;border-radius:10px;}


Вы, конечно же, можете все менять на свой вкус и под свои нужды.

Добавлено: 16 Июня 2021 04:33:53 Добавил: Андрей Ковальчук

Сортировка товаров по наличию в Woocommerce WordPress

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

Конечно же, вы можете отключить показ товаров которых нет в наличии в настройках плагина Woocommerce. Сделать это можно перейдя по вкладке в консоли - Woocommerce - Настройки - вкладка Товары - вкладка Запасы.

Но, полное отключение товаров, которых нет в наличии, может быть не совсем хорошим шагом. Ведь эти страницы повлекут потом за собой 404 ошибки, выпадут из поисковиков, а значит упадет трафик. Как известно, это не очень хорошо. Вы можете как то привлечь внимание покупателя, даже если товара нет в наличии. Если товара нет временно, можно сделать возможность сообщения, когда тот появится. Если же товар, например, снят с производства, то можно предлагать аналоги или похожие. В общем, не обязательно терять посетителей и удалять страницы. Единственное, это неправильная сортировка, что может отпугнуть посетителей, ее мы и исправим с вами сейчас.

Для этого нужно добавить небольшой код в файл функций. Как я говорил в прошлых статьях, можно добавлять в файл пользовательских функций function.php. Если вы послушались моего совета и создали отдельный файл для Woocommerce, то добавлять нужно в него, чтобы не путать функции темы и Woocommerce, если вы планируете их добавлять много.

Перед изменением function.php или того файла что у вас для функций Woocommerce, обязательно сохраните его копию, чтобы в дальнейшем, в случаи ошибки, вернуть все как было.


// СНАЧАЛА ПОКАЗЫВАТЬ ТОВАР В НАЛИЧИИ
class iWC_Orderby_Stock_Status{
public function __construct(){
    if (in_array('woocommerce/woocommerce.php', apply_filters('active_plugins', get_option('active_plugins')))) {
    add_filter('posts_clauses', array($this, 'order_by_stock_status'), 2000);
}
}
public function order_by_stock_status($posts_clauses){
global $wpdb;
if (is_woocommerce() && (is_shop() || is_product_category() || is_product_tag())) {
    $posts_clauses['join'] .= " INNER JOIN $wpdb->postmeta istockstatus ON ($wpdb->posts.ID = istockstatus.post_id) ";
    $posts_clauses['orderby'] = " istockstatus.meta_value ASC, " . $posts_clauses['orderby'];
    $posts_clauses['where'] = " AND istockstatus.meta_key = '_stock_status' AND istockstatus.meta_value <> '' " . $posts_clauses['where'];
}
return $posts_clauses;
}
}
new iWC_Orderby_Stock_Status;

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

Добавлено: 10 Июня 2021 07:34:16 Добавил: Андрей Ковальчук

Выборка за месяц, неделю

Да очень просто:

Выборка за текущий месяц:

select id from tab where date_format(real_time, '%Y%m') = date_format(now(), '%Y%m');

или вот так:
select id from tab where month(real_time) = month(now()) and year(real_time) = year(now());


За прошлый месяц:
select id from tab where date_format(real_time, '%Y%m') = date_format(date_add(now(), interval -1 month), '%Y%m');


За текущую неделю:
select id from tab where year(real_time) = year(now()) and week(real_time, 1) = week(now(), 1);


В функции week(date, N) N - это номер дня, с которого начинается неделя: 0 - с воскресенья, 1 - с понедельника

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

select id 
from tab 
where real_time > LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
  AND real_time < DATE_ADD(LAST_DAY(CURDATE()), INTERVAL 1 DAY)


за предыдущий
select id 
from tab 
where real_time > LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 2 MONTH))
  AND real_time < DATE_ADD(LAST_DAY(CURDATE() - INTERVAL 1 MONTH), INTERVAL 1 DAY)


за текущую неделю
select id 
from tab 
where real_time > DATE_SUB(CURDATE(), INTERVAL (DAYOFWEEK(CURDATE()) -1) DAY)
  AND real_time < DATE_ADD(CURDATE(), INTERVAL (9 - DAYOFWEEK(CURDATE())) DAY)

Добавлено: 09 Июня 2021 06:22:07 Добавил: Андрей Ковальчук

Правильное склонение названий месяцев в датах WordPress

Например, вы опубликовали статью, а дата в ней выглядит примерно так 30 Октябрь 2018. Согласитесь, ведь тридцатое октябрь, как то не звучит, тридцатое октября было бы лучше. Если вы столкнулись с этим и хотите исправить, при этом не менять название месяца на номер или выводить только первые три буквы месяца, то можно добавить одну функцию с несколькими фильтрами.

Для этого вам понадобится добавить немного кода в файл пользовательских функций function.php. Если вы не знакомы с этим файлом и не знаете где добавлять код, то добавляете в самый конец перед закрывающим тегом PHP ?>. Если его нет, то просто в самый конец. Добавить нужно вот такую функцию:

Перед изменением function.php, обязательно сохраните его резервную копию, чтобы в дальнейшем, в случаи ошибки, вернуть все как было.

function correct_date($cordate = ''){
if ( substr_count($cordate , '---') > 0 ){return str_replace('---', '', $cordate);}
$new_d = array(
'Январь' => 'Января',
'Февраль' => 'Февраля',
'Март' => 'Марта',
'Апрель' => 'Апреля',
'Май' => 'Мая',
'Июнь' => 'Июня',
'Июль' => 'Июля',
'Август' => 'Августа',
'Сентябрь' => 'Сентября',
'Октябрь' => 'Октября',
'Ноябрь' => 'Ноября',
'Декабрь' => 'Декабря'
);
return strtr($cordate, $new_d);
}
add_filter('the_date', 'correct_date');
add_filter('get_the_date', 'correct_date');
add_filter('the_time', 'correct_date');
add_filter('get_the_time', 'correct_date');
add_filter('get_post_time', 'correct_date');
add_filter('get_comment_date', 'correct_date');
add_filter('the_modified_time', 'correct_date');
add_filter('get_the_modified_date', 'correct_date');

У нас есть функция correct_date. Как видите с четвертой строки ее кода начинается замена старых названий на новые. По желанию можете задать свои, например с малой буквы. Данный массив с заменой подойдет для русской версии движка WordPress. Если вы используете английскую, у вас все переведено и нужно исправить дату - то массив будет такой:
$new_d = array(
        "Jan" => "Января",
        "Feb" => "Февраля",
        "Mar" => "Марта",
        "Apr" => "Апреля"
        "May" => "Мая",
        "Jun" => "Июня",
        "Jul" => "Июля",
        "Aug" => "Августа",
        "Sep" => "Сентября",
        "Oct" => "Октября",
        "Nov" => "Ноября",
        "Dec" => "Декабря"
    );

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

Теперь давайте разберем фильтры, которые подключаются функцию склонения названий. Разберем по порядку:

add_filter('the_date', 'correct_date'); - данный фильтр прикрепляет функцию к выводу на экран или даты публикации поста или группы постов.
add_filter('get_the_date', 'correct_date'); - аналогичный с первым только для функции get_the_date().
add_filter('the_time', 'correct_date'); - данный фильтр прикрепляет функцию склонения к выводу на экран времени (даты) публикации текущей записи в цикле WordPress. the_time - идентична the_date().
add_filter('get_the_time', 'correct_date'); - аналогично с предыдущими.
add_filter('get_post_time', 'correct_date'); - этот фильтр для функции get_post_time, которая получает результат для обработки, а не выводит его на экран.
add_filter('get_comment_date', 'correct_date'); - фильтр для функции get_comment_date, что получает дату указанного комментария.
add_filter('the_modified_time', 'correct_date'); - фильтр для функции the_modified_time, что выводит дату изменения записи.
add_filter('get_the_modified_date', 'correct_date'); - аналогично с предыдущим.
Все эти фильтры затрагивают все функции, что выводят, или получают даты на WordPress. Вы можете не все использовать. Если вам нужно изменить вывод только даты публикации поста и эта дата вызывается только функцией the_date, то вам нужен только первый фильтр и все. Ну и аналогично для остальных.

Вот и все что нужно знать по этому вопросу, теперь вы легко сможете решить проблему со склонением месяцев.

Добавлено: 08 Июня 2021 06:35:41 Добавил: Андрей Ковальчук

Как показать скрыть часть пунктов из списка

Такой функционал можно использовать везде. Мне в моей практике несколько раз пригодился данный метод. Один из вариантов был вывод пунктов на посадочной странице. Список имел много пунктов, которые содержали ключевые слова. Отображать все сразу не имело смысла, но все же они могли быть интересны посетителю, поэтому было принято решение скрыть часть из них. Таким же образом можно сделать галерею со скрывающимися изображениями. В общим, вариантов множество, перечислять их не имеет смысла.

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

Первым шагом в создании такого свернутого списка, будет добавление HTML кода со списком на страницу, если у вас ее нет, если у вас уже есть свой список, то адаптируйте его согласно этому.

<ul class="list">
<li>Пункт номер раз</li>
<li>Пункт номер два</li>
<li>Пункт номер три</li>
<li>Пункт номер четыре</li>
<li>Пункт номер пять</li>
<li>Пункт номер шесть</li>
<li>Пункт номер семь</li>
<li>Пункт номер восемь</li>
<li>Пункт номер девять</li>
<li>Пункт номер десять</li>
</ul>
<div class="show_hide_list">Смотреть все</div>

Тут все просто. Задаем список и присваиваем ему класс list. Можете указать свой, только в скрипте тоже надо будет указать свой новый класс. Так же, обязательно. нужно добавить кнопку, в нашем случаи это просто блок, с классом show_hide_list.

Второй шаг, добавляем стили для нашего списка и кнопки:
ul.list li:nth-child(n+6){display:none;}
.show_hide_list{cursor:pointer;display:inline-block;text-align:center;padding:10px;background:#fc0;}

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

Теперь мы должны убедится что к сайту уже подключена библиотека jQuery. Если нет, то это нужно сделать.
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>

Следующий шаг, подключение уже самого скрипта, который будет осуществлять показ, скрытие пунктов из списка. Его нужно подключить после библиотеки, которую мы подключали выше. Можете воспользоваться той же инструкцией с подсказками как это сделать правильно.
jQuery(document).ready(function($){
if($('ul.list').find('li').length > 5){
$('.show_hide_list').click(function(){
$('ul.list li:nth-child(n+6)').slideToggle('');
$(this).toggleClass('opnd_g');
if($(this).hasClass('opnd_g')){
$(this).html('Скрыть');}
else {$(this).html('Смотреть все');}
});
}else{$('.show_hide_list').hide();}
});

Давайте разберем скрипт построчно, что бы понять как он работает. Начнем со второй строки, потому как в первой просто объявляем, что скрипт будет выполняться только тогда, когда загружен весь HTML и построен DOM, а в последней, просто закрываем функцию.

if($('ul.list').find('li').length > 5){ - Задаем условие. Если у нашего списка, что имеет класс - .list имеются пункты li и их количество больше пяти.
$('.show_hide_list').click(function(){ - Запускаем функцию, которая сработает, если мы нажмем на элемент страницы с классом show_hide_list, то бишь на нашу кнопку, что расположена после списка.
$('ul.list li:nth-child(n+6)').slideToggle(''); - После нажатия показываем пункты с шестого и до последнего. Если вы поменяли количество в стилях, то меняйте и здесь соответственно.
$(this).toggleClass('opnd_g'); - Добавляем нашей кнопке после нажатия класс opnd_g.
if($(this).hasClass('opnd_g')){ - Создаем условие, что если наша кнопка имеет класс opnd_g, то...
$(this).html('Скрыть');} - То меняем текст в кнопке - Смотреть все на Скрыть.
else {$(this).html('Смотреть все');} - Или, если после нажатия на кнопку класса opnd_g нет, то меняем текст на кнопке снова на Смотреть все.
}); - Просто заканчиваем наше условие по нажатию на кнопку.
}else{$('.show_hide_list').hide();} - а это противоположное действие изначальному условию со второй строки, которое задавало действие если пунктов больше 5. То бишь, если пунктов меньше пяти, кнопка Смотреть все - будет скрыта полностью, чтобы не вводить в заблуждение посетителей сайта.

UPD: 11.12.2019

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

Кнопка должна быть сразу под списком! Иначе способ не сработает.

// ЗАМЕНИТЬ ЭТО
$('ul.list li:nth-child(n+6)').slideToggle('');
// НА ЭТО
$(this).prev().children('li:nth-child(n+6)').slideToggle('');

Вот и весь скрипт. Он простенький и справляется с задачей. Теперь вы сможете его если захотите на странице вашего сайта скрыть несколько пунктов вашего списка.

Добавлено: 06 Июня 2021 04:35:41 Добавил: Андрей Ковальчук

Скрипт что определяет мобильное устройство

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

Именно для этого существует скрипт, который и помогает решить подобные задачи. Носит название он - Current Device. Суть данного скрипта в том, что он добавляет на страницу классы, в зависимости от того, на каком устройстве просматривается сайт.

В примере можете протестировать страницу файрбагом. Выбрать разные устройства. Чтобы добавлялся соответственный класс, нужно перезагружать страницу. Как видно на странице примера список классов, что могут быть добавлены. Соответствующий класс присваивается тегу <html>. Скачать архив с скриптом.

На странице примера указаны следующие параметры и классы к ним, давайте их разберем.

Тип устройства - классы данной категории присваиваются в зависимости от устройства на котором открыт сайт:
.mobile - класс что присваивается, если страница открыта на мобильном устройстве.
.tablet - класс что присваивается, если страница открыта на планшете.
.desktop - класс что присваивается, если страница открыта на персональном компьютере.
Положение устройства - классы этой категории присваиваются в зависимости от положения, ориентации устройства. То есть, экран устройства в горизонтальном или вертикальном положении.

.portrait - класс что присваивается, если устройство имеет вертикальную ориентацию.
.landscape - класс что присваивается, если устройство имеет горизонтальную ориентацию.
Операционная система - классы данной категории присваиваются в зависимости от того какая операционная система установлена на устройстве. Данные классы пригодятся если важно отображать разные элементы для устройств с разной ОС.
.ios, .iphone, .ipad, .ipod, .android, .blackberry, .macos, .windows, .fxos, .meego, .television - классы с названием операционных систем, что и будут присвоены.
В моей практике, данный скрипт выручал меня несколько раз ,в основном благодаря классам .mobile и .desktop. Скорее всего и вам именно они и понадобятся. Как и говорил в начале статьи, данные классы не для CSS, хотя и там можно их использовать. Эти классы скорее для скриптов, когда нужно заставить работать скрипт, только при наличии класса на странице. Примерная функция выглядит так:

$('.mobile .block').click(function(){
//СЮДА КОД ФУНКЦИИ ДЛЯ МОБИЛЬНОГО УСТРОЙСТВА
});

В данном случаи функция сработает если вы нажали на элемент с классом .block на мобильном устройстве. Для ПК такая функция будет аналогична, но с классом .desktop.
$('.desktop .block').click(function(){
//СЮДА КОД ФУНКЦИИ ДЛЯ КОМПЬЮТЕРА
});

Таким образом можете применять работу разных скриптов в зависимости от устройства. Сам скрипт можете скопировать с файла current-device.js и добавить в свои файлы или подключить отдельно.

Добавлено: 30 Мая 2021 07:07:59 Добавил: Андрей Ковальчук

Как изменить или отключить чекбокс — Сохранить моё имя, email и адрес сайта в этом браузере для последующих моих комментариев

В связи с тем, что сейчас все больше и больше стран принимает законы об обработке персональных данных, то как и в других системах управления сайта, так и WordPress появляются изменения, чтобы не нарушать дынные законы. Чекбокс о запросе сохранения имя и email, как раз таки, одно из таких изменений. Он работает по следующему принципу - когда посетитель сайта активирует чекбокс и дает свое согласие на хранение своих данных в браузере, в следующий раз, когда он будет находится на страницах того сайта где он его активировал, его персональные данные - имя и email автоматически заполнятся в полях.

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

Для начала рассмотрим вариант с полным отключением чекбокса. Для этого вам нужно добавить в файл функций вашей темы - functions.php, небольшую функцию. Если вы не ориентируетесь в функциях этого файла, то добавляете в самый конец перед закрывающим тегом PHP ?>. Если его нет, то просто в самый конец.

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


/* ОТКЛЮЧАЕМ ЧЕКБОКС */
function comment_hide_checkcdpr( $fields ) {
    unset( $fields['cookies'] );
    return $fields;
}
add_filter( 'comment_form_default_fields', 'comment_hide_checkcdpr' );

Тут все просто, особо разбирать нечего, каких-то настроек нет. Далее разберем вариант, когда чекбокс надо оставить, но подпись к нему изменить. Как и с первым кодом, добавляйте данную функцию туда же.
/* МЕНЯЕТ ТЕКСТ ЧЕКБОКСА */
function comment_change_checkcdpr( $fields ) {
    $fields['cookies'] = '<p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes" />' .
    '<label for="wp-comment-cookies-consent">Сохранить имя и email.</label></p>';
    return $fields;
}
add_filter( 'comment_form_default_fields', 'comment_change_checkcdpr' );

В 2 и 3 строке сам чекбокс и label к нему. Как раз содержимое label, вам и нужно менять. В данном примере стандартная надпись заменена на Сохранить имя и email. Кстати, данный код можно добавить на сайт, если у вас нет чекбокса и вы хотите его иметь.

Еще как бонус, хочу предложить вариант данного кода с дополнительной функцией, проверки сохранял ли данный пользователь ранее данные. Если сохранял - чекбокс будет отмечен. По сути это тот же код, только с маленькими правками.
/* МЕНЯЕТ ТЕКСТ ЧЕКБОКСА И ДЕЛАЕМ ЧЕКБОКС АКТИВНЫМ, ЕСЛИ РАНЕЕ СОХРАНЯЛИСЬ ДАННЫЕ */
function comment_change_checkcdpr( $fields ){
    $user_ca = wp_get_current_commenter();
    $checked = empty( $user_ca['comment_author_email'] ) ? '' : ' checked="checked"';
    $fields['cookies'] = '<p class="comment-form-cookies-consent"><input id="wp-comment-cookies-consent" name="wp-comment-cookies-consent" type="checkbox" value="yes"' . $checked . ' />' .
    '<label for="wp-comment-cookies-consent">Сохранить имя и email.</label></p>';
    return $fields;
}
add_filter( 'comment_form_default_fields', 'comment_change_checkcdpr' );

Давайте рассмотрим, какие изменения добавлены в этой версии функции.

Во второй строке создаем переменную $user_ca и задаем ей значение - wp_get_current_commenter() .wp_get_current_commenter() - это функция, которая получает имя, почту, URL сайта текущего комментатора из куков.
В третей строке создаем еще одну переменную - $checked и ее значение, это проверка сохраненные ли у данного комментатора в браузере имя и почта к вашему сайту. Если это так, то чекбоксу прописывается параметр checked="checked". То бишь, комментатору который уже давал согласие, не нужно вновь отмечать чекбокс.
Последнее, это выводим нашу переменную $checked в 4 строке в параметрах самого чекбокса.
Вот и весь материал. Он простенький и справляется с задачей. Теперь вы сможете загружать менять или отключать данный чекбокс с проверкой на сохранение персональных данных. Надеюсь, данный материал помог вам.

Добавлено: 28 Мая 2021 07:20:10 Добавил: Андрей Ковальчук

В чем разница между mysqli_affected_rows и mysqli_num_rows?

Недавно я искал разницу и обнаружил, что в то время как yes mysqli_num_rows подсчитывает, сколько строк нашел ваш оператор SELECT .

mysqli_affected_rows will count how many rows your UPDATE/INSERT/DELETE/REPLACE and SELECT statement 'affected'.

Unless you are trying to compare between the number of rows returned in a SELECT statement vs. the number of rows affected in an UPDATE/INSERT/DELETE/REPLACE than there is no huge concern over which you need to be using. If you want to be semantically correct than use the appropriate one for the corresponding statement.

https://dev.mysql.com/doc/refman/8.0/en/mysql-affected-rows.html

For SELECT statements, mysql_affected_rows() works like mysql_num_rows()

Добавлено: 20 Мая 2021 06:06:19 Добавил: Андрей Ковальчук