Работа с ChatGPT (личный опыт)
3 поста
3 поста
1 пост
Я: Привет! Помоги создать плагин wordpress для автогенерации sitemap.xml по всем стандартам поисковых систем. Сможешь?
ChatGPT: Привет! Конечно, я помогу тебе создать плагин для WordPress, который будет автоматически генерировать файл sitemap.xml по всем стандартам поисковых систем. Давайте начнем.
Создание плагина WordPress включает несколько шагов:
Создание структуры плагина
Написание основного файла плагина
Генерация sitemap.xml
Обработка событий добавления, обновления и удаления контента
Обработка запросов к sitemap.xml
Для начала создадим структуру папок и файлов для нашего плагина:
wp-content/
└── plugins/
└── my-sitemap-plugin/
├── my-sitemap-plugin.php
├── includes/
│ └── sitemap-generator.php
Файл my-sitemap-plugin.php является основным файлом плагина. В нем мы регистрируем наш плагин и подключаем необходимые файлы.
<?php
/*
Plugin Name: My Sitemap Plugin
Description: Плагин для автоматической генерации sitemap.xml.
Version: 1.0
Author: Ваше Имя
*/
// Определяем константы
define('MY_SITEMAP_PLUGIN_DIR', plugin_dir_path(__FILE__));
define('MY_SITEMAP_PLUGIN_URL', plugin_dir_url(__FILE__));
// Подключаем файл генератора sitemap
require_once MY_SITEMAP_PLUGIN_DIR . 'includes/sitemap-generator.php';
// Регистрируем активацию плагина
register_activation_hook(__FILE__, 'my_sitemap_plugin_activate');
function my_sitemap_plugin_activate() {
my_generate_sitemap();
}
// Регистрируем деактивацию плагина
register_deactivation_hook(__FILE__, 'my_sitemap_plugin_deactivate');
function my_sitemap_plugin_deactivate() {
my_delete_sitemap();
}
// Добавляем действия для генерации sitemap при изменении контента
add_action('save_post', 'my_generate_sitemap');
add_action('deleted_post', 'my_generate_sitemap');
add_action('trashed_post', 'my_generate_sitemap');
// Обрабатываем запросы к sitemap.xml
add_action('init', 'my_sitemap_rewrite_rule');
function my_sitemap_rewrite_rule() {
add_rewrite_rule('^sitemap\.xml$', 'index.php?sitemap=1', 'top');
}
add_filter('query_vars', 'my_sitemap_query_var');
function my_sitemap_query_var($vars) {
$vars[] = 'sitemap';
return $vars;
}
add_action('template_redirect', 'my_sitemap_template');
function my_sitemap_template() {
if (get_query_var('sitemap')) {
my_generate_sitemap();
exit;
}
}
Теперь создадим файл includes/sitemap-generator.php, который будет содержать функции для генерации и удаления sitemap.xml.
<?php
function my_generate_sitemap() {
$posts = get_posts(array(
'numberposts' => -1,
'post_type' => array('post', 'page'), // Здесь добавляем или удаляем нужные типы постов для включения в sitemap
'post_status' => 'publish',
));
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"></urlset>');
foreach ($posts as $post) {
$url = $xml->addChild('url');
$url->addChild('loc', get_permalink($post));
$url->addChild('lastmod', get_the_modified_time('c', $post));
$url->addChild('changefreq', 'monthly'); // Здесь настраиваем частоту обновления
$url->addChild('priority', '0.8'); // Здесь настраиваем приоритет (у меня стоит этот 0.8)
}
$xml->asXML(ABSPATH . 'sitemap.xml');
}
function my_delete_sitemap() {
$sitemap = ABSPATH . 'sitemap.xml';
if (file_exists($sitemap)) {
unlink($sitemap);
}
}
Функции my_generate_sitemap и my_delete_sitemap уже подключены к соответствующим событиям в основном файле плагина. Эти функции будут вызываться при добавлении, обновлении и удалении постов или страниц.
В основном файле плагина мы добавили правила перезаписи URL и обработку запросов. Когда кто-то обращается к sitemap.xml, срабатывает функция my_sitemap_template, которая вызывает генерацию sitemap.xml и завершает выполнение скрипта.
Теперь у нас есть полностью функциональный плагин для автоматической генерации sitemap.xml в WordPress. Этот плагин будет следить за изменениями контента и автоматически обновлять sitemap.xml, чтобы он всегда соответствовал текущему состоянию сайта.
Я! Спасибо, все работает!
P. S Результат: https://vse-mikrozaymy.ru/sitemap.xml (не реклама). Чтобы посмотреть как ее видят поисковики нажмите Ctrl + U. Короче ничего лишнего.
Кому надо пользуйтесь на здоровье!
Государство бориться с черными кредиторами, т.е. (незаконными мфо или нарушающие законодательство). Легальные микрофинансовые организации состоящие в гос. реестре ЦБ РФ вполне законный бизнес. Статью про МФО, какими органами и законами регулируются читайте по ссылке (целая огромная статья об этом): https://vse-mikrozaymy.ru/chto-takoe-mfo-kak-i-kem-oni-reguliruyutsya-v-rossii/
И вообще что радует и внушает чуть оптимизма, что в последнее время ЦБ начал менять законодательство в лучшую сторону для граждан (хотелось бы побыстрее и побольше)... К примеру с 1 июля 2024, начал действовать закон согласнл которому кредитные и другие организации обязаны отвечать на обращения граждан в течение 15 рабочих дней. Подробнее об написано здесь. А если гражданин хочет все-таки прибегнуть к МФО, то ему необязательно (даже если МФО поддерживает авторизацию через Госуслуги) её проходить этим способом. Потрудился минут 10-15, заполнил анкету, сгенерил надежный пароль и никакой мошенник не взломает его так как никому он не нужен. Мошенники взламывают жирные сервисы где можно получить много данных... Вот и все! А я пошел на рыбалку...



