Files
agroexpert/functions.php

1190 lines
41 KiB
PHP
Raw Normal View History

2024-03-01 17:47:03 +03:00
<?php
setlocale(LC_TIME, 'ru_RU.UTF-8');
2024-08-27 01:07:35 +03:00
// Полностью отключить XML-RPC
add_filter( 'xmlrpc_enabled', '__return_false' );
// Отключение методов XML-RPC, требующих авторизации
add_filter( 'xmlrpc_methods', function( $methods ) {
unset( $methods['pingback.ping'] );
return $methods;
} );
// Полное отключение REST API
add_filter('rest_enabled', '__return_false');
add_filter('rest_jsonp_enabled', '__return_false');
2024-09-06 10:56:22 +03:00
function redirect_non_admin_users() {
// Получаем текущего пользователя
$current_user = wp_get_current_user();
// Проверяем, если пользователь не является администратором
if (in_array('subscriber', $current_user->roles) || in_array('author', $current_user->roles)) {
// Если это запрос к административной панели или если пользователь пытается получить доступ к wp-admin
if (is_admin()) {
// Перенаправляем на главную страницу сайта
wp_redirect(home_url());
exit;
}
}
}
add_action('admin_init', 'redirect_non_admin_users');
2024-05-24 21:37:57 +03:00
define('ENPART', 740);
define('EN_PARTS', '746,741,742,743,744,745');
2024-12-25 02:19:47 +03:00
// require get_template_directory().'/dzenews.php'; //add support dzen (добавляет поле Экслюзив)
2024-03-12 14:23:22 +03:00
2024-03-01 17:47:03 +03:00
function theme_setup()
{
add_theme_support('menus');
register_nav_menus(array(
'primary' => __('Основное меню', 'your-theme-domain'),
'socials' => __('Соцсети', 'your-theme-domain'),
'footer-bottom' => __('Нижнее меню в подвале', 'your-theme-domain'),
));
add_theme_support('custom-logo', array(
'height' => 100,
'width' => 400,
'flex-height' => true,
'flex-width' => true,
));
add_theme_support('post-thumbnails');
}
add_action('after_setup_theme', 'theme_setup');
function theme_enqueue_styles_scripts()
{
$style_ver = filemtime(get_template_directory() . '/frontend/dist/assets/main.css');
$script_ver = filemtime(get_template_directory() . '/frontend/dist/assets/main2.js');
wp_enqueue_style('main-style', get_template_directory_uri() . '/frontend/dist/assets/main.css', array(), $style_ver);
wp_enqueue_script('main-script2', get_template_directory_uri() . '/frontend/dist/assets/main2.js', array(), $script_ver, true);
2024-06-27 14:20:15 +03:00
2024-03-12 09:16:19 +03:00
// Preconnect for Google Fonts
//wp_enqueue_style('google-fonts-preconnect', 'https://fonts.gstatic.com', [], null, 'all');
//wp_resource_hints(['https://fonts.googleapis.com', 'https://fonts.gstatic.com'], 'preconnect');
// Enqueue Google Fonts
wp_enqueue_style('google-fonts-raleway', 'https://fonts.googleapis.com/css2?family=Raleway:wght@400;500;600&display=swap', false);
wp_enqueue_style('google-fonts-roboto', 'https://fonts.googleapis.com/css2?family=Roboto:wght@400&display=swap', false);
2024-03-01 17:47:03 +03:00
}
add_action('wp_enqueue_scripts', 'theme_enqueue_styles_scripts');
add_filter('nav_menu_css_class', 'change_menu_item_css_class', 10, 4);
function change_menu_item_css_class($classes, $item, $args, $depth)
{
// Удаляем нежелательные классы
$classes = array_diff($classes, array('page_item', 'page-item-' . $item->ID));
$classes = array_diff($classes, array('page_item', 'page-item-' . $item->ID));
// Добавляем класс 'menu-item'
$classes[] = 'menu-item';
return $classes;
}
function get_asset(string $path)
{
return get_template_directory_uri() . '/frontend/dist/' . $path;
}
function mytheme_widget_areas()
{
// Регистрация левого сайдбара
register_sidebar(array(
'name' => 'Левый сайдбар',
'id' => 'left-sidebar',
'description' => 'Виджеты в этой области будут показаны в левой части сайта.',
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
));
// Регистрация правого сайдбара
register_sidebar(array(
'name' => 'Правый сайдбар',
'id' => 'right-sidebar',
'description' => 'Виджеты в этой области будут показаны в правой части сайта.',
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
));
}
add_action('widgets_init', 'mytheme_widget_areas');
class Upcoming_Events_Widget extends WP_Widget
{
function __construct()
{
parent::__construct(
'upcoming_events_widget', // ID виджета
'Upcoming Events', // Название виджета
array('description' => 'Displays upcoming events') // Описание
);
}
public function widget($args, $instance)
{
include get_template_directory() . '/widgets/upcoming-events-widget-template.php';
}
// Форма в админ-панели для настройки виджета
public function form($instance)
{
$title = !empty($instance['title']) ? $instance['title'] : 'Новое название';
?>
<p>
<label for="<?php echo esc_attr($this->get_field_id('title')); ?>">Название:</label>
<input class="widefat" id="<?php echo esc_attr($this->get_field_id('title')); ?>" name="<?php echo esc_attr($this->get_field_name('title')); ?>" type="text" value="<?php echo esc_attr($title); ?>">
</p>
<?php
}
// Сохранение настроек виджета
public function update($new_instance, $old_instance)
{
$instance = array();
$instance['title'] = (!empty($new_instance['title'])) ? strip_tags($new_instance['title']) : '';
return $instance;
}
}
function register_upcoming_events_widget()
{
register_widget('Upcoming_Events_Widget');
}
add_action('widgets_init', 'register_upcoming_events_widget');
add_action('widgets_init', 'register_upcoming_events_widget');
function format_event_date()
{
$post_date = get_the_date('Y-m-d');
$current_date = date('Y-m-d');
$tomorrow_date = date('Y-m-d', strtotime('+1 day', strtotime($current_date)));
if ($post_date == $current_date) {
$date_text = 'сегодня';
} elseif ($post_date == $tomorrow_date) {
$date_text = 'завтра';
} else {
$date_text = get_the_date();
}
$time = get_the_time('H:i');
return $date_text . ', ' . $time;
}
2024-05-24 21:37:57 +03:00
function get_published_date_in_english() {
// Получение времени публикации поста
$post_time = get_the_time('H:i');
// Получение даты публикации поста на английском языке
$post_date = get_post_time('F j, Y');
// Формирование строки с датой и временем публикации
return $post_time . ', ' . $post_date;
}
2024-03-01 17:47:03 +03:00
/**
* Фильтр для изменения разметки хлебных крошек Yoast SEO.
*/
add_filter('wpseo_breadcrumb_output', 'custom_wpseo_breadcrumb_output');
function custom_wpseo_breadcrumb_output($output)
{
// Заменяем начальный тег разметки.
$output = str_replace('<span><span>', '', $output);
$output = str_replace('</span></span>', '', $output);
// Заменяем разделитель на нужный нам класс.
$output = str_replace('»', '', $output);
// Заменяем теги ссылок.
$output = str_replace('<a', '<a class="breadcrumbs__item"', $output);
// Заменяем тег последнего элемента (текущей страницы) на span с классом.
$output = preg_replace('/<span class="breadcrumb_last"[^>]*>/', '<span class="breadcrumbs__item">', $output);
return $output;
}
function custom_pagination($query = null)
{
global $wp_query;
$query = $query ?: $wp_query;
$current_page = max(1, get_query_var('paged'));
$total_pages = $query->max_num_pages;
$show_items = 3; // Количество страниц для вывода в начале и в конце
$range = 1; // Диапазон страниц вокруг текущей страницы
if (1 == $total_pages) {
return; // Если страница всего одна, пагинация не нужна
}
2024-05-25 20:05:46 +03:00
if ( defined('LANG') && LANG == 'en' ){
$txt['back'] = 'Back';
$txt['next'] = 'Next';
} else {
$txt['back'] = 'Назад';
$txt['next'] = 'Далее';
}
2024-03-01 17:47:03 +03:00
echo '<div class="pagination"><div class="pagination__list">';
// Кнопка "Назад"
if ($current_page > 1) {
$prev_page_link = get_pagenum_link($current_page - 1);
2024-05-25 20:05:46 +03:00
echo "<a href='" . esc_url($prev_page_link) . "' class=\"pagination__btn\">&laquo; ".$txt['back']."</a>";
2024-03-01 17:47:03 +03:00
}
// Начало пагинации
for ($i = 1; $i <= $total_pages; $i++) {
// Условие для предотвращения дублирования начальных страниц
if ($total_pages > ($show_items * 2) && $i > $show_items && $i < $total_pages - $show_items + 1) {
if ($i == $current_page - $range - 1 || $i == $current_page + $range + 1) {
echo "<span class=\"pagination__item\">...</span>"; // Многоточие
continue;
}
}
if ($i == $current_page) {
echo "<span class=\"pagination__item is-active\">$i</span>"; // Текущая страница
} elseif ($i <= $show_items || ($i >= $total_pages - $show_items + 1) || ($i >= $current_page - $range && $i <= $current_page + $range)) {
echo "<a href='" . get_pagenum_link($i) . "' class=\"pagination__item\">$i</a>";
}
}
// Кнопка "Далее"
if ($current_page < $total_pages) {
$next_page_link = get_pagenum_link($current_page + 1);
2024-05-25 20:05:46 +03:00
echo "<a href='" . esc_url($next_page_link) . "' class=\"pagination__btn\">".$txt['next']." &raquo;</a>";
2024-03-01 17:47:03 +03:00
}
echo '</div></div>';
}
function my_theme_scripts() {
if (is_front_page() || (is_category() && !is_paged())) {
2024-07-15 13:17:06 +03:00
wp_enqueue_script('my-load-more', get_template_directory_uri() . '/js/load-main-scroll.js', array('jquery'), '1.0.1', true);
$query_vars = array('post_type' => 'post', 'posts_per_page' => 10);
2024-07-15 13:17:06 +03:00
if (is_front_page()) {
// Получаем ID категории, которую мы хотим исключить (например, категория с ID 740)
$excluded_category_id = 740;
// Получаем все подкатегории категории с ID 740
$excluded_categories = get_categories(array(
'child_of' => $excluded_category_id,
'fields' => 'ids' // Получаем только ID подкатегорий
));
// Включаем в запрос параметр, чтобы исключить категорию и её подкатегории
$query_vars['category__not_in'] = array_merge(array($excluded_category_id), $excluded_categories);
} elseif (is_category()) {
$category = get_queried_object();
$query_vars['cat'] = $category->term_id;
}
2024-03-01 17:47:03 +03:00
$query = new WP_Query($query_vars);
2024-03-12 09:16:19 +03:00
wp_localize_script('my-load-more', 'my_load_more_params', array(
'ajaxurl' => admin_url('admin-ajax.php'),
'posts' => json_encode($query->query_vars),
'current_page' => max(1, get_query_var('paged')), // Начальная страница
'max_page' => $query->max_num_pages
));
}
2024-03-01 17:47:03 +03:00
}
2024-12-08 15:28:42 +03:00
//add_action('wp_enqueue_scripts', 'my_theme_scripts');
2024-03-01 17:47:03 +03:00
function loadmore_ajax_handler() {
2024-03-01 17:47:03 +03:00
$args = json_decode(stripslashes($_POST['query']), true);
$args['paged'] = $_POST['page'] + 1;
2024-03-01 17:47:03 +03:00
$args['post_status'] = 'publish';
2024-06-27 14:20:15 +03:00
$args['posts_per_page'] = 12;
// Проверка на категорию, если она есть в параметрах запроса
if (isset($args['cat']) && !empty($args['cat'])) {
$args['cat'] = $args['cat'];
} else {
$args['cat'] = [-17, -20, -21];
}
2024-03-01 17:47:03 +03:00
query_posts($args);
if (have_posts()) :
while (have_posts()) : the_post();
get_template_part('content', 'post');
endwhile;
endif;
die;
}
add_action('wp_ajax_loadmore', 'loadmore_ajax_handler');
add_action('wp_ajax_nopriv_loadmore', 'loadmore_ajax_handler');
2024-03-01 17:47:03 +03:00
/*
* Фильтр добавлен для модификации стандартной формы плагина Contact Form ( Срезаем span элементы, в которые оборачивается input ).
* Работает в связке с отключенными требованиями плагина - define( 'WPCF7_AUTOP', false );
* В файле wp-config.php
* */
add_filter('wpcf7_form_elements', function ($content) {
$content = preg_replace('/<(span).*?class="\s*(?:.*\s)?wpcf7-form-control-wrap(?:\s[^"]+)?\s*"[^\>]*>(.*)<\/\1>/i', '\2', $content);
return $content;
});
2024-03-12 09:16:19 +03:00
function show_post_image($post = null, $size = 'large')
2024-03-01 17:47:03 +03:00
{
if (has_post_thumbnail($post)) {
return get_the_post_thumbnail($post, $size);
} else {
return '<img src="' . get_template_directory_uri() . '/noimage.jpg">';
}
}
add_action('rest_api_init', function () {
register_rest_route('agroexpert/v1', '/posts-by-date/', array(
'methods' => 'GET',
'callback' => 'get_posts_by_date',
'permission_callback' => '__return_true', // Доступно для чтения всеми
));
});
function get_posts_by_date($request)
{
global $wpdb; // Глобальный объект базы данных WordPress
// SQL-запрос для получения уникальных дат публикации постов
$query = "
SELECT DISTINCT DATE(post_date) as date
FROM {$wpdb->posts}
WHERE post_status IN ('publish', 'future')
AND post_type = 'post'
ORDER BY date DESC
";
// Выполнение запроса
$result = $wpdb->get_results($query);
// Преобразование результатов в массив дат
$dates = array_map(function ($item) {
return $item->date;
}, $result);
return new WP_REST_Response($dates, 200);
}
function setup_future_hook()
{
// Replace native future_post function with replacement
remove_action('future_event', '_future_post_hook');
add_action('future_event', 'publish_future_post_now');
}
function publish_future_post_now($id)
{
// Set new post's post_status to "publish" rather than "future."
wp_publish_post($id);
}
add_action('init', 'setup_future_hook');
add_action('restrict_manage_posts', 'add_author_filter_to_posts_admin');
function add_author_filter_to_posts_admin()
{
global $post_type;
// Убедитесь, что этот фильтр применяется только к типу поста 'post'
if ('post' !== $post_type) {
return;
}
// Получаем пользователей с ролью 'author'
$authors = get_users(array('role' => '', 'orderby' => 'display_name', 'order' => 'ASC'));
// Проверяем, установлен ли фильтр
$selected = isset($_GET['custom_author']) ? $_GET['custom_author'] : '';
// Начинаем выводить HTML выпадающего списка
echo '<select name="custom_author">';
echo '<option value="">Все авторы</option>';
// Перебираем всех авторов и добавляем их в выпадающий список
foreach ($authors as $author) {
$display_name = $author->display_name; // Отображаемое имя для отображения
$user_id = $author->ID; // ID пользователя для значения опции
echo sprintf(
'<option value="%s"%s>%s</option>',
esc_attr($user_id),
selected($selected, $user_id, false),
esc_html($display_name)
);
}
echo '</select>';
}
add_action('pre_get_posts', 'filter_posts_by_custom_author');
function filter_posts_by_custom_author($query)
{
global $pagenow;
// Применяем фильтр только в админ-панели и только для основного запроса на странице списка постов
if (is_admin() && 'edit.php' === $pagenow && $query->is_main_query()) {
// Проверяем, установлен ли наш фильтр
if (!empty($_GET['custom_author'])) {
$custom_author_id = $_GET['custom_author'];
// Фильтруем посты по автору
$query->set('author', $custom_author_id);
}
}
}
function custom_search_rewrite_rule()
{
add_rewrite_rule(
'^search/$',
'index.php?s=' . get_query_var('s'),
'top'
);
add_rewrite_rule('^search/?$', 'index.php?s=', 'top');
add_rewrite_rule('^search/page/([0-9]+)/?$', 'index.php?s=&paged=$matches[1]', 'top');
}
add_action('init', 'custom_search_rewrite_rule');
add_filter('relevanssi_hits_filter', 'rlv_gather_categories', 99);
function rlv_gather_categories($hits)
{
global $rlv_categories_present;
$rlv_categories_present = array();
foreach ($hits[0] as $hit) {
$terms = get_the_terms($hit->ID, 'category');
if (is_array($terms)) {
foreach ($terms as $term) {
$rlv_categories_present[$term->term_id] = $term->name;
}
}
}
asort($rlv_categories_present);
return $hits;
}
function plural_form_extended($number, $forms, $additionalWord = '')
{
$cases = array(2, 0, 1, 1, 1, 2);
$index = ($number % 100 > 4 && $number % 100 < 20) ? 2 : $cases[min($number % 10, 5)];
// Склонение дополнительного слова, если оно передано
$additionalForm = '';
if ($additionalWord) {
$additionalIndex = $index > 0 ? 1 : 0; // Простая логика для "найдено"
$additionalForm = $additionalWord[$additionalIndex] . ' ';
}
return $additionalForm . $number . ' ' . $forms[$index];
}
add_filter('wpseo_breadcrumb_links', 'custom_search_breadcrumbs');
function custom_search_breadcrumbs($links)
{
if (is_search()) {
// Получаем поисковый запрос
$search_query = get_search_query();
// Перебираем все ссылки, чтобы найти и изменить нужный элемент
foreach ($links as &$link) {
if (strpos($link['text'], 'Результаты поиска') !== false) {
if ($search_query === "") {
$link['text'] = 'Поиск';
} else {
$link['text'] = 'Результаты поиска для запроса "' . esc_html($search_query) . '"';
}
$link['url'] = home_url('/search/') . urlencode($search_query) . '/';
break; // Прерываем цикл после изменения нужного элемента
}
}
unset($link);
}
return $links;
}
function include_future_posts_in_date_archive($query)
{
// Убедимся, что мы находимся в основном запросе и на странице архива по дате
if ($query->is_main_query() && $query->is_date()) {
// Изменяем запрос так, чтобы он включал посты с датой публикации в будущем
$query->set('post_status', array('publish', 'future'));
}
}
add_action('pre_get_posts', 'include_future_posts_in_date_archive');
function template_500_error($template)
{
// Проверяем, является ли текущая страница страницей ошибки 500
if (is_500()) {
return get_stylesheet_directory() . '/500.php'; // Путь к вашему собственному шаблону 500 ошибки
}
return $template;
}
add_filter('template_include', 'template_500_error');
function is_500()
{
// Проверяем, является ли текущий код состояния HTTP 500
return get_query_var('error', false) === 500;
}
function change_image_size_dimensions()
{
update_option('large_size_w', 1080);
update_option('large_size_h', 0);
update_option('medium_size_w', 400);
update_option('medium_size_h', 0);
}
add_action('init', 'change_image_size_dimensions');
add_filter('big_image_size_threshold', '__return_false');
function auto_add_category_by_slug_to_new_post($post_ID, $post, $update)
{
$category_slug = 'all-events'; // Slug рубрики для добавления
$category = get_term_by('slug', $category_slug, 'category');
// Если рубрика с таким slug существует
if ($category && !has_category($category->term_id, $post_ID)) {
wp_set_post_categories($post_ID, array($category->term_id), true);
}
}
2024-05-06 12:02:48 +03:00
//add_action('save_post', 'auto_add_category_by_slug_to_new_post', 10, 3);
2024-03-01 17:47:03 +03:00
function get_category_name($post = null)
{
$categories = get_the_category($post);
$categories = array_filter($categories, function (WP_Term $category) {
return $category->slug !== 'all-events';
});
$categories = array_values($categories);
2024-03-12 09:16:19 +03:00
$category_name = !empty($categories) ? esc_html($categories[0]->name) : 'Все события';
2024-03-01 17:47:03 +03:00
return $category_name;
}
2024-03-15 20:32:50 +03:00
2024-05-26 11:50:52 +03:00
function get_category_name_en($post = null)
{
$categories = get_the_category($post);
$categories = array_filter($categories, function (WP_Term $category) {
return $category->slug !== 'en';
});
$categories = array_values($categories);
$category_name = !empty($categories) ? esc_html($categories[0]->name) : 'Все события';
return $category_name;
}
2024-03-15 20:32:50 +03:00
// Добавляем функцию для формирования мета-тегов страницы
function custom_meta_tags() {
2024-03-15 22:17:05 +03:00
2024-03-15 20:32:50 +03:00
$sitename = get_bloginfo('name');
2024-03-15 22:17:05 +03:00
$meta_tags = '';
$og_tags = '';
$og_tags .= '<meta property="og:locale" content="ru_RU">';
$og_tags .= '<meta property="og:site_name" content="'. $sitename .'">'. PHP_EOL;
2024-06-27 14:20:15 +03:00
2024-03-15 22:17:05 +03:00
2024-03-15 20:32:50 +03:00
// Получаем заголовок страницы
if (is_single() || is_page()) {
2024-03-15 22:17:05 +03:00
$current_url = get_permalink();
2024-06-27 14:20:15 +03:00
2024-03-15 20:32:50 +03:00
$post = get_post(); // Получаем объект текущего поста или страницы
$title = get_the_title($post).' - '.$sitename; // Получаем заголовок текущего поста или страницы
2024-03-15 22:53:02 +03:00
$excerpt = get_the_excerpt($post);
if (has_excerpt()) {
2024-06-27 14:20:15 +03:00
$description = $excerpt;
2024-03-15 22:53:02 +03:00
} elseif (strlen($excerpt) > 300) {
2024-06-27 14:20:15 +03:00
$description = wp_trim_words($excerpt, 30, '...');
2024-03-15 22:53:02 +03:00
} else {
$description = $excerpt;
2024-06-27 14:20:15 +03:00
}
2024-03-15 20:32:50 +03:00
$tags = get_the_tags($post); // Получаем теги текущего поста или страницы
$keywords = ''; // Переменная для хранения ключевых слов
if ($tags) {
$keywords = implode(', ', wp_list_pluck($tags, 'name')); // Формируем строку с тегами через запятую
}
2024-06-27 14:20:15 +03:00
2024-03-15 22:17:05 +03:00
$post_thumbnail_id = get_post_thumbnail_id($post->ID);
$post_thumbnail_url = wp_get_attachment_image_src($post_thumbnail_id, 'full');
if ($post_thumbnail_url) {
$og_image = esc_url($post_thumbnail_url[0]);
$og_tags .= '<meta property="og:image" content="' . $og_image . '">'. PHP_EOL;
$og_tags .= '<meta name="twitter:card" content="summary_large_image">'. PHP_EOL;
}
$og_tags .= '<meta property="og:type" content="article">'. PHP_EOL;
2024-03-15 20:32:50 +03:00
} elseif (is_category()) {
$category = get_queried_object(); // Получаем объект текущей рубрики
2024-03-15 22:17:05 +03:00
$current_url = get_term_link($category);
2024-03-16 11:25:56 +03:00
$title = $category->name.': Новости, комментарии по теме - '.$sitename; // Получаем название текущей рубрики
2024-03-15 20:32:50 +03:00
$description = $category->description; // Получаем описание текущей рубрики
2024-03-15 22:17:05 +03:00
$keywords = $category->name; // Ключевые слова - название рубрики
2024-03-15 20:32:50 +03:00
} elseif (is_home()) {
2024-03-15 22:17:05 +03:00
$current_url = get_site_url();
2024-03-15 20:32:50 +03:00
$title = $sitename; // Получаем название сайта для главной страницы
$description = get_bloginfo('description'); // Получаем описание сайта для главной страницы
$keywords = ''; // Для главной страницы ключевые слова оставляем пустыми
2024-03-15 22:17:05 +03:00
$og_tags .= '<meta property="og:type" content="website">'. PHP_EOL;
2024-03-15 20:32:50 +03:00
}
2024-03-15 22:17:05 +03:00
2024-03-15 20:32:50 +03:00
// Добавляем мета-теги только в случае, если их значения не пусты
2024-03-15 22:17:05 +03:00
if (!empty($current_url)) {
$og_tags .= '<meta property="og:url" content="' . esc_url($current_url) . '" />' . PHP_EOL;
}
2024-03-15 20:32:50 +03:00
if (!empty($title)) {
2024-03-15 22:21:19 +03:00
$meta_tags .= '<title>' . esc_html($title) . '</title>'. PHP_EOL;
2024-03-15 22:17:05 +03:00
$og_tags .= '<meta property="og:title" content="'. esc_html($title) .'" />'. PHP_EOL;
2024-03-15 20:32:50 +03:00
}
if (!empty($description)) {
2024-03-15 22:53:02 +03:00
$description = wp_strip_all_tags($description);
2024-03-15 22:17:05 +03:00
$meta_tags .= '<meta name="description" content="' . esc_attr($description) . '">'. PHP_EOL;
$og_tags .= '<meta property="og:description" content="' . esc_attr($description) . '" />'. PHP_EOL;
2024-03-15 20:32:50 +03:00
}
if (!empty($keywords)) {
2024-03-15 22:17:05 +03:00
$meta_tags .= '<meta name="keywords" content="' . esc_attr($keywords) . '">'. PHP_EOL;
2024-03-15 20:32:50 +03:00
}
2024-06-27 14:20:15 +03:00
2024-03-15 20:32:50 +03:00
// Выводим мета-теги
echo $meta_tags;
2024-03-15 22:17:05 +03:00
echo $og_tags;
2024-03-15 20:32:50 +03:00
}
2024-04-09 10:57:49 +03:00
add_action('wpcf7_before_send_mail', 'my_custom_contact_form_handler', 10, 3);
function my_custom_contact_form_handler($contact_form, $abort, $submission) {
2024-06-27 14:20:15 +03:00
// Получаем ID формы
$form_id = $contact_form->id();
if ( $form_id == '0ddb83c' ) {
2024-06-27 14:20:15 +03:00
// Получаем данные формы
$submission = WPCF7_Submission::get_instance();
2024-06-27 14:20:15 +03:00
if ($submission) {
2024-06-27 14:20:15 +03:00
$posted_data = $submission->get_posted_data();
// Подключаемся к базе данных WordPress
global $wpdb;
// Определяем таблицу в базе данных WordPress в зависимости от ID формы
$table_name = $wpdb->prefix . 'subusers';
2024-06-27 14:20:15 +03:00
$wpdb->insert(
$table_name,
array(
'mail' => $posted_data['your-email'],
'status' => 0,
'date' => current_time('mysql')
),
array(
'%s', // Формат для строкового поля
'%d', // Формат для цифрового поля
'%s' // Формат для поля с датой и временем
)
);
}
}
}
function last_sticky_post() {
//$pinned_post = get_field('pinned_post', 'options');
static $last = null; // array to pinned post
if ( $last !== null){
return $last;
}
2024-06-27 14:20:15 +03:00
$sticky_posts = array_reverse(get_option('sticky_posts'));
$published_sticky_posts = array();
2024-06-27 14:20:15 +03:00
foreach ($sticky_posts as $post_id) {
$post = get_post($post_id);
if ($post->post_status == 'publish') {
//$published_sticky_posts[] = $post_id;
$last = $post;
break; // Выходим из цикла, так как нашли последний опубликованный закрепленный пост
}
}
return $last;
}
2024-05-24 21:37:57 +03:00
function get_latest_sticky_post_by_category($category_id) {
// Получение всех закрепленных постов
$sticky_posts = get_option('sticky_posts');
if (empty($sticky_posts)) {
return null;
}
// Получение всех постов, которые включены в закрепленные посты
$args = array(
'post__in' => $sticky_posts,
'posts_per_page' => -1, // Получаем все закрепленные посты
'ignore_sticky_posts' => 1, // Игнорируем параметры отображения закрепленных постов
);
$posts = get_posts($args);
// Получаем ID всех подрубрик рубрики
$category_ids = get_term_children($category_id, 'category');
$category_ids[] = $category_id; // Включаем основную рубрику
// Фильтрация постов по категории и её подрубрикам
$filtered_posts = array_filter($posts, function($post) use ($category_ids) {
$post_categories = wp_get_post_categories($post->ID);
return array_intersect($post_categories, $category_ids);
});
if (empty($filtered_posts)) {
return null;
}
// Сортировка постов по дате в обратном порядке
usort($filtered_posts, function($a, $b) {
return strtotime($b->post_date) - strtotime($a->post_date);
});
// Возвращаем самый последний пост
return $filtered_posts[0];
}
2024-05-06 12:02:48 +03:00
// отправка писем через свой почтовый сервис
2024-04-14 21:37:57 +03:00
function agroxpert_send_smtp_email( $phpmailer ) {
$phpmailer->isSMTP();
$phpmailer->Host = 'mail.vetandlife.ru';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 465;
$phpmailer->Username = 'news@mail.agroexpert.press';
2024-06-27 14:20:15 +03:00
$phpmailer->Password = 'O6K!]aZDNJ';
$phpmailer->SMTPSecure = 'ssl';
$phpmailer->From = 'news@mail.agroexpert.press';
2024-04-14 21:37:57 +03:00
$phpmailer->FromName = 'Агроэксперт';
}
2024-04-14 21:37:57 +03:00
add_action( 'phpmailer_init', 'agroxpert_send_smtp_email' );
2024-04-09 10:57:49 +03:00
2024-04-12 21:04:43 +03:00
function my_custom_mail_sent( $contact_form ){
2024-06-27 14:20:15 +03:00
2024-04-12 21:04:43 +03:00
$log_file = WP_CONTENT_DIR . '/contact.log';
2024-04-09 10:57:49 +03:00
2024-06-27 14:20:15 +03:00
$form_id = $contact_form->id();
2024-04-09 10:57:49 +03:00
2024-04-12 21:04:43 +03:00
//if ( $form_id == '19' ) {
2024-06-27 14:20:15 +03:00
$submission = WPCF7_Submission::get_instance();
2024-04-12 21:04:43 +03:00
$posted_data = $submission->get_posted_data();
$mail = $posted_data['your-email'];
2024-06-27 14:20:15 +03:00
2024-04-12 21:04:43 +03:00
global $wpdb;
$table_name = $wpdb->prefix . 'subusers';
$hash = md5('775+'.$mail);
2024-04-09 10:57:49 +03:00
2024-04-12 21:04:43 +03:00
$query = $wpdb->prepare("SELECT * FROM $table_name WHERE mail = %s", $mail);
$result = $wpdb->get_row($query);
2024-04-09 10:57:49 +03:00
2024-04-12 21:04:43 +03:00
if ( !$result ) { //аdd to table
2024-06-27 14:20:15 +03:00
2024-04-12 21:04:43 +03:00
$result = $wpdb->insert(
2024-04-09 10:57:49 +03:00
$table_name,
array(
2024-04-12 21:04:43 +03:00
'mail' => $mail,
2024-04-09 10:57:49 +03:00
'status' => 0,
2024-04-12 21:04:43 +03:00
'date' => current_time('mysql'),
'hash' => $hash,
2024-04-09 10:57:49 +03:00
),
array(
2024-04-12 21:04:43 +03:00
'%s',
'%d',
'%s',
'%s'
2024-04-09 10:57:49 +03:00
)
);
2024-06-27 14:20:15 +03:00
}
2024-04-09 10:57:49 +03:00
2024-06-27 14:20:15 +03:00
// }
2024-04-12 21:04:43 +03:00
$hash_link = home_url().'/subscript?id='.$hash;
$subject = 'Подписка на рассылку АгроЭксперт';
$message = "
Здравствуйте!\n
2024-04-17 12:15:16 +03:00
Для подтверждения подписки на рассылку издания «АгроЭксперт» перейдите по ссылке ниже:\n
2024-04-12 21:04:43 +03:00
$hash_link.\n\n
Если вы не отправляли заявку просто проигнорируйте это письмо.";
2024-04-09 10:57:49 +03:00
2024-04-12 21:04:43 +03:00
$headers = array('Content-Type: text/plain; charset=UTF-8');
// Отправка письма
wp_mail($mail, $subject, $message, $headers);
return;
2024-06-27 14:20:15 +03:00
2024-04-09 10:57:49 +03:00
}
2024-04-12 21:04:43 +03:00
2024-04-14 21:37:57 +03:00
add_action('wpcf7_mail_sent', 'my_custom_mail_sent' );
2024-04-21 23:30:32 +03:00
/**
2024-06-27 14:20:15 +03:00
*
2024-04-21 23:30:32 +03:00
*/
if (!function_exists('view')){
function view ($view, $data = array(), $layer = null){
2024-06-27 14:20:15 +03:00
2024-04-21 23:30:32 +03:00
ob_start();
2024-06-27 14:20:15 +03:00
2024-04-21 23:30:32 +03:00
if (is_array($data))
extract($data);
if ($layer !== null){
$content = view($view, $data);
require $layer;
}
else
require $view;
2024-06-27 14:20:15 +03:00
2024-04-21 23:30:32 +03:00
return trim(ob_get_clean());
2024-06-27 14:20:15 +03:00
2024-04-21 23:30:32 +03:00
}
}
2024-04-12 21:04:43 +03:00
2024-05-22 21:02:50 +03:00
//все рубрики англ версии
2024-05-24 21:37:57 +03:00
function get_expression_en( $str = false ) {
2024-05-22 21:02:50 +03:00
#cache result
static $res = null;
2024-06-27 14:20:15 +03:00
2024-05-22 21:02:50 +03:00
if ($res !== null) {
return $res;
}
$parent_cat_id = 740;
// Получаем все подрубрики данной рубрики
$subcategories = get_terms(array(
'taxonomy' => 'category',
'child_of' => $parent_cat_id,
'hide_empty' => false,
'fields' => 'ids'
));
// Добавляем ID родительской рубрики в начало массива подрубрик
array_unshift($subcategories, $parent_cat_id);
2024-06-27 14:20:15 +03:00
2024-05-22 21:02:50 +03:00
$res = $subcategories;
return $res;
2024-06-27 14:20:15 +03:00
}
2024-05-22 21:02:50 +03:00
// возвращаем все исключенные рубрики
function get_expression_parts() {
#cache result
static $res = null;
2024-06-27 14:20:15 +03:00
2024-05-22 21:02:50 +03:00
if ($res !== null) {
return $res;
}
$subcategories_en = get_expression_en();
$additional_excludes = [ '17', '20', '21', $parent_cat_id ];
2024-06-27 14:20:15 +03:00
2024-05-22 21:02:50 +03:00
$all_excludes = array_merge( $additional_excludes, $subcategories_en );
$res = implode(',', $all_excludes);
// Преобразуем массив ID в строку, разделенную запятыми
return $res;
}
2024-05-24 21:37:57 +03:00
function get_priority_category_en($post_id = null) {
2024-06-27 14:20:15 +03:00
2024-05-24 21:37:57 +03:00
if ($post_id === null) {
$post_id = get_the_ID();
}
2024-06-27 14:20:15 +03:00
2024-05-24 21:37:57 +03:00
// Получаем массив категорий поста
$categories = get_the_category($post_id);
2024-06-27 14:20:15 +03:00
2024-05-24 21:37:57 +03:00
if (empty($categories)) {
return null;
2024-05-22 21:02:50 +03:00
}
2024-05-24 21:37:57 +03:00
$en_category = null;
2024-05-22 21:02:50 +03:00
2024-05-24 21:37:57 +03:00
// Проходим по всем категориям поста
foreach ($categories as $category) {
// Проверяем, содержит ли название категории 'en'
if (stripos($category->name, 'en') !== false) {
$en_category = $category->name;
} else {
// Если нашли категорию, не содержащую 'en', возвращаем её название
return $category->name;
}
}
2024-05-22 21:02:50 +03:00
2024-05-24 21:37:57 +03:00
// Если нет категорий, кроме 'en', возвращаем категорию 'en'
return $en_category;
}
2024-05-22 21:02:50 +03:00
2024-05-24 21:37:57 +03:00
// рубрики английской версии
function use_custom_template_for_en_subcategories($template) {
2024-06-27 14:20:15 +03:00
2024-05-24 21:37:57 +03:00
if (is_category()) {
$category = get_queried_object();
2024-05-25 17:35:08 +03:00
if ($category->term_id == 762) { //parthers
$new_template = locate_template('en/category-partners-en.php');
if ($new_template) {
return $new_template;
}
2024-06-27 14:20:15 +03:00
}
2024-05-25 17:35:08 +03:00
2024-05-24 21:37:57 +03:00
// Проверяем, является ли текущая категория подрубрикой "EN"
$parent_id = $category->parent;
if ($parent_id && $parent_id == get_cat_ID('EN')) {
2024-05-25 20:05:46 +03:00
define('LANG', 'en');
2024-05-24 21:37:57 +03:00
// Устанавливаем путь к вашему новому шаблону
$new_template = locate_template('en/category-en-sub.php');
if ($new_template) {
return $new_template;
}
}
} else if (is_single()) {
$categories = get_the_category();
foreach ($categories as $category) {
// Проверяем, является ли текущая категория или ее родительская категория "EN"
if ($category->term_id == get_cat_ID('EN') || $category->parent == get_cat_ID('EN')) {
// Устанавливаем путь к вашему новому шаблону
$new_template = locate_template('single-en.php');
if ($new_template) {
return $new_template;
}
}
}
}
2024-05-22 21:02:50 +03:00
2024-05-24 21:37:57 +03:00
return $template;
}
2024-05-22 21:02:50 +03:00
2024-05-24 21:37:57 +03:00
add_filter('template_include', 'use_custom_template_for_en_subcategories');
2024-05-22 21:02:50 +03:00
2024-05-25 16:51:55 +03:00
/**
* update rubrics
*/
function add_posts_to_category_744() {
// Получаем ID рубрики 740 и всех ее подрубрик
$parent_category_id = 740;
$subcategories = get_categories(array(
'child_of' => $parent_category_id,
'hide_empty' => false
));
2024-06-27 14:20:15 +03:00
2024-05-25 16:51:55 +03:00
// Массив ID всех подрубрик 740
$subcategory_ids = wp_list_pluck($subcategories, 'term_id');
$all_category_ids = array_merge(array($parent_category_id), $subcategory_ids);
2024-06-27 14:20:15 +03:00
2024-05-25 16:51:55 +03:00
// Запрос для получения постов, которые имеют рубрику 740 или любую из ее подрубрик
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'term_id',
'terms' => $all_category_ids,
'operator' => 'IN'
),
),
);
// Получаем все посты с указанной рубрикой или ее подрубриками
$query = new WP_Query($args);
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// Получаем ID текущего поста
$post_id = get_the_ID();
// Получаем все рубрики текущего поста
$post_categories = wp_get_post_categories($post_id);
// Проверяем, есть ли у поста только рубрика 740
if (count($post_categories) == 1 && in_array($parent_category_id, $post_categories)) {
// Добавляем пост в рубрику с ID 744
wp_set_post_categories($post_id, array_merge($post_categories, array(744)));
} else {
// Проверяем, если у поста есть подрубрика 740, но нет основной рубрики 740
$has_subcategory = array_intersect($post_categories, $subcategory_ids);
if ($has_subcategory && !in_array($parent_category_id, $post_categories)) {
// Добавляем основную рубрику 740
wp_set_post_categories($post_id, array_merge($post_categories, array($parent_category_id)));
}
}
}
// Сбрасываем пост данные
wp_reset_postdata();
}
}
2024-06-27 14:20:15 +03:00
/**
2024-05-25 16:51:55 +03:00
function add_custom_admin_menu() {
add_menu_page(
'Update Posts Categories', // Заголовок страницы
'Update Categories EN', // Текст меню
'manage_options', // Возможность доступа (только администраторы)
'update-categories', // Уникальный идентификатор страницы
'update_categories_callback' // Функция для отображения контента страницы
);
}
2024-06-11 12:54:22 +03:00
add_action('admin_menu', 'add_custom_admin_menu');*/
function add_custom_admin_menu() {
add_submenu_page(
'tools.php', // Родительское меню (в данном случае "Инструменты")
'Update Posts Categories', // Заголовок страницы
'Update Categories EN', // Текст меню
'manage_options', // Возможность доступа (только администраторы)
'update-categories', // Уникальный идентификатор страницы
'update_categories_callback' // Функция для отображения контента страницы
);
}
2024-05-25 16:51:55 +03:00
add_action('admin_menu', 'add_custom_admin_menu');
function update_categories_callback() {
if (isset($_POST['update_categories'])) {
add_posts_to_category_744();
echo '<div class="updated"><p>Posts have been updated successfully.</p></div>';
}
?>
<div class="wrap">
<h1>Update Posts Categories</h1>
<form method="post">
<input type="hidden" name="update_categories" value="1">
<p>
<input type="submit" class="button-primary" value="Update Categories">
</p>
</form>
</div>
<?php
}
2024-06-27 14:20:15 +03:00
//скрываем рекламный аккаунт
function change_author_name($author) {
$original_author = 'Анна Купровская'; //рекламный аккаунт
$new_author = 'agroexpert.press';
2024-05-25 16:51:55 +03:00
2024-06-27 14:20:15 +03:00
if ($author === $original_author) {
echo $author;
return $new_author;
}
return $author;
}
add_filter('the_author', 'change_author_name');
2024-05-25 16:51:55 +03:00
2024-08-27 01:07:35 +03:00
// подписчики на главную
add_action('admin_init', 'restrict_subscriber_admin_access');
function restrict_subscriber_admin_access() {
// Проверяем, что пользователь вошел в систему и имеет роль 'subscriber'
if (current_user_can('subscriber')) {
// Перенаправляем на главную страницу сайта
wp_redirect(home_url());
exit;
}
}