Как ChatGPT 3.5 помог мне написать шорткод для Вордпресс
Этот текст написан в Сообществе, в нем сохранены авторский стиль и орфография
Немного истории… Короче говоря есть страница к примеру: "котята". И есть несколько дочерних: белые серые и т.д. У меня на 1 из сайтов таких, дочерних страниц 201. Параллельно есть таксономии привязанные к типу поста "котята" который не индексируется. Он нужен только для распределения котят по категориям с последующим выводом на страницах в собственном шаблоне и не больше.
Так вот, после публикации и распределения условных "котят" по категориям, нужно было выводить их на соответствующих страницах.
Маленькое уточнение! Я не супер в PHP но базовое понятие функций движка Wordpress есть, так что как поставить задачу чату проблем не возникло. Почему решил написать эту статью спросите вы? Отвечаю: по началу трудно всем и может именно эта статья даст толчок некоторым новичкам, так как сам процесс, очень интересен и познавателен, и ChatGPT объясняет что, где и за что отвечает и куда это все совать. Гуру вам этого не скажут бесплатно;)
Мне нужно было вывести количество из каждой категории (циферки что в кружке). Это пример. Так можно сделать для любого типа поста к примеру (товаров), чтобы не нагружать движок плагином WOOCOMERCE и т.д.
Итак моя переписка с ChatGPT и примерами кода (может кому пригодится)
Я. Привет! Сможешь написать шорткод для вордпресс?
ChatGPT. Привет! Конечно, я могу помочь с написанием шорткода для WordPress. Что именно вы хотели бы добавить с помощью шорткода?
Я. У меня есть taxonomy=summ, в ней есть есть tag_ID=253, tag_ID=242 и т.д. Нужно написать шорткод для подсчета количества постов, привязанных к определенным id или slug в таксономии.
ChatGPT. Конечно, вот пример шорткода для подсчета количества постов по заданным tag_ID или slug в таксономии summ:
function count_posts_in_taxonomy_shortcode($atts) {
ㅤ// Парсим атрибуты шорткода
ㅤㅤ$atts = shortcode_atts(array(
ㅤㅤㅤㅤ’tag_id' => '',
ㅤㅤㅤㅤ’slug' => '',
ㅤㅤ), $atts, 'count_posts_in_taxonomy');
// Параметры запроса
ㅤㅤ$args = array(
ㅤㅤㅤㅤ’post_type' => 'post', // Укажите нужный тип записи, если это не статьи
ㅤㅤㅤㅤ’post_status' => 'publish',
ㅤㅤㅤㅤ’tax_query' => array(
ㅤㅤㅤㅤㅤㅤarray(
ㅤㅤㅤㅤㅤㅤㅤㅤ’taxonomy' => 'summ',
ㅤㅤㅤㅤㅤㅤㅤㅤ’field' => is_numeric($atts['tag_id'])? 'id': 'slug',
ㅤㅤㅤㅤㅤㅤㅤㅤ’terms' => $atts['tag_id']? $atts['tag_id']: $atts['slug'],
ㅤㅤㅤㅤㅤㅤ),
ㅤㅤㅤㅤ),
ㅤㅤ);
// Получаем количество постов
ㅤㅤ$post_count = count(get_posts($args));
// Возвращаем результат
ㅤㅤreturn $post_count; }
// Регистрируем шорткод
ㅤㅤadd_shortcode('count_posts_in_taxonomy',
ㅤ’count_posts_in_taxonomy_shortcode');
Как использовать шорткод:
Если вы хотите подсчитать количество постов для tag_ID=253, используйте [count_posts_in_taxonomy tag_id="253"].
Если вы хотите подсчитать количество постов для slug='example', используйте [count_posts_in_taxonomy slug="example"].
Убедитесь, что код добавлен в файл functions.php вашей темы или в плагин для пользовательского кода.
Я. Спасибо! Ты гений!
ChatGPT. Пожалуйста! Рад был помочь! Если у вас есть ещё вопросы или нужна дополнительная помощь, не стесняйтесь спрашивать. Удачи с вашим проектом WordPress!
Я. А можно как-то укоротить код
ChatGPT. Конечно, можно упростить код, используя более компактные конструкции. Вот более краткая версия:
function count_posts_in_taxonomy_shortcode($atts) {
ㅤㅤ$atts = shortcode_atts(['tag_id' => '', 'slug' => ''], $atts, 'count_posts_in_taxonomy');
ㅤㅤ$args = [
ㅤㅤㅤㅤ’post_type' => 'post',
ㅤㅤㅤㅤ’post_status' => 'publish',
ㅤㅤㅤㅤ’tax_query' => [[
ㅤㅤㅤㅤㅤㅤ’taxonomy' => 'summ',
ㅤㅤㅤㅤㅤㅤ’field' => is_numeric($atts['tag_id'])? 'id': 'slug',
ㅤㅤㅤㅤㅤㅤ’terms' => $atts['tag_id']?: $atts['slug'],
ㅤㅤㅤㅤ]],
ㅤㅤ];
ㅤㅤreturn count(get_posts($args));
}
add_shortcode('count_posts_in_taxonomy',
'count_posts_in_taxonomy_shortcode');
В этой версии я использовал более сжатый синтаксис массивов и оператор условия с тернарным оператором для укорачивания кода. Все функциональные части остаются теми же. Если у вас есть какие-либо вопросы или нужны дополнительные пояснения, дайте знать!
Я. Не работает! Выводит правильно только первые 2 категории а в остальных выводит цифру 5
ChatGPT. Приношу извинения за это недоразумение. Проблема, вероятно, связана с тем, что в запросе используется параметр terms, который ожидает одно значение. Если вам нужно передать несколько значений, вы можете использовать IN вместо конкретного значения. Вот обновленный код, который должен решить проблему:
function count_posts_in_taxonomy_shortcode($atts) {
ㅤㅤ$atts = shortcode_atts(['tag_id' => '', 'slug' => ''], $atts, 'count_posts_in_taxonomy');
ㅤㅤ$terms = $atts['tag_id']? (array) $atts['tag_id']: [$atts['slug']];
ㅤㅤ$args = [
ㅤㅤㅤㅤ’post_type' => 'post',
ㅤㅤㅤㅤ’post_status' => 'publish',
ㅤㅤㅤㅤ’tax_query' => [[
ㅤㅤㅤㅤㅤㅤ’taxonomy' => 'summ',
ㅤㅤㅤㅤㅤㅤ’field' => is_numeric($atts['tag_id'])? 'id': 'slug',
ㅤㅤㅤㅤㅤㅤ’terms' => $terms,
ㅤㅤㅤㅤ]],
ㅤㅤ];
ㅤㅤreturn count(get_posts($args));
}
add_shortcode('count_posts_in_taxonomy',
'count_posts_in_taxonomy_shortcode');
Теперь код преобразует переданные значения в массив и использует их в параметре terms запроса. Надеюсь, это решит проблему. Если у вас есть ещё вопросы или проблемы, дайте знать!
Я. Проблема та же. Я использую несколько шорткодов на 1 странице.
ChatGPT. Понял, проблема может быть связана с тем, что запросы могут взаимодействовать друг с другом, особенно если они используют общие ресурсы. Давайте попробуем улучшить код для более надежного использования в множественных вызовах:
function count_posts_in_taxonomy_shortcode($atts) {
ㅤㅤ$atts = shortcode_atts(['tag_id' => '', 'slug' => ''], $atts, 'count_posts_in_taxonomy');
ㅤㅤ$taxonomy = 'summ';
ㅤㅤ$field = is_numeric($atts['tag_id'])? 'id': 'slug';
ㅤㅤ$terms = $atts['tag_id']? [(int) $atts['tag_id']]: [$atts['slug']];
ㅤㅤ$args = [
ㅤㅤㅤㅤ’post_type' => 'post',
ㅤㅤㅤㅤ’post_status' => 'publish',
ㅤㅤㅤㅤ’tax_query' => [
ㅤㅤㅤㅤㅤㅤ[
ㅤㅤㅤㅤㅤㅤㅤㅤ’taxonomy' => $taxonomy,
ㅤㅤㅤㅤㅤㅤㅤㅤ’field' => $field,
ㅤㅤㅤㅤㅤㅤㅤㅤ’terms' => $terms,
ㅤㅤㅤㅤㅤㅤ],
ㅤㅤㅤㅤ],
ㅤㅤ];
ㅤㅤ$query = new WP_Query($args);
ㅤㅤreturn $query→found_posts;
}
add_shortcode('count_posts_in_taxonomy',
'count_posts_in_taxonomy_shortcode');
В этой версии я заменил get_posts на WP_Query, чтобы иметь больше контроля над запросом. Также добавлены некоторые дополнительные параметры, чтобы убедиться, что каждый вызов шорткода работает независимо. Пожалуйста, протестируйте этот вариант и дайте знать, работает ли он в вашем случае.
Я. Вот теперь точно красавчик!!! Все заработало! Спасибо большущее!
ChatGPT. Отлично! Рад был помочь! Если у вас возникнут ещё вопросы или вам потребуется дополнительная помощь, не стесняйтесь обращаться. Удачи в вашем проекте!
Вот такой результат! Что хочется сказать в завершение: результат каждого зависит только от его фантазий так что однозначно не нужно боятся экспериментировать. Я бы и сам написал этот код, но пришлось бы потерять в 5 раз больше времени и каждый раз перечитывать кодекс WP или WP КАМУ. Спасибо за внимание! Деление опытом и идеи приветствуются!