Скриншоты: https://vse-mikrozaymy.ru/, https://vse-mikrozaymy.ru/na-kartu/, https://vse-mikrozaymy.ru/kurs-valyut-cb-rf/usd/
Короче нужно было сделать так, чтобы ссылки ведущие на текущую страницу стали неактивны и меняли цвет, для удобства пользователя и немного для SEO.
Итак поехали:
Я: Нужно написать функцию чтобы при нахождении на текущей странице сайта wordpress все активные ссылки которые указывают на неё же, стали неактивными. Можно это сделать?
GPT: Да, конечно, можно написать функцию для WordPress, которая будет проверять все активные ссылки на текущей странице и делать неактивными те из них, которые указывают на текущую страницу. Для этого мы можем использовать jQuery в WordPress. Ниже приведен пример кода:
Добавьте следующий код в файл functions.php вашей темы (или в плагин, если вы пишете плагин):
<?php
add_action('wp_footer', 'disable_self_links');
function disable_self_links() {
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
var currentPage = '<?php echo get_permalink(); ?>';
$('a').each(function() {
var link = $(this).attr('href');
if (link && link === currentPage) {
$(this).removeAttr('href').css('cursor', 'not-allowed').click(function(e) {
e.preventDefault();
});
}
});
});
</script>
<?php
}
?>
Этот код добавляет скрипт jQuery в подвал вашей страницы WordPress. При загрузке страницы он находит текущую страницу (используя get_permalink()) и затем проверяет каждую ссылку на странице. Если ссылка указывает на текущую страницу, то ссылка делается неактивной (удаляется атрибут href), меняется курсор на not-allowed и добавляется обработчик клика, который предотвращает действие по умолчанию.
Сохраните изменения в файле functions.php.
Теперь, когда вы открываете страницу в WordPress, все активные ссылки, указывающие на текущую страницу, будут неактивными для кликов пользователей.
Я: Все работает! Спасибо!
Этот код только делает ссылки неактивными и меняет курсор. Я примерил его и потом решил попросить доработать код немного:
Я: Можешь немножко дополнить скрипт. Заменить тег ссылки на <div> и добавить класс "current".
GPT: Конечно, можно добавить класс "current" к тегу <div>, который заменит тег <a>. Вот обновленный скрипт:
add_action('wp_footer', 'replace_links_with_div_current');
function replace_links_with_div_current() {
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
var currentPage = '<?php echo get_permalink(); ?>';
$('a').each(function() {
var link = $(this).attr('href');
var isSearchResultsPage = $(this).closest('.search-results').length > 0;
if (link && link === currentPage && !isSearchResultsPage) {
var divElement = $('<div>').addClass('current').html($(this).html());
$(this).replaceWith(divElement);
}
});
});
</script>
<?php
}
Теперь при замене тега <a> на <div>, этот <div> будет иметь класс "current". Если у вас есть еще вопросы или запросы, не стесняйтесь спрашивать!
Я: Спасибо! Все работает!
Вот такой результат: кого интересует может посмотреть здесь (не реклама). Смотрите в сайдбаре ссылки. Видно лучше всего что ссылка ведущая на текущую страницу стала неаетивной и красно-оранжевого цвета.
В одном посте на DTF, в комментариях люди говорят что GPT часто ошибается (вот комментарии). Я с этим не согласен. Единственное что хочу от себя добавить: в настройках GPT всегда разрешите сохранять историю, и ставьте вопросы конкретно и пошагово. Если вы его попросите сделать все сразу, то результат будет неудовлетворительным.
Всем пока! Удачи с вашими проектами!
СПБ Биржа (до 2021 года — Санкт-Петербургская биржа) – это российская биржа, основанная в 1997 году. Она является крупнейшей в стране по объему торгов иностранными ценными бумагами.
Покупка и продажа акций иностранных компаний:
Примеры: Apple, Tesla, Microsoft, Alibaba, Tencent, Meta (Facebook), Amazon, Alphabet (Google), Johnson & Johnson, Berkshire Hathaway.
Покупка и продажа биржевых фондов (ETF):
Примеры: широкий спектр ETF на различные активы, такие как акции (например, S&P 500, MSCI World), облигации (например, Bloomberg Barclays Global Aggregate Bond Index), золото (например, SPDR Gold Shares), нефть (например, United States Oil Fund).
Покупка и продажа еврооблигаций:
Примеры: облигации, выпущенные в иностранной валюте (например, долларах США, евро) крупными компаниями и правительствами.
Доступ к широкому спектру иностранных ценных бумаг: возможность инвестировать в компании со всего мира, что позволяет диверсифицировать портфель и снизить риски.
Торги в валюте оригинального листинга: нет необходимости конвертировать рубли в иностранную валюту, что экономит на комиссиях и конвертации.
Низкие комиссии: комиссии на СПБ Бирже как правило ниже, чем на других биржах.
Удобное время торгов: торги на бирже проходят с 10:00 до 18:45 по московскому времени, что удобно для инвесторов из России.
Надежность: СПБ Биржа – это лицензированная биржа, которая входит в группу Московской биржи.
Открыть брокерский счет: для торговли на бирже нужен брокерский счет.
Примеры брокеров: Тинькофф Инвестиции, Сбербанк Инвестиции, БКС Мир Инвестиций, Финам, Альфа-Инвестиции.
Примеры стратегий:
Долгосрочное инвестирование: покупка и удержание акций на длительный срок (от нескольких лет).
Спекуляция: покупка и продажа акций в краткосрочной перспективе от колебаний цен.
Диверсификация портфеля: не стоит вкладывать все деньги в одну компанию или сектор.
Начните с небольших сумм: не стоит сразу инвестировать большие суммы денег.
Не инвестируйте деньги, которые вам не жалко потерять: помните, что инвестирование на бирже связано с риском.
Не принимайте поспешных решений: тщательно анализируйте информацию перед покупкой или продажей акций.
Следите за новостями: новости могут влиять на цены акций.·Не бойтесь задавать вопросы: брокеры и другие участники рынка могут помочь вам разобраться в тонкостях инвестирования.
Сайт СПБ Биржи: https://spbexchange. ru/
Курсы по инвестированию: https://www.tinkoff.ru/invest/education/
Книга «Инвестиции для начинающих» от издательства «Альпина Паблишер»: https://avidreaders.ru/book/investicii-dlya-nachinayuschih.h...
YouTube-каналы: «РБК Инвестиции», «InvestFuture», «Простые инвестиции»
Надеюсь, эта информация поможет вам начать изучение темы инвестирования на СПБ Бирже.
Немного истории... Короче говоря есть страница к примеру: "котята". И есть несколько дочерних: белые серые и т.д. У меня на 1 из сайтов таких, дочерних страниц 201. Параллельно есть таксономии привязанные к типу поста "котята" который не индексируется. Он нужен только для распределения котят по категориям с последующим выводом на страницах в собственном шаблоне и не больше.
Так вот, после публикации и распределения условных "котят" по категориям, нужно было выводить их на соответствующих страницах.
Маленькое уточнение! Я не супер в PHP но базовое понятие функций движка Wordpress есть, так что как поставить задачу чату проблем не возникло. Почему решил написать эту статью спросите вы? Отвечаю: по началу трудно всем и может именно эта статья даст толчок некоторым новичкам, так как сам процесс, очень интересен и познавателен, и ChatGPT объясняет что, где и за что отвечает и куда это все совать. Гуру вам этого не скажут бесплатно;)
Для мотивации конечный результат на фронтенде... https://vse-mikrozaymy.ru/summy/
Мне нужно было вывести количество из каждой категории (циферки что в кружке). Это пример. Так можно сделать для любого типа поста к примеру (товаров), чтобы не нагружать движок плагином WOOCOMERCE и т.д.
Я. Привет! Сможешь написать шорткод для вордпресс?
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'); $tax $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 КАМУ. Спасибо за внимание! Деление опытом и идеи приветствуются!