2024-03-01 17:47:03 +03:00
|
|
|
|
<?php
|
|
|
|
|
|
setlocale(LC_TIME, 'ru_RU.UTF-8');
|
|
|
|
|
|
|
2025-05-10 00:00:09 +03:00
|
|
|
|
require get_template_directory() . '/inc/rubrics-menu.php'; // Рубрики в меню
|
2025-05-29 00:59:59 +03:00
|
|
|
|
require get_template_directory() . '/inc/special.php'; // Подключаем спецпроекты
|
2025-05-26 19:33:14 +03:00
|
|
|
|
require get_template_directory() . '/inc/spravochniki.php'; // Подключаем справочники
|
2025-05-10 00:00:09 +03:00
|
|
|
|
|
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();
|
|
|
|
|
|
|
|
|
|
|
|
// Проверяем, если пользователь не является администратором
|
2025-02-04 00:19:35 +03:00
|
|
|
|
if (in_array('subscriber', $current_user->roles)) {
|
2024-09-06 10:56:22 +03:00
|
|
|
|
// Если это запрос к административной панели или если пользователь пытается получить доступ к wp-admin
|
|
|
|
|
|
if (is_admin()) {
|
|
|
|
|
|
// Перенаправляем на главную страницу сайта
|
|
|
|
|
|
wp_redirect(home_url());
|
|
|
|
|
|
exit;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
add_action('admin_init', 'redirect_non_admin_users');
|
|
|
|
|
|
|
2025-05-05 22:55:06 +03:00
|
|
|
|
|
|
|
|
|
|
//require_once get_template_directory() . '/filters/fix_agroexpert_links.php';
|
|
|
|
|
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
|
{
|
2024-03-12 09:16:19 +03:00
|
|
|
|
// 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');
|
|
|
|
|
|
|
2025-06-16 00:24:13 +03:00
|
|
|
|
require_once 'vite.config.php';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-03-01 17:47:03 +03:00
|
|
|
|
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\">« ".$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']." »</a>";
|
2024-03-01 17:47:03 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
echo '</div></div>';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-07-14 20:59:28 +03:00
|
|
|
|
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);
|
2024-07-14 20:59:28 +03:00
|
|
|
|
|
|
|
|
|
|
$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()) {
|
2024-07-14 20:59:28 +03:00
|
|
|
|
$category = get_queried_object();
|
|
|
|
|
|
$query_vars['cat'] = $category->term_id;
|
|
|
|
|
|
}
|
2024-03-01 17:47:03 +03:00
|
|
|
|
|
2024-07-14 20:59:28 +03:00
|
|
|
|
$query = new WP_Query($query_vars);
|
2024-03-12 09:16:19 +03:00
|
|
|
|
|
2024-07-14 20:59:28 +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-28 12:20:36 +03:00
|
|
|
|
//add_action('wp_enqueue_scripts', 'my_theme_scripts');
|
2024-03-01 17:47:03 +03:00
|
|
|
|
|
|
|
|
|
|
|
2024-07-14 20:59:28 +03:00
|
|
|
|
|
|
|
|
|
|
function loadmore_ajax_handler() {
|
2024-03-01 17:47:03 +03:00
|
|
|
|
$args = json_decode(stripslashes($_POST['query']), true);
|
2024-07-14 20:59:28 +03:00
|
|
|
|
$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;
|
2024-07-14 20:59:28 +03:00
|
|
|
|
|
|
|
|
|
|
// Проверка на категорию, если она есть в параметрах запроса
|
|
|
|
|
|
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;
|
|
|
|
|
|
}
|
2024-12-28 12:20:36 +03:00
|
|
|
|
//add_action('wp_ajax_loadmore', 'loadmore_ajax_handler');
|
|
|
|
|
|
//add_action('wp_ajax_nopriv_loadmore', 'loadmore_ajax_handler');
|
2024-07-14 20:59:28 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 = '';
|
|
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
$og_tags .= '<meta property="og:locale" content="ru_RU">' . PHP_EOL;
|
|
|
|
|
|
$og_tags .= '<meta property="og:site_name" content="' . esc_html($sitename) . '">' . PHP_EOL;
|
2024-06-27 14:20:15 +03:00
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
|
2024-03-15 22:17:05 +03:00
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
if (is_home() || is_front_page()) {
|
|
|
|
|
|
$title = 'Федеральное издание «Агроэксперт» - новости в сфере сельского хозяйства России';
|
|
|
|
|
|
$description = get_bloginfo('description');
|
2024-03-15 22:17:05 +03:00
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
$meta_tags .= '<title>' . esc_html($title) . '</title>' . PHP_EOL;
|
2025-05-29 00:59:59 +03:00
|
|
|
|
$meta_tags .= '<meta itemprop="description" name="description" content="' . esc_attr($description) . '">' . PHP_EOL;
|
2025-02-04 00:19:35 +03:00
|
|
|
|
$og_tags .= '<meta property="og:title" content="' . esc_html($title) . '" />' . PHP_EOL;
|
|
|
|
|
|
$og_tags .= '<meta property="og:description" content="' . esc_attr($description) . '" />' . PHP_EOL;
|
2024-06-27 14:20:15 +03:00
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
} elseif (is_category() || is_tag()) {
|
|
|
|
|
|
$term = get_queried_object();
|
|
|
|
|
|
$canonical_url = get_term_link($term);
|
2024-03-15 22:53:02 +03:00
|
|
|
|
|
2025-04-22 22:54:20 +03:00
|
|
|
|
//if ($paged > 1) {
|
2025-02-04 00:19:35 +03:00
|
|
|
|
$meta_tags .= '<link rel="canonical" href="' . esc_url($canonical_url) . '" />' . PHP_EOL;
|
2025-04-22 22:54:20 +03:00
|
|
|
|
// }
|
2024-06-27 14:20:15 +03:00
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
$title = $term->name . ' - ' . $sitename;
|
|
|
|
|
|
$description = !empty(trim($term->description)) ? $term->description : $term->name;
|
2024-06-27 14:20:15 +03:00
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
if ($paged > 1) {
|
|
|
|
|
|
$title .= ', страница ' . $paged;
|
|
|
|
|
|
$description .= '. Страница ' . $paged;
|
2024-03-15 22:17:05 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
$og_tags .= '<meta property="og:url" content="' . esc_url($canonical_url) . '" />' . PHP_EOL;
|
2025-05-29 00:59:59 +03:00
|
|
|
|
$meta_tags .= '<title itemprop="headline">' . esc_html($title) . '</title>' . PHP_EOL;
|
|
|
|
|
|
$meta_tags .= '<meta itemprop="description" name="description" content="' . esc_attr($description) . '">' . PHP_EOL;
|
2025-02-04 00:19:35 +03:00
|
|
|
|
$og_tags .= '<meta property="og:title" content="' . esc_html($title) . '" />' . PHP_EOL;
|
|
|
|
|
|
$og_tags .= '<meta property="og:description" content="' . esc_attr($description) . '" />' . PHP_EOL;
|
2025-05-29 00:59:59 +03:00
|
|
|
|
|
2025-04-22 22:54:20 +03:00
|
|
|
|
} elseif (is_author()) {
|
|
|
|
|
|
$author = get_queried_object();
|
|
|
|
|
|
$author_name = $author->display_name;
|
|
|
|
|
|
$author_description = get_the_author_meta('description', $author->ID);
|
|
|
|
|
|
$canonical_url = get_author_posts_url($author->ID);
|
|
|
|
|
|
|
|
|
|
|
|
$title = 'Материалы автора ' . $author_name . ' - ' . $sitename;
|
|
|
|
|
|
$description = !empty($author_description) ? $author_description : 'Материалы, опубликованные автором ' . $author_name;
|
|
|
|
|
|
|
|
|
|
|
|
$meta_tags .= '<title>' . esc_html($title) . '</title>' . PHP_EOL;
|
2025-05-29 00:59:59 +03:00
|
|
|
|
$meta_tags .= '<meta itemprop="description" name="description" content="' . esc_attr($description) . '">' . PHP_EOL;
|
2025-04-22 22:54:20 +03:00
|
|
|
|
$meta_tags .= '<meta name="author" content="' . esc_attr($author_name) . '">' . PHP_EOL;
|
|
|
|
|
|
|
|
|
|
|
|
$meta_tags .= '<link rel="canonical" href="' . esc_url($canonical_url) . '" />' . PHP_EOL;
|
|
|
|
|
|
|
|
|
|
|
|
$og_tags .= '<meta property="og:url" content="' . esc_url($canonical_url) . '" />' . PHP_EOL;
|
|
|
|
|
|
$og_tags .= '<meta property="og:title" content="' . esc_html($title) . '" />' . PHP_EOL;
|
|
|
|
|
|
$og_tags .= '<meta property="og:description" content="' . esc_attr($description) . '" />' . PHP_EOL;
|
|
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
} elseif (is_single() || is_page()) {
|
|
|
|
|
|
$post = get_queried_object();
|
2024-03-15 20:32:50 +03:00
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
if (is_page('kontakty')) { //конкретные страницы
|
|
|
|
|
|
$title = get_the_title($post).' '. $sitename;
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$title = get_the_title($post) . ' - ' . $sitename;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$description = has_excerpt($post) ? get_the_excerpt($post) : wp_trim_words(strip_shortcodes($post->post_content), 30);
|
2024-03-15 22:17:05 +03:00
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
$og_tags .= '<meta property="og:url" content="' . esc_url($canonical_url) . '" />' . PHP_EOL;
|
2025-05-29 00:59:59 +03:00
|
|
|
|
$meta_tags .= '<title itemprop="headline">' . esc_html($title) . '</title>' . PHP_EOL;
|
|
|
|
|
|
$meta_tags .= '<meta itemprop="description" name="description" content="' . esc_attr($description) . '">' . PHP_EOL;
|
|
|
|
|
|
|
|
|
|
|
|
$custom_keywords = get_post_meta($post, 'meta_keywords', true);
|
|
|
|
|
|
if ($custom_keywords) {
|
|
|
|
|
|
$meta_tags .= '<meta itemprop="keywords" name="keywords" content="' . esc_attr($custom_keywords) . '">';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
$og_tags .= '<meta property="og:title" content="' . esc_html($title) . '" />' . PHP_EOL;
|
|
|
|
|
|
$og_tags .= '<meta property="og:description" content="' . esc_attr($description) . '" />' . 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
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
add_action('wp_head', 'custom_meta_tags');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-09 10:57:49 +03:00
|
|
|
|
|
2024-04-12 21:14:24 +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
|
|
|
|
|
2024-04-12 21:14:24 +03:00
|
|
|
|
// Получаем ID формы
|
|
|
|
|
|
$form_id = $contact_form->id();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ( $form_id == '0ddb83c' ) {
|
2024-06-27 14:20:15 +03:00
|
|
|
|
|
2024-04-12 21:14:24 +03:00
|
|
|
|
// Получаем данные формы
|
|
|
|
|
|
$submission = WPCF7_Submission::get_instance();
|
2024-06-27 14:20:15 +03:00
|
|
|
|
|
2024-04-12 21:14:24 +03:00
|
|
|
|
if ($submission) {
|
2024-06-27 14:20:15 +03:00
|
|
|
|
|
2024-04-12 21:14:24 +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
|
|
|
|
|
2024-04-12 21:14:24 +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
|
|
|
|
|
2024-04-12 21:14:24 +03:00
|
|
|
|
$sticky_posts = array_reverse(get_option('sticky_posts'));
|
|
|
|
|
|
|
|
|
|
|
|
$published_sticky_posts = array();
|
2024-06-27 14:20:15 +03:00
|
|
|
|
|
2024-04-12 21:14:24 +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 ) {
|
2024-04-12 21:14:24 +03:00
|
|
|
|
|
|
|
|
|
|
$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';
|
2024-04-12 21:14:24 +03:00
|
|
|
|
$phpmailer->SMTPSecure = 'ssl';
|
|
|
|
|
|
$phpmailer->From = 'news@mail.agroexpert.press';
|
2024-04-14 21:37:57 +03:00
|
|
|
|
$phpmailer->FromName = 'Агроэксперт';
|
2024-04-12 21:14:24 +03:00
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-04-14 21:37:57 +03:00
|
|
|
|
add_action( 'phpmailer_init', 'agroxpert_send_smtp_email' );
|
|
|
|
|
|
|
2024-04-12 21:14:24 +03:00
|
|
|
|
|
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
|
|
|
|
// подписчики на главную
|
2025-02-04 00:19:35 +03:00
|
|
|
|
//add_action('admin_init', 'restrict_subscriber_admin_access');
|
2024-08-27 01:07:35 +03:00
|
|
|
|
function restrict_subscriber_admin_access() {
|
|
|
|
|
|
// Проверяем, что пользователь вошел в систему и имеет роль 'subscriber'
|
|
|
|
|
|
if (current_user_can('subscriber')) {
|
|
|
|
|
|
// Перенаправляем на главную страницу сайта
|
|
|
|
|
|
wp_redirect(home_url());
|
|
|
|
|
|
exit;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
//авторы только в черновики
|
|
|
|
|
|
function restrict_author_publish_posts( $data ) {
|
|
|
|
|
|
// Проверяем, что текущий пользователь - автор
|
|
|
|
|
|
if ( current_user_can( 'author' ) && $data['post_status'] == 'publish' ) {
|
|
|
|
|
|
// Отключаем публикацию для авторов
|
|
|
|
|
|
$data['post_status'] = 'draft'; // Сохраняем как черновик
|
|
|
|
|
|
}
|
|
|
|
|
|
return $data;
|
|
|
|
|
|
}
|
|
|
|
|
|
add_filter( 'wp_insert_post_data', 'restrict_author_publish_posts' );
|
|
|
|
|
|
|
2025-04-18 19:44:26 +03:00
|
|
|
|
function replace_first_figure_in_content($content) {
|
|
|
|
|
|
|
|
|
|
|
|
global $post;
|
|
|
|
|
|
|
|
|
|
|
|
if (!isset($post->ID)) {
|
|
|
|
|
|
return $content;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$startPos = strpos($content, '<figure');
|
|
|
|
|
|
if ($startPos === false) {
|
|
|
|
|
|
return $content; // Если <figure> не найдено, возвращаем исходный контент
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$endPos = strpos($content, '</figure>', $startPos);
|
|
|
|
|
|
if ($endPos === false) {
|
|
|
|
|
|
return $content; // Если </figure> не найдено, возвращаем исходный контент
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Рассчитываем длину части, которую нужно заменить
|
|
|
|
|
|
$endPos += strlen('</figure>'); // Двигаем указатель на конец тега </figure>
|
|
|
|
|
|
$figureHtml = substr($content, $startPos, $endPos - $startPos);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Генерируем HTML изображения
|
|
|
|
|
|
$replacement = render_webp_picture_by_post($post->ID);
|
|
|
|
|
|
|
|
|
|
|
|
// Ищем <figcaption> внутри исходного фрагмента
|
|
|
|
|
|
$caption = '';
|
|
|
|
|
|
if (preg_match('/<figcaption.*?>(.*?)<\/figcaption>/is', $content, $caption_match)) {
|
|
|
|
|
|
$caption = '<div class="image-caption">'.$caption_match[1].'</div>'; // только содержимое
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$replacement .= $caption;
|
|
|
|
|
|
|
|
|
|
|
|
// Заменяем найденный кусок на новый HTML
|
|
|
|
|
|
$newContent = substr_replace($content, $replacement, $startPos, $endPos - $startPos);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return $newContent;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Ищем первое <figure>...</figure>
|
|
|
|
|
|
if (preg_match('/<figure.*?>.*?<\/figure>/is', $content, $match)) {
|
|
|
|
|
|
$original_figure = $match[0];
|
|
|
|
|
|
|
|
|
|
|
|
// Извлекаем <figcaption> (если есть)
|
|
|
|
|
|
$caption = '';
|
|
|
|
|
|
if (preg_match('/<figcaption.*?>(.*?)<\/figcaption>/is', $original_figure, $caption_match)) {
|
|
|
|
|
|
$caption = $caption_match[1]; // только содержимое
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Генерируем HTML изображения
|
|
|
|
|
|
$replacement = render_webp_picture_by_post($post->ID);
|
|
|
|
|
|
|
|
|
|
|
|
// Добавляем подпись, если есть
|
|
|
|
|
|
if (!empty($caption)) {
|
|
|
|
|
|
$replacement .= '<div class="image-caption">' . esc_html($caption) . '</div>';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Заменяем первое вхождение <figure>...</figure> на $replacement
|
|
|
|
|
|
$content = preg_replace('/<figure.*?>.*?<\/figure>/is', $replacement, $content, 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return $content;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-06-03 23:50:58 +03:00
|
|
|
|
|
|
|
|
|
|
function add_cookie_consent() {
|
|
|
|
|
|
if (!isset($_COOKIE['cookie_consent_accepted'])) {
|
|
|
|
|
|
get_template_part('cookie-consent');
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
add_action('wp_footer', 'add_cookie_consent');
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-05-12 11:47:09 +03:00
|
|
|
|
/**
|
|
|
|
|
|
* убираем рубрики - Смена (7)
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
// Для стандартного метабокса (классический редактор и часть Гутенберга)
|
|
|
|
|
|
add_filter('get_terms', function($terms, $taxonomies, $args) {
|
|
|
|
|
|
global $pagenow;
|
|
|
|
|
|
if (($pagenow === 'post.php' || $pagenow === 'post-new.php') && in_array('category', $taxonomies)) {
|
2025-05-26 19:33:14 +03:00
|
|
|
|
$exclude_ids = [7, 740, 741, 742, 743, 744, 745, 746, 762]; // ID рубрик, которые нужно скрыть
|
2025-05-12 11:47:09 +03:00
|
|
|
|
$terms = array_filter($terms, fn($term) => !in_array($term->term_id, $exclude_ids));
|
|
|
|
|
|
}
|
|
|
|
|
|
return $terms;
|
|
|
|
|
|
}, 10, 3);
|
|
|
|
|
|
|
|
|
|
|
|
// Для REST API (панель справа в редакторе Gutenberg)
|
|
|
|
|
|
add_filter('rest_category_query', function($args, $request) {
|
2025-05-26 19:33:14 +03:00
|
|
|
|
$args['exclude'] = [7, 740, 741, 742, 743, 744, 745, 746, 762]; // Те же ID, что и выше
|
2025-05-12 11:47:09 +03:00
|
|
|
|
return $args;
|
|
|
|
|
|
}, 10, 2);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-04-18 19:44:26 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-02-04 00:19:35 +03:00
|
|
|
|
|
2024-08-27 01:07:35 +03:00
|
|
|
|
|