2025-07-09 21:21:17 +03:00
< ? php
2025-08-27 00:00:02 +03:00
ini_set ( 'display_errors' , 1 );
error_reporting ( E_ERROR );
2025-07-09 21:21:17 +03:00
header ( 'Content-Type: text/html; charset=utf-8' );
2025-08-27 00:00:02 +03:00
require get_theme_file_path ( 'clear-functions.php' );
2025-07-09 21:21:17 +03:00
require " dirty-functions.php " ;
require " garbage-functions.php " ;
2025-08-27 00:00:02 +03:00
require " block-cache-manager.php " ; //кешируем долгоживущие блоки
2025-07-09 21:21:17 +03:00
include " inc/get_cached_alm.php " ;
//TODO: Убрать все эти is_yn, is_zen и прочее и внутри плагинов регулировать вывод
//TODO: Убрать все posts_where, переписать в pre_get_posts
//TODO: Убрать все cpt в плагин
// Настройки Redis
//define('WP_REDIS_HOST', '31.129.43.216'); // или IP сервера Redis
//define('WP_REDIS_PORT', 6379);
//define('WP_REDIS_PASSWORD', 'hjl89ukiAsdfkd');
//define('WP_REDIS_TIMEOUT', 1);
//define('WP_REDIS_READ_TIMEOUT', 1);
// Отключаем все автообновления
define ( 'AUTOMATIC_UPDATER_DISABLED' , true );
// Отключаем только обновления ядра
define ( 'WP_AUTO_UPDATE_CORE' , false );
2025-08-27 00:00:02 +03:00
//кеш блоков
define ( 'CACHED_TEMPLATE' , trailingslashit ( wp_upload_dir ()[ 'basedir' ] ) . 'cached_template/' );
2025-07-09 21:21:17 +03:00
// Отключаем обновления плагинов и тем
add_filter ( 'auto_update_plugin' , '__return_false' );
add_filter ( 'auto_update_theme' , '__return_false' );
2025-08-27 00:00:02 +03:00
2025-07-09 21:21:17 +03:00
//debug
/**
register_shutdown_function ( function () {
global $wpdb ;
$logs = [];
$time = microtime ( true ) - $_SERVER [ 'REQUEST_TIME_FLOAT' ];
// Добавляем URL запроса
$current_url = ( isset ( $_SERVER [ 'HTTPS' ]) && $_SERVER [ 'HTTPS' ] === 'on' ? " https " : " http " )
. " :// $_SERVER[HTTP_HOST] $_SERVER[REQUEST_URI] " ;
$logs [] = " URL: " . $current_url ;
$logs [] = " Время выполнения: " . round ( $time , 2 ) . " сек " ;
$log_file = ABSPATH . 'wp-content/custom-debug.log' ;
if ( function_exists ( 'get_num_queries' )) {
$logs [] = " SQL-запросов: " . get_num_queries ();
}
// Добавляем 5 самых медленных запросов (если доступно)
if ( ! empty ( $wpdb -> queries )) {
usort ( $wpdb -> queries , function ( $a , $b ) {
return $b [ 1 ] - $a [ 1 ];
});
$slow_queries = array_slice ( $wpdb -> queries , 0 , 5 );
foreach ( $slow_queries as $i => $query ) {
$logs [] = " Медленный запрос # " . ( $i + 1 ) . " : " . round ( $query [ 1 ], 4 ) . " сек | " .
substr ( str_replace ([ " \n " , " \r " ], ' ' , $query [ 0 ]), 0 , 200 ) . " ... " ;
}
}
$message = implode ( " | " , $logs );
file_put_contents ( $log_file , $message . " \n \n " , FILE_APPEND | LOCK_EX );
});
*/
add_action ( 'before_rocket_clean_files' , function ( $urls ) {
foreach ( $urls as $url ) {
if ( str_contains ( $url , 'g.profile.ru' ) !== false ) {
return ;
}
}
$urls_for_clean = array_map ( function ( $url ) {
return str_replace ( 'profile.ru' , 'g.profile.ru' , $url );
}, $urls );
\rocket_clean_files ( $urls_for_clean );
return $urls ;
}, 1 , 999 );
add_filter ( 'rocket_clean_domain_urls' , function ( $urls , $lang ) {
$urls = [
" https://profile.ru " ,
" https://g.profile.ru "
];
return $urls ;
}, 2 , 999 );
add_action ( 'before_rocket_clean_domain' , function ( $root , $lang , $url ) {
if ( mb_stripos ( $url , 'g.profile.ru' ) !== false ) {
return ;
}
rocket_clean_files ([ 'https://g.profile.ru/' ]);
return ;
}, 3 , 999 );
add_filter ( 'rocket_post_purge_urls' , function ( $purge_urls , $post ) {
$newurls = [];
foreach ( $purge_urls as $purge_url ) {
$newurls [] = str_replace ( 'admin.profile.ru' , 'profile.ru' , $purge_url );
$newurls [] = str_replace ( 'admin.profile.ru' , 'g.profile.ru' , $purge_url );
}
//$newurls[] = 'https://g.profile.ru/';
return $newurls ;
}, 2 , 999 );
add_action ( 'before_rocket_clean_home' , function ( $root , $lang ){
$root = str_replace ( '/profile.ru*' , '/g.profile.ru' , $root );
$files = glob ( $root . '/*' , GLOB_NOSORT );
if ( $files ) {
foreach ( $files as $file ) {
if ( preg_match ( '#/index(?:-.+\.|\.)html(?:_gzip)?$#' , $file ) ) {
\rocket_direct_filesystem () -> delete ( $file );
}
}
}
}, 2 , 999 );
/**********************************************************************************************************************/
$ver = '2.6.12' ;
$test_page_id = 216301 ;
$colors = array (
" blue " => " Голубой " ,
" indigo " => " Индиго " ,
" purple " => " Пурпурный " ,
" pink " => " Розовый " ,
" red " => " Красный " ,
" orange " => " Оранжевый " ,
" yellow " => " Желтый " ,
" green " => " Зеленый " ,
" teal " => " Биюзовый " ,
" cyan " => " Циан " ,
" white " => " Белый " ,
" gray " => " Серый " ,
" gray-dark " => " Темно-серый " ,
" light " => " Магнолия " ,
" dark " => " Космос "
);
$termTaxTypes = array (
" category " => " Рубрика " ,
" story " => " Сюжет " ,
" branding " => " Спецпроект "
);
//проверка на рсску для Я.Н .
function is_yn (){
if ( mb_strripos ( filter_input ( INPUT_SERVER , 'REQUEST_URI' ), get_option ( 'layf_custom_url' )) !== false ){
return true ;
}
return false ;
}
//проверка на рсску для Я.Д.
function is_zen (){
if ( mb_strripos ( filter_input ( INPUT_SERVER , 'REQUEST_URI' ) , get_option ( 'yzrssname' )) !== false && get_option ( 'yzrssname' ) !== false ){
return true ;
}
return false ;
}
/**
* Это говно убрать в следующих итерациях
*/
/**
add_filter ( 'posts_orderby' , function ( $order ){
if (( is_post_type_archive () || is_front_page ()) && ! is_admin () && ! is_events ()){
$order = "
CASE
WHEN ( pm123 . meta_value = 1 ) THEN
1 ELSE 0
END DESC ,
wp_posts . post_date DESC
" ;
}
return $order ;
});
add_filter ( 'posts_join' , function ( $order ){
if (( is_post_type_archive () || is_front_page ()) && ! is_admin () && ! is_events ()){
$order .= "
left join wp_postmeta pm123 on pm123 . post_id = wp_posts . ID and pm123 . meta_key = '_breaking'
" ;
}
return $order ;
});
*/
//добавляем нестандартные типы материалов (новости, статьи)
function add_article_in_main_query ( $query ) {
global $wp ;
if ( is_yn ()){
$query -> set ( 'tag__not_in' , array ( 7840 ));
}
$query -> set ( 'ep_integrate' , false ); //включили ep
//var_dump( get_option('layf_custom_url'));
if ( is_admin ()){
if ( get_query_var ( 'author_name' )){
$query -> set ( 'post_type' , array ( 'profile_article' , 'anew' , 'yellow' ));
//echo '<!--'.$query->request.'-->';
} else if ( filter_input ( INPUT_GET , 'page' ) == 'wps_authors_page' ){
$query -> set ( 'post_type' , array ( 'profile_article' , 'anew' , 'yellow' ));
$query -> set ( 'posts_per_page' , - 1 );
} else if ( filter_input ( INPUT_GET , 'id' ) == 'tag_request' && filter_input ( INPUT_GET , 'post_id' ) == 103454 ){
$query -> set ( 'post_type' , array ( 'profile_article' , 'anew' , 'yellow' ));
}
if ( user_has_role ( get_current_user_id (), 'intern' )){
//$query->set('author__in', array(get_current_user_id()));
}
return $query ;
}
else if ( $query -> is_post_type_archive () && ! is_admin ()){
$queried_object = get_queried_object ();
if ( $queried_object -> name == 'archive' ){
wp_redirect ( " /?s= " );
}
$queried_object = ( $queried_object -> name == 'yellow' ) ? array ( $queried_object -> name , " anew " ) : $queried_object -> name ;
$query -> set ( 'post_type' , $queried_object );
} else {
if ( $query -> is_feed ()){
//фиды
$query -> set ( 'post_type' , array ( 'profile_article' , 'anew' , 'yellow' ));
} else if (
( $query -> is_main_query () && is_tag () && get_queried_object () -> term_id == 103454 )
||
( filter_input ( INPUT_GET , 'id' ) == 'tag_request' && filter_input ( INPUT_GET , 'post_id' ) == 103454 )
){
$query -> set ( 'post_type' , array ( 'profile_article' , 'anew' , 'yellow' ));
} else if ( $query -> is_main_query () && ! is_admin () && is_author ()){
//страница автора
//$query->set('post_type', array('profile_article'));
global $coauthors_plus ;
$guest_author_id = $coauthors_plus -> get_coauthor_by ( 'user_login' , get_query_var ( 'author_name' )) -> ID ;
$only_articles = get_post_meta ( $guest_author_id , 'show_only_articles' , true );
if ( $only_articles ){
$query -> set ( 'post_type' , array ( 'profile_article' ));
} else {
$query -> set ( 'post_type' , array ( 'profile_article' , 'anew' , 'yellow' ));
}
} else if ( $query -> is_main_query () && ! is_admin () && ( is_category () || is_search () || is_archive ())){
//страницы рубрик, поиска, архива
if ( is_search () && strlen ( filter_input ( INPUT_GET , 's' , FILTER_SANITIZE_STRING )) < 5 && strlen ( filter_input ( INPUT_GET , 's' , FILTER_SANITIZE_STRING )) != 0 ){
wp_redirect ( '/?s=' );
} else if ( is_search () && strlen ( filter_input ( INPUT_GET , 's' , FILTER_SANITIZE_STRING )) == 0 ){
//return false;die;
}
$query -> set ( 'post_type' , array ( 'profile_article' , 'anew' , 'yellow' ));
if ( get_queried_object_id () == 104418 ){
$query -> set ( 'posts_per_page' , 100 );
}
} else if ( $query -> is_main_query () && ! is_admin () && is_single ()){
//страница материала
$query -> set ( 'post_type' , array ( 'profile_article' , 'anew' , 'archive' , 'yellow' ));
} else if ( $query -> is_main_query () && is_post_type_archive ()){
//страница архива типа материала
$query -> set ( 'post_type' , get_query_var ( 'post_type' ));
} else if ( $query -> is_main_query () && ! is_home () && ! is_single () && ! is_page () && strripos ( home_url ( $wp -> request ) . '/' , get_option ( 'layf_custom_url' )) !== false ){
//фид я.новости
$query -> set ( 'post_type' , array ( 'profile_article' , 'anew' , 'archive' , 'yellow' ));
} else if ( $query -> is_main_query () && ! is_home () && ! is_single () && ! is_page ()) {
//админка
$query -> set ( 'post_type' , array ( 'profile_article' , 'anew' ));
} else if ( $query -> is_main_query () && ! is_admin ()){
//все остальное
$query -> set ( 'post_type' , array ( 'profile_article' , 'page' , 'anew' ));
}
}
if ( is_tag () && ! is_admin ()){
$query -> set ( 'posts_per_page' , 20 );
}
return $query ;
}
add_action ( 'pre_get_posts' , 'add_article_in_main_query' );
//обрабатываем вставку картинок в тело статьи
add_filter ( 'image_send_to_editor' , 'custom_image_send_to_editor' , 10 , 8 );
function custom_image_send_to_editor ( $html , $id , $caption , $title , $align , $url , $size , $alt ){
$auth = htmlspecialchars ( $caption );
$html = str_replace ( '<img' , '<img data-auth="' . $auth . '"' , $html );
//$html = str_replace('<a', '<a class="js-simple-lightbox"', $html);
return $html ;
}
add_filter ( 'image_add_caption_text' , 'custom_image_add_caption_text' , 10 , 2 );
function custom_image_add_caption_text ( $caption , $id ){
$desc = str_replace ( " \n " , " " , strip_tags ( apply_filters ( 'the_content' , get_post_field ( 'post_content' , $id ))));
return $desc ;
}
//изменение вывода гарелеи
function profile_gallery_shortcode ( $output = '' , $atts = null , $instance = null ) {
if ( get_post_format () == 'gallery' ){
$return = '' ;
foreach ( explode ( ',' , $atts [ 'ids' ]) as $id ){
$attachment = wp_get_attachment ( $id );
$dataphoto = ( strlen ( $attachment [ 'caption' ]) == 0 ) ? '' : 'Фото: ' . str_replace ( 'Фото:' , '' , $attachment [ 'caption' ]);
$return .= '<div data-content="' . $attachment [ 'description' ] . '" data-photo="' . $dataphoto . '">' ;
$return .= '<img loading="lazy" src="' . wp_get_attachment_image_url ( $id , 'full' ) . '" />' ;
$return .= '</div>' ;
}
return $return ;
} else {
return $output ;
}
}
add_filter ( 'post_gallery' , 'profile_gallery_shortcode' , 10 , 3 );
//собираем все свойства файла
function wp_get_attachment ( $attachment_id ) {
$attachment = get_post ( $attachment_id );
return array (
'alt' => htmlspecialchars ( get_post_meta ( $attachment -> ID , '_wp_attachment_image_alt' , true )),
'caption' => htmlspecialchars ( $attachment -> post_excerpt ),
'description' => htmlspecialchars ( $attachment -> post_content ),
'href' => get_permalink ( $attachment -> ID ),
'src' => $attachment -> guid ,
'title' => htmlspecialchars ( $attachment -> post_title )
);
}
//добавление копирайта к свойствам объекта изображения
add_filter ( 'wp_get_attachment_image_attributes' , 'profile_get_attachment_image_attributes' , 10 , 3 );
function profile_get_attachment_image_attributes ( $attr , $attachment , $size ) {
if ( ! is_object ( $attr )) return $attr ;
$attr -> copyright = wp_get_attachment_caption ( $attachment -> ID );
return $attr ;
}
//копирайт для галереи
function get_post_gallery_copyright ( $postID ) {
$gallery = get_post_gallery ( get_post ( $postID ), false );
$attachment = wp_get_attachment ( array_shift ( explode ( ',' , $gallery [ 'ids' ])));
if ( strlen ( $attachment [ 'caption' ]) == 0 ){ return ;}
return 'Фото: ' . str_replace ( 'Фото:' , '' , $attachment [ 'caption' ]);
}
//вывод описания для первого снимка галереи
function get_post_gallery_description ( $postID ) {
$gallery = get_post_gallery ( get_post ( $postID ), false );
$attachment = wp_get_attachment ( array_shift ( explode ( ',' , $gallery [ 'ids' ])));
return $attachment [ 'description' ];
}
//основная категория поста
function get_post_primary_category ( $post_id , $term = 'category' , $return_all_categories = false ){
$return = array ();
if ( class_exists ( 'WPSEO_Primary_Term' )){
$wpseo_primary_term = new WPSEO_Primary_Term ( $term , $post_id );
$primary_term = get_term ( $wpseo_primary_term -> get_primary_term ());
if ( ! is_wp_error ( $primary_term )){
$return [ 'primary_category' ] = $primary_term ;
}
}
if ( empty ( $return [ 'primary_category' ]) || $return_all_categories ){
$categories_list = get_the_terms ( $post_id , $term );
if ( empty ( $return [ 'primary_category' ]) && ! empty ( $categories_list )){
$return [ 'primary_category' ] = $categories_list [ 0 ]; //get the first category
}
if ( $return_all_categories ){
$return [ 'all_categories' ] = array ();
if ( ! empty ( $categories_list )){
foreach ( $categories_list as & $category ){
$return [ 'all_categories' ][] = $category -> term_id ;
}
}
}
}
return $return ;
}
function get_post_primary_category_id ( $post_id ){
$term = get_post_primary_category ( $post_id );
$term = $term [ 'primary_category' ];
return $term -> term_id ;
}
function is_branding_page (){
if ( ! is_object ( get_queried_object ())){
return false ;
}
$out = get_term_meta ( get_queried_object () -> term_id , 'type' , 1 );
return $out ;
}
//парсинг класса тела сайта
//правильные урлы
function remove_cpt_slug ( $post_link , $post , $leavename ) {
if ( 'profile_article' != $post -> post_type || 'publish' != $post -> post_status ) {
return $post_link ;
}
$post_link = str_replace ( '/' . $post -> post_type . '/' , '/' , $post_link );
$post_link = str_replace ( '/articles/' , '/' , $post_link );
return $post_link ;
}
add_filter ( 'post_type_link' , 'remove_cpt_slug' , 10 , 3 );
function change_slug_struct ( $query ) {
if ( ! $query -> is_main_query () || 2 != count ( $query -> query ) || ! isset ( $query -> query [ 'page' ] ) ) {
return ;
}
if ( ! empty ( $query -> query [ 'name' ] ) ) {
$query -> set ( 'post_type' , array ( 'post' , 'profile_article' , 'page' ) );
} elseif ( ! empty ( $query -> query [ 'category_name' ] ) && false === strpos ( $query -> query [ 'category_name' ], '/' ) ) {
$query -> set ( 'post_type' , array ( 'post' , 'profile_article' , 'page' ) );
$query -> set ( 'name' , $query -> query [ 'category_name' ] );
}
}
add_action ( 'pre_get_posts' , 'change_slug_struct' );
//проверка наличия тега more
function maybe_has_more_link ( $post_id ) {
$post = get_post ( $post_id );
$content = $post -> post_content ;
$data_array = get_extended ( $content );
return '' !== $data_array [ 'extended' ];
}
//получаем первый абзац
function get_first_paragraph (){
global $post ;
$str = '' ;
$i = 0 ;
$content = wpautop ( get_the_content () );
//debug('-'.$content);
if ( mb_strpos ( $content , '</p>' ) === false ){
return $content ;
}
while ( $str == '' ){
$i ++ ;
$str = mb_substr ( $content , 0 , mb_strpos ( $content , '</p>' , $i * 7 ) + 4 );
$str = strip_shortcodes ( strip_tags ( $str ));
}
return $str ;
}
//не пробелом единым
function strposa ( $haystack , $needles = array (), $offset = 0 ) {
$chr = array ();
foreach ( $needles as $needle ) {
$res = mb_stripos ( $haystack , $needle , $offset );
if ( $res !== false ) $chr [ $needle ] = $res ;
}
if ( empty ( $chr )) return false ;
return min ( $chr );
}
//генерим анонс с о всеми условиями
function the_announce (){
global $post ;
global $more ;
$more = 1 ;
$len = 200 ; //количество символов
$end = '...' ;
$more = maybe_has_more_link ( $post -> ID );
$content = get_post_field ( 'post_content' , $post -> ID );
$content_parts = get_extended ( $content );
if ( $more && mb_strlen ( strip_tags ( $content_parts [ 'main' ])) < $len ){
if ( mb_strlen ( strip_tags ( $content_parts [ 'main' ])) > 50 ){
echo strip_tags ( $content_parts [ 'main' ]) . $end ;
} else {
$p = get_first_paragraph ();
if ( mb_strlen ( $p ) < $len ){
echo $p . $end ;
} else {
$length = strposa ( $p , array ( " " , " . " , " , " , " ; " , " ' " , " \" " ), $len );
echo mb_substr ( $p , 0 , (( int ) $length + ( int ) $len )) . $end ;
}
}
} else {
$p = get_first_paragraph ();
if ( mb_strlen ( $p ) < $len ){
echo $p . $end ;
} else {
$length = strposa ( $p , array ( " " , " . " , " , " , " ; " , " ' " , " \" " ), $len );
echo mb_substr ( $p , 0 , (( int ) $length + ( int ) $len )) . $end ;
}
}
}
//убираем лишнее из Р С С
function full_text_formatting_rss ( $content ){
$content = htmlspecialchars ( html_entity_decode ( $content ));
return $content ;
}
function test_full_text_formatting_rss ( $content ){
$content = htmlspecialchars_decode ( html_entity_decode ( $content ));
return $content ;
}
add_filter ( 'layf_content_feed' , 'full_text_formatting_rss' , 20 );
add_filter ( 'layf_turbo_content_feed' , 'full_text_formatting_rss' , 20 );
apply_filters ( 'bloginfo_rss' , 'full_text_formatting_rss' , 20 );
add_filter ( 'get_the_excerpt' , 'full_text_formatting_rss' , 20 );
add_filter ( 'the_excerpt_rss' , 'full_text_formatting_rss' , 20 );
add_filter ( 'layf_turbo_content_feed' , 'test_full_text_formatting_rss' , 30 );
add_filter ( " the_content " , function ( $content ){
return str_replace (
[
" 123.profile.ru " ,
" profile.ru:1234 " ,
" profile.ru:5678 "
],
" profile.ru " ,
$content
);
}, 999 );
2025-08-27 00:00:02 +03:00
/**
* Исправляет битые ссылки с одним слэшем после https :/ и добавляет домен .
*
* @ param string $url Битая ссылка .
* @ param string $domain Домен ( без слэша в конце , например " example.com " ) .
* @ return string Исправленная ссылка .
*/
function fix_broken_url ( $url , $domain ) {
// Удаляем лишние пробелы
$url = trim ( $url );
2025-07-09 21:21:17 +03:00
2025-08-27 00:00:02 +03:00
// Если ссылка начинается с https:/ и нет второго слэша — исправляем
if ( preg_match ( '#^https:/([^/].*)#i' , $url , $matches )) {
// Добавляем правильный https:// и домен
return 'https://' . $domain . '/' . ltrim ( $matches [ 1 ], '/' );
}
// Если ссылка уже правильная, возвращаем как есть
return $url ;
}
2025-07-09 21:21:17 +03:00
// гутенберг бодрым шагом идет нахер
add_filter ( 'use_block_editor_for_post' , '__return_false' , 10 );
function debug ( $content ){
if ( ! is_string ( $content )){
ob_start ();
var_dump ( $content );
$content = ob_get_clean ();
}
$request = " https://api.telegram.org/bot1184440628:AAE5N10dnzClx3Qce4v1mBD9ax1BsHo98Rs/sendMessage?chat_id=202319661&parse_mode=HTML&text= " . urlencode ( $content );
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_SSL_VERIFYPEER , false );
curl_setopt ( $ch , CURLOPT_VERBOSE , true );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
curl_setopt ( $ch , CURLOPT_USERAGENT , 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)' );
curl_setopt ( $ch , CURLOPT_URL , $request );
$return = curl_exec ( $ch );
return true ;
}
add_filter ( 'the_content' , function ( $content ) {
$allow = [
" Т А С С " ,
" TASS " ,
" Профиль " ,
" Shutterstock "
];
$preview = wp_is_mobile () ? get_template_directory_uri () . '/assets/img/Profile_lazyload_m.webp' : get_template_directory_uri () . '/assets/img/Profile_lazyload.jpg' ;
libxml_use_internal_errors ( true );
$dom = new DOMDocument ();
$dom -> loadHTML ( '<?xml encoding="utf-8" ?>' . $content );
$images = $dom -> getElementsByTagName ( 'img' );
foreach ( $images as $image ) {
$capt = " " ;
$child = $image ;
$wrapper = $image -> parentNode ;
if ( $wrapper -> tagName == 'p' ) {
$id = ( int ) preg_replace ( '~\D+~' , '' , $image -> getAttribute ( 'class' ));
$attachment = get_post ( $id );
$figure = $dom -> createElement ( 'figure' );
$figure -> setAttribute ( 'class' , $image -> getAttribute ( 'class' ));
if ( file_exists ( $image -> getAttribute ( 'src' ))){
$mw = (( int ) $image -> getAttribute ( 'width' )) ? (( int ) $image -> getAttribute ( 'width' )) : ( getimagesize ( $image -> getAttribute ( 'src' )))[ 0 ];
$figure -> setAttribute ( 'style' , 'max-width:' . $mw . " px " );
}
if ( ! is_feed () && ! is_amp_endpoint ()) {
$image -> setAttribute ( 'class' , 'lazyload' );
$image -> removeAttribute ( 'sizes' );
$image -> removeAttribute ( 'srcset' );
}
if ( get_queried_object_id () == 1089324 && wp_is_mobile ()){
$image -> setAttribute ( 'data-src' , $image -> getAttribute ( 'src' ));
$image -> setAttribute ( 'src' , get_template_directory_uri () . '/assets/img/Profile_lazyload_m.webp' );
$image -> setAttribute ( 'width' , ( int ) $image -> getAttribute ( 'width' ) . 'px' );
$image -> setAttribute ( 'height' , ( int ) $image -> getAttribute ( 'height' ) . 'px' );
}
$figcaption = $dom -> createElement ( 'figcaption' );
$auth = $dom -> createElement ( 'span' );
if ( strlen ( $image -> getAttribute ( 'data-auth' )) !== 0 ) {
$capt = $image -> getAttribute ( 'data-auth' );
} else if ( strlen ( $attachment -> post_excerpt ) !== 0 && $attachment -> post_type == 'attachment' && ! strposa ( $attachment -> post_excerpt , [ 'instag' , 'faceb' , 'инстаг' ])){
$capt = $attachment -> post_excerpt ;
}
if ( mb_strlen ( $capt ) === 0 && mb_strlen ( $image -> getAttribute ( 'alt' )) !== 0 ){
$capt = $image -> getAttribute ( 'alt' );
}
$flag = true ;
if ( in_array ( get_post_type (), [ 'anew' , 'yellow' ] ) && get_the_date ( " U " ) < 1719187200 ) {
$flag = false ;
foreach ( $allow as $c ) {
if ( str_contains ( $capt , $c )) {
$flag = true ;
}
}
}
if ( $flag === false ) {
$figure = $dom -> createElement ( 'div' );
}
$image -> parentNode -> replaceChild ( $figure , $image );
if ( $flag === false ) {
continue ;
}
$figure -> appendChild ( $child );
$auth -> nodeValue = " © " . $capt ;
$figcaption -> appendChild ( $auth );
if ( strlen ( $attachment -> post_content ) !== 0 && $attachment -> post_type == 'attachment' ){
$desc = $dom -> createElement ( 'p' );
$desc -> nodeValue = $attachment -> post_content ;
$figcaption -> appendChild ( $desc );
}
$figure -> appendChild ( $figcaption );
}
}
$html = str_replace ([ '<body>' , '</body>' ], '' , $dom -> saveHTML ( $dom -> getElementsByTagName ( 'body' ) -> item ( 0 )));
$html = preg_replace_callback (
'|<figcaption><span>(.*)</span></figcaption>|Uis' ,
function ( $matches ){
return str_ireplace ( 'depositphotos.com' , '<a href="https://depositphotos.com/" target="_blank">depositphotos.com</a>' , $matches [ 0 ]);
},
$html
);
libxml_use_internal_errors ( false );
//$html .= '<!------000000------->';
return $html ;
}, 999 , 1 );
//выебоны с галереей!
function real_img_caption_shortcode ( $attr , $content = null ) { //автор и название картинки
if ( ! isset ( $attr [ 'caption' ] ) ) {
if ( preg_match ( '#((?:<a [^>]+>\s*)?<img [^>]+>(?:\s*</a>)?)(.*)#is' , $content , $matches ) ) {
$content = $matches [ 1 ];
$attr [ 'caption' ] = trim ( $matches [ 2 ] );
}
} elseif ( strpos ( $attr [ 'caption' ], '<' ) !== false ) {
$attr [ 'caption' ] = wp_kses ( $attr [ 'caption' ], 'post' );
}
$atts = shortcode_atts ( array (
'id' => '' ,
'align' => 'alignnone' ,
'width' => '' ,
'caption' => '' ,
'class' => '' ,
), $attr , 'caption' );
$auth = preg_replace ( " / \" .*/ " , " " , preg_replace ( " /.*data-auth= \" / " , " " , $content ));
if ( strposa ( $auth , [ 'instag' , 'faceb' , 'инстаг' ]) > 0 ) {
$auth = '' ;
}
$html = '<figure style="max-width:' . $atts [ 'width' ] . 'px" id="' . $atts [ 'id' ] . '" class="' . $atts [ 'align' ] . '">'
. do_shortcode ( $content )
. '<figcaption><p>' . $atts [ 'caption' ] . ' </p>'
. '<span>' . $auth . '</span></figcaption></figure>' ;
return $html ;
}
add_shortcode ( 'wp_caption' , 'real_img_caption_shortcode' );
add_shortcode ( 'caption' , 'real_img_caption_shortcode' );
//загрузка кастомных стилей
function customStyles (){
if ( is_branding ()){
$file = 'branding-styles' ;
if ( file_exists ( __DIR__ . '/' . $file . '.php' )){
get_template_part ( $file );
}
}
return true ;
}
//это чтобы достать аватарку автора
function coauthors_get_avatar_url ( $coauthor , $size = 32 , $default = '' , $alt = false ) {
global $coauthors_plus ;
if ( ! is_object ( $coauthor ) ) {
return '' ;
}
if ( isset ( $coauthor -> type ) && 'guest-author' == $coauthor -> type ) {
$guest_author_thumbnail = $coauthors_plus -> guest_authors -> get_guest_author_thumbnail ( $coauthor , $size );
if ( $guest_author_thumbnail ) {
preg_match ( '@src="([^"]+)"@' , $guest_author_thumbnail , $match );
$src = array_pop ( $match );
return $src ;
}
}
if ( isset ( $coauthor -> user_email ) ) {
preg_match ( '@src="([^"]+)"@' , get_avatar ( $coauthor -> user_email , $size , $default , $alt ), $match );
$src = array_pop ( $match );
return $src ;
}
return '' ;
}
//Убираем тирешечки
add_action ( 'wp_insert_post_data' , 'dashes_replace' , 10 , 2 );
function dashes_replace ( $data , $postarr ){
$data [ 'post_content' ] = str_replace ( array ( ' - ' , ' — ' ), ' – ' , $data [ 'post_content' ] );
$data [ 'post_content' ] = str_replace ( array ( '—' ), '– ' , $data [ 'post_content' ] );
return $data ;
}
//убрал эти стремные яблочные дефисы
add_filter ( 'wp_insert_post_data' , 'replace_MACOS_symbols' , 10 , 1 );
function replace_MACOS_symbols ( $data ) {
$symbols = array (
" \ u001e " => " "
);
$data [ 'post_content' ] = json_decode ( strtr ( json_encode ( $data [ 'post_content' ]), $symbols ));
return $data ;
}
// хук для регистрации
add_action ( 'init' , 'create_taxonomy' );
function create_taxonomy (){
register_taxonomy ( 'archive_category' , array ( 'archive' ), array (
'label' => '' , // определяется параметром $labels->name
'labels' => array (
'name' => 'Рубрики архива архива' ,
'singular_name' => 'Рубрика архива' ,
'search_items' => 'Поиск по рубрикам архива' ,
'all_items' => 'В с е рубрики архива' ,
'view_item ' => 'Посмотреть рубрику архива' ,
'parent_item' => 'родительская рубрика архива' ,
'parent_item_colon' => 'родительская рубрика архива:' ,
'edit_item' => 'Редактировать рубрику архива' ,
'update_item' => 'Обновить рубрику архива' ,
'add_new_item' => 'Добавить рубрику архива' ,
'new_item_name' => 'Имя новой рубрики архива' ,
'menu_name' => 'Рубрики архива' ,
),
'description' => '' , // описание таксономии
'public' => true ,
'publicly_queryable' => null , // равен аргументу public
'show_in_nav_menus' => true , // равен аргументу public
'show_ui' => true , // равен аргументу public
'show_in_menu' => true , // равен аргументу show_ui
'show_tagcloud' => true , // равен аргументу show_ui
'show_in_rest' => null , // добавить в REST API
'rest_base' => null , // $taxonomy
'hierarchical' => false ,
//'update_count_callback' => '_update_post_term_count',
'rewrite' => true ,
//'query_var' => $taxonomy, // название параметра запроса
'capabilities' => array (),
'meta_box_cb' => null , // callback функция. Отвечает за html код метабокса (с версии 3.8): post_categories_meta_box или post_tags_meta_box. Если указать false, то метабокс будет отключен вообще
'show_admin_column' => false , // Позволить или нет авто-создание колонки таксономии в таблице ассоциированного типа записи. (с версии 3.5)
'_builtin' => false ,
'show_in_quick_edit' => null , // по умолчанию значение show_ui
) );
}
add_action ( 'init' , 'archive_register_post_type_init' );
function archive_register_post_type_init () {
$labels = array (
'name' => 'Архив' ,
'singular_name' => 'Архивная запись' ,
'add_new' => 'Добавить в архив' ,
'add_new_item' => 'Добавить в архив' ,
'edit_item' => 'Редактировать запись' ,
'new_item' => 'Архивная запись' ,
'all_items' => 'В с е записи архива' ,
'view_item' => 'Просмотр архива на сайте' ,
'search_items' => 'Искать в архиве' ,
'not_found' => 'В архиве не найдено.' ,
'not_found_in_trash' => 'В корзине нет архивных записей.' ,
'menu_name' => 'Архив'
);
$args = array (
'labels' => $labels ,
'public' => true ,
'show_ui' => true ,
'has_archive' => true ,
'supports' => array ( 'title' , 'subtitle' , 'editor' , 'author' , 'thumbnail' , 'excerpt' , 'trackbacks' , 'custom-fields' , 'comments' , 'revisions' , 'post-formats' ),
'taxonomies' => array ( 'post_tag' , 'category' ),
'rewrite' => array ( 'slug' => 'archive' , 'with_front' => true ),
'can_export' => true ,
'show_in_menu' => false ,
'menu_position' => 5 ,
'show_in_nav_menus' => false ,
'publicly_queryable' => true ,
'exclude_from_search' => false ,
'query_var' => true ,
'capability_type' => 'post' ,
'rest_base' => 'posts'
);
register_post_type ( 'archive' , $args );
}
//это чтобы было удобнее писать описание к фоточкам
add_action ( 'admin_head' , 'gallery_custom_css' );
function gallery_custom_css (){
echo '
< style >
@ media ( min - width : 1200 px ){
div . media - sidebar {
/*width:767px!important;*/
}
. media - modal - content . media - frame . media - frame - content . attachments - browser . media - toolbar ,
. media - modal - content . media - frame . media - frame - content . attachments - browser . attachments . ui - sortable {
right : 800 px ! important ;
}
. attachment - details . setting . value , . attachment - details . setting input [ type = email ], . attachment - details . setting input [ type = number ], . attachment - details . setting input [ type = password ], . attachment - details . setting input [ type = search ], . attachment - details . setting input [ type = tel ], . attachment - details . setting input [ type = text ], . attachment - details . setting input [ type = url ], . attachment - details . setting textarea , . media - sidebar . setting . value , . media - sidebar . setting input [ type = email ], . media - sidebar . setting input [ type = number ], . media - sidebar . setting input [ type = password ], . media - sidebar . setting input [ type = search ], . media - sidebar . setting input [ type = tel ], . media - sidebar . setting input [ type = text ], . media - sidebar . setting input [ type = url ], . media - sidebar . setting textarea {
width : 85 %! important ;
}
. attachment - details . setting span , . media - sidebar . setting span {
min - width : 10 %! important ;
}
}
</ style > ' ;
}
//сохраняем количество символов в посте
function add_post_charcount ( $post_id ) {
$content = get_post_field ( 'post_content' , $post_id ); // Get the content
$charcount = strlen ( strip_tags ( $content ) ); // Count the words
if ( ! add_post_meta ( $post_id , '_post_content_length' , $charcount , true ) ) {
update_post_meta ( $post_id , '_post_content_length' , $charcount );
}
}
add_action ( 'save_post' , 'add_post_charcount' );
add_action ( 'post_updated' , 'add_post_charcount' );
//счетчик символов
add_filter ( 'mce_external_plugins' , 'my_tinymce_plugins' );
function my_tinymce_plugins ( $plugins_array ) {
$plugins_array = array (
//'charactercount' => get_template_directory_uri()."/assets/js/admin/tinymce.plugin.charcount.js"
'charactercount' => get_template_directory_uri () . " /assets/js/admin/tinymce.plugin.charcount.js "
);
return $plugins_array ;
}
function admin_script () {
wp_enqueue_script ( 'thickbox' );
wp_enqueue_style ( 'thickbox' );
}
add_action ( 'admin_enqueue_scripts' , 'admin_script' );
//оформление счетчика символов!
function admin_style () {
if ( is_user_logged_in ()){
wp_enqueue_style ( 'admin-styles' , get_template_directory_uri () . '/assets/css/admin/app.css' );
}
}
add_action ( 'admin_enqueue_scripts' , 'admin_style' );
add_action ( 'wp_enqueue_scripts' , 'admin_style' );
2025-08-27 00:00:02 +03:00
//дополнительные стили и скрипты
add_action ( 'wp_enqueue_scripts' , function () {
wp_enqueue_script ( //добавляем корректор времени
'moscow-date' ,
get_template_directory_uri () . '/assets/js/moscow-date.js' ,
array (), // зависимости
filemtime ( get_template_directory () . '/assets/js/moscow-date.js' ), // версия
true // в футере
);
2025-07-09 21:21:17 +03:00
2025-08-27 00:00:02 +03:00
// Добавляем стиль
wp_enqueue_style (
'profile-style' , // уникальный идентификатор
get_template_directory_uri () . '/assets/css/profile-style.css' , // путь к файлу
array (), // зависимости
filemtime ( get_template_directory () . '/assets/css/profile-style.css' ) // версия
);
});
2025-07-09 21:21:17 +03:00
add_action ( 'admin_footer' , 'my_admin_footer' );
function my_admin_footer () {
get_template_part ( 'admin' , 'footer' );
}
add_action ( 'admin_head' , 'my_admin_header' );
function my_admin_header () {
get_template_part ( 'admin' , 'header' );
}
add_action ( 'init' , 'hide_revisions' );
function hide_revisions (){
if ( filter_input ( INPUT_GET , 'revision' , FILTER_VALIDATE_INT ) != 0 && ! current_user_can ( 'administrator' ) && ! current_user_can ( 'corrector' ) && ! current_user_can ( 'chief_editor' )){
wp_die ( 'Страница не существует. Проверьте URL адрес страницы или обратитесь к администратору.' );
}
}
add_action ( 'admin_footer' , 'hide_revisions_style' );
function hide_revisions_style () {
if ( ! current_user_can ( 'administrator' ) && ! current_user_can ( 'corrector' ) && ! current_user_can ( 'chief_editor' )){
echo '<style>.misc-pub-section.misc-pub-revisions,#last-edit{display:none !important;}</style>' ;
}
}
add_action ( 'admin_footer' , 'check_content_layout' );
function check_content_layout () {
if ( get_current_user_id () == 1 ){ return ;}
if ( get_current_user_id () == 53 ) {
//echo '<script>console.log("т-c-c-c;")</script>';
//return;
}
echo <<< EOL
< script >
document . forms . post . onsubmit = function ( e ) {
var content ;
if ( tinymce . activeEditor == null ){
content = document . forms . post . elements . content . value ;
} else {
content = ( tinymce . activeEditor . getContent () !== '' ) ? tinymce . activeEditor . getContent () : document . forms . post . elements . content . value ;
}
2025-07-15 23:28:33 +03:00
if ( findTags ( 'span:not(.mce_SELRES_start):not(.mce-preview-object):not(.mce-object-iframe):not(.mce-shim):not(.anchor)' , content ) !== 0
|| findTags ( 'div:not(.mce-offscreen-selection):not(.mce-content-body):not(.mce-toolbar-grp):not(.mce-statusbar):not(.mce-preview-object):not(.mce-reset):not(.mce-temp)' , content ) !== 0
|| ! checkUnslosedTags ( content )){
2025-07-09 21:21:17 +03:00
console . log ( 'Есть спаны или незакрытые теги' );
2025-07-15 23:28:33 +03:00
alert ( 'В тексте обнаружены недопустимые HTML-теги, несовместимые с форматированием текстов «Профиля». Откройте редактор в режиме «Код» и уберите все ненужные <span>, <div> и др., прежде чем сохранить' );
2025-07-09 21:21:17 +03:00
return false ;
} else {
console . log ( 'В с е ок' );
}
}
function findTags ( selector , input ) {
var htmlObject = document . createElement ( 'div' );
htmlObject . innerHTML = input ;
var elems = htmlObject . querySelectorAll ( selector );
console . log ( htmlObject );
console . log ( elems . length + ' - Результат поиска спанов' );
if ( elems . length !== 0 ){
console . log ( elems );
}
return elems . length ;
}
function isSelfClosingTag ( tagName ) {
return tagName . match ( / area | base | br | col | embed | hr | img | input | keygen | link | menuitem | meta | param | source | track | wbr | script / i );
}
function checkUnslosedTags ( input ){
var tags = [];
jQuery . each ( input . split ( '\\n' ), function ( i , line ) {
jQuery . each ( line . match ( /< [ ^> ] * [ ^/ ] >/ g ) || [], function ( j , tag ) {
var matches = tag . match ( /< \ / ? ([ a - z0 - 9 ] + ) / i );
if ( matches ) {
tags . push ({ tag : tag , name : matches [ 1 ], line : i + 1 , closing : tag [ 1 ] == '/' });
}
});
});
if ( tags . length == 0 ) {
console . log ( " Текст чист, неплохо!) " );
return true ;
}
var openTags = [];
var error = false ;
var indent = 0 ;
for ( var i = 0 ; i < tags . length ; i ++ ) {
var tag = tags [ i ];
if ( tag . closing ) {
var closingTag = tag ;
if ( isSelfClosingTag ( closingTag . name )) {
continue ;
}
if ( openTags . length == 0 ) {
console . log ( " Незакрытых тегов нет! Отлично! " );
return true ;
}
var openTag = openTags [ openTags . length - 1 ];
if ( closingTag . name != openTag . name ) {
console . log ( 'Закрывающий тег ' + closingTag . tag + ' в строке ' + closingTag . line + ' не соответствует открывающему ' + openTag . tag + ' в строке ' + openTag . line + '.' );
return false ;
} else {
openTags . pop ();
}
} else {
var openTag = tag ;
if ( isSelfClosingTag ( openTag . name )) {
continue ;
}
openTags . push ( openTag );
}
}
if ( openTags . length > 0 ) {
var openTag = openTags [ openTags . length - 1 ];
console . log ( 'Открывающий тег ' + openTag . tag + ' в строке ' + openTag . line + ' не имеет закрывающего тега.' );
return false ;
}
console . log ( 'Ладно, все окей' );
return true ;
}
</ script >
EOL ;
}
//фикс вывода авторов в фиде
add_filter ( 'the_author' , 'zen_real_author' );
function zen_real_author ( $display_name ){
if ( is_feed ()){
return implode ( " , " , array_map ( function ( $a ){ return $a -> display_name ;}, get_coauthors ()));
}
return $display_name ;
}
//если есть подзаголовок, то в фиде для Дзена выведется он
//условие с id убрать где-нибудь через полгодика
add_filter ( 'the_title_rss' , 'subtitle_as_title_for_zen' );
function subtitle_as_title_for_zen ( $title ) {
if ( has_secondary_title () && is_feed () && get_query_var ( 'feed' ) == 'zen' && in_array ( get_post_type (), array ( 'profile_article' ))){
$title = get_secondary_title ();
}
if ( has_secondary_title () && is_feed () && get_query_var ( 'feed' ) == 'googlenews' ){
//$title = get_secondary_title();
}
return $title ;
}
add_filter ( 'the_title' , 'subtitle_as_title_for_googlenews' , 10 , 2 );
function subtitle_as_title_for_googlenews ( $title , $id ) {
if ( has_secondary_title ( $id ) && is_feed () && get_query_var ( 'feed' ) == 'googlenews' ){
$title = get_secondary_title ( $id );
}
return $title ;
}
//отсюда
add_action ( 'wp_ajax_wpse_139269_inline_edit_radio_checked_hack' , 'wpse_139269_inline_edit_radio_checked_hack' );
add_action ( 'wp_ajax_nopriv_wpse_139269_inline_edit_radio_checked_hack' , 'wpse_139269_inline_edit_radio_checked_hack' );
function wpse_139269_inline_edit_radio_checked_hack () {
$terms = wp_get_object_terms (
$_POST [ 'ajax-post-id' ],
$_POST [ 'ajax-taxonomy' ],
array ( 'fields' => 'ids' )
);
$result = $terms [ 0 ];
echo json_encode ( $result );
exit ;
die ();
}
add_action ( 'admin_enqueue_scripts' , 'wpse_139269_inline_edit_radio_checked_hack_enqueue_script' );
function wpse_139269_inline_edit_radio_checked_hack_enqueue_script () {
wp_enqueue_script (
'editphp-inline-edit-tax-radio-hack-js' ,
get_template_directory_uri () . '/assets/js/admin/editphp-inline-edit-tax-radio-hack.js' ,
array ( 'jquery' )
);
}
add_action ( 'wp_ajax_inline-save' , 'wpse_139269_wp_ajax_inline_save' , 0 );
function wpse_139269_wp_ajax_inline_save () {
global $wp_list_table ;
check_ajax_referer ( 'inlineeditnonce' , '_inline_edit' );
if ( ! isset ( $_POST [ 'post_ID' ]) || ! ( $post_ID = ( int ) $_POST [ 'post_ID' ] ) )
wp_die ();
if ( 'page' == $_POST [ 'post_type' ] ) {
if ( ! current_user_can ( 'edit_page' , $post_ID ) )
wp_die ( __ ( 'You are not allowed to edit this page.' ) );
} else {
if ( ! current_user_can ( 'edit_post' , $post_ID ) )
wp_die ( __ ( 'You are not allowed to edit this post.' ) );
}
if ( $last = wp_check_post_lock ( $post_ID ) ) {
$last_user = get_userdata ( $last );
$last_user_name = $last_user ? $last_user -> display_name : __ ( 'Someone' );
printf ( $_POST [ 'post_type' ] == 'page' ? __ ( 'Saving is disabled: %s is currently editing this page.' ) : __ ( 'Saving is disabled: %s is currently editing this post.' ), esc_html ( $last_user_name ) );
wp_die ();
}
$data = & $_POST ;
$post = get_post ( $post_ID , ARRAY_A );
// Since it's coming from the database.
$post = wp_slash ( $post );
$data [ 'content' ] = $post [ 'post_content' ];
$data [ 'excerpt' ] = $post [ 'post_excerpt' ];
// Rename.
$data [ 'user_ID' ] = get_current_user_id ();
if ( isset ( $data [ 'post_parent' ]) )
$data [ 'parent_id' ] = $data [ 'post_parent' ];
// Status.
if ( isset ( $data [ 'keep_private' ]) && 'private' == $data [ 'keep_private' ] )
$data [ 'post_status' ] = 'private' ;
else
$data [ 'post_status' ] = $data [ '_status' ];
if ( empty ( $data [ 'comment_status' ]) )
$data [ 'comment_status' ] = 'closed' ;
if ( empty ( $data [ 'ping_status' ]) )
$data [ 'ping_status' ] = 'closed' ;
// Exclude terms from taxonomies that are not supposed to appear in Quick Edit.
if ( ! empty ( $data [ 'tax_input' ] ) ) {
foreach ( $data [ 'tax_input' ] as $taxonomy => $terms ) {
$tax_object = get_taxonomy ( $taxonomy );
if ( ! apply_filters ( 'quick_edit_show_taxonomy' , $tax_object -> show_in_quick_edit , $taxonomy , $post [ 'post_type' ] ) ) {
unset ( $data [ 'tax_input' ][ $taxonomy ] );
}
}
}
// Hack: wp_unique_post_slug() doesn't work for drafts, so we will fake that our post is published.
if ( ! empty ( $data [ 'post_name' ] ) && in_array ( $post [ 'post_status' ], array ( 'draft' , 'pending' ) ) ) {
$post [ 'post_status' ] = 'publish' ;
$data [ 'post_name' ] = wp_unique_post_slug ( $data [ 'post_name' ], $post [ 'ID' ], $post [ 'post_status' ], $post [ 'post_type' ], $post [ 'post_parent' ] );
}
// Update the post.
edit_post ();
$wp_list_table = _get_list_table ( 'WP_Posts_List_Table' , array ( 'screen' => $_POST [ 'screen' ] ) );
$level = 0 ;
$request_post = array ( get_post ( $_POST [ 'post_ID' ] ) );
$parent = $request_post [ 0 ] -> post_parent ;
while ( $parent > 0 ) {
$parent_post = get_post ( $parent );
$parent = $parent_post -> post_parent ;
$level ++ ;
}
$wp_list_table -> display_rows ( array ( get_post ( $_POST [ 'post_ID' ] ) ), $level );
if ( $_POST [ 'post_type' ] == 'profile_article' || $_POST [ 'post_type' ] == 'anew' || $_POST [ 'post_type' ] == 'yellow' ) {
?>
< script >
document . location . reload ( true );
</ script >
< ? php
}
wp_die ();
}
//досюда - радио для квик едит - позже перекинуть это в плагин
//не показывать картинку в статье
add_action ( 'save_post' , 'saveHideThumbnailField' );
add_filter ( 'admin_post_thumbnail_html' , 'filter_admin_post_thumbnail_html' , 10 , 3 );
function saveHideThumbnailField ( $post_id ) {
if ( defined ( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return ; }
if ( ! isset ( $_POST [ 'hide_thumbnail_' ]) || ! wp_verify_nonce ( $_POST [ 'hide_thumbnail_' ], 'hide_thumbnail_' . $post_id )) {
return ;
}
if ( ! current_user_can ( 'edit_post' , $post_id )) {
return ;
}
if ( isset ( $_POST [ '_hide_thumbnail_countdown' ])) {
update_post_meta ( $post_id , '_hide_thumbnail_countdown' , $_POST [ '_hide_thumbnail_countdown' ]);
} else {
delete_post_meta ( $post_id , '_hide_thumbnail_countdown' );
}
}
function filter_admin_post_thumbnail_html ( $content , $post_id , $thumbnail_id ) {
$value = get_post_meta ( $post_id , '_hide_thumbnail_countdown' , true );
ob_start ();
wp_nonce_field ( 'hide_thumbnail_' . $post_id , 'hide_thumbnail_' );
$content .= ob_get_clean ();
$content .= '<div class="misc-pub-section misc-pub-section-last">' ;
$content .= '<span style="display:inline-block;padding:8px 8px 4px 0px;">Скрыть через</span>' ;
$content .= '<select name="_hide_thumbnail_countdown">' ;
$content .= '<option selected="selected" value="-1">–</option>' ;
for ( $i = 0 ; $i <= 10 ; $i ++ ){
$content .= '<option ' . selected ( $i , $value , false ) . ' value="' . $i . '">' . $i . '</option>' ;
}
$content .= '</select>' ;
$content .= '<span style="display:inline-block;padding:8px 0px 4px 8px;"> дней</span>' ;
$content .= '</div>' ;
return $content ;
}
/* function show_thumbnail (){
$days = (( get_post_meta ( get_the_ID (), '_hide_thumbnail_countdown' ))[ 0 ]);
if ( $days == NULL ){
return true ;
}
$days = ( int ) $days ;
if (((( date ( " U " ) - get_the_date ( " U " )) > 86400 * $days && $days >= 0 ) && count ( get_post_meta ( get_the_ID (), '_hide_thumbnail_countdown' )) !== 0 ) || $days == 0 ){
return false ;
}
return true ;
} */
//проверка наличия роли у пользователя
function user_has_role ( $user_id , $role ){
$user = get_user_by ( " id " , $user_id );
if ( ! is_object ( $user )){
return false ;
}
foreach ( $user -> roles as $r ){
if ( $r === $role ){
return true ;
}
return false ;
}
}
function hide_publishing_actions (){
global $post ;
$authors = array_map ( function ( $el ){ return $el -> ID ;}, get_coauthors ());
if (
is_object ( $post ) &&
(
( $post -> post_type == 'profile_article' || $post -> post_type == 'anew' || $post -> post_type == 'yellow' )
&&
( ! current_user_can ( 'administrator' ))
&&
( get_current_user_id () != $post -> post_author )
&&
( ! in_array ( get_current_user_id (), $authors ))
&&
( ! user_has_role ( get_current_user_id (), 'managing_editor' ))
&&
( ! user_has_role ( get_current_user_id (), 'chief_editor' ))
&&
( ! user_has_role ( get_current_user_id (), 'newsline_editor' ))
&&
( ! user_has_role ( get_current_user_id (), 'senior_editor' ))
&&
( ! user_has_role ( get_current_user_id (), 'corrector' ))
) || user_has_role ( get_current_user_id (), 'editor' )
){
echo '
< style type = " text/css " >
input [ name = " publish " ] {
display : none ! important ;
}
</ style >
' ;
}
}
add_action ( 'admin_head' , 'hide_publishing_actions' );
/* if ( ! function_exists ( 'display_php_error_for_admin' )) {
function display_php_error_for_admin ()
{
if ( get_current_user_id () == 1 ){
error_reporting ( E_ALL );
@ ini_set ( 'display_errors' , 1 );
} else {
error_reporting ( 0 );
@ ini_set ( 'display_errors' , 0 );
}
}
}
add_action ( 'init' , 'display_php_error_for_admin' ); */
add_filter ( 'amp_post_template_data' , function ( $data ) {
$data [ 'amp_component_scripts' ] = array_merge (
$data [ 'amp_component_scripts' ],
array (
'amp-auto-ads' => 'https://cdn.ampproject.org/v0/amp-auto-ads-0.1.js' ,
)
);
return $data ;
} );
function print_component () {
echo '<amp-auto-ads type="adsense" data-ad-client="ca-pub-6584996181587704"></amp-auto-ads>' ;
}
add_action (
'wp_footer' ,
function () {
if ( function_exists ( 'is_amp_endpoint' ) && is_amp_endpoint () ) {
print_component ();
}
}
);
function print_amp_counters (){
get_template_part ( 'counters' , 'amp' );
}
add_action (
'amp_post_template_footer' ,
function () {
if ( function_exists ( 'is_amp_endpoint' ) && is_amp_endpoint () ) {
print_amp_counters ();
}
}
);
function print_amp_css () {
get_template_part ( 'styles' , 'amp' );
}
add_action (
'amp_post_template_css' ,
function () {
if ( function_exists ( 'is_amp_endpoint' ) && is_amp_endpoint () ) {
print_amp_css ();
}
}
);
add_filter (
'amp_post_template_data' ,
function ( $data ) {
$data [ 'amp_component_scripts' ] = array_merge (
$data [ 'amp_component_scripts' ],
array (
'amp-auto-ads' => true ,
)
);
return $data ;
}
);
add_action ( 'amp_post_template_footer' , 'print_component' );
####внимание, костыль, который я поправлю потом####
if (
get_current_user_id () != 1
&&
get_current_user_id () != 2
&&
get_current_user_id () != 3
&&
get_current_user_id () != 58
){
add_action ( 'admin_head' , 'gurren_dan_menuitems' );
}
function gurren_dan_menuitems () {
echo '
< style >
. toplevel_page_wsal - auditlog , . toplevel_page_wsal - auditlog + li ,
#toplevel_page_email-log, #toplevel_page_email-log+li,
#menu-posts-archive, #wp-admin-bar-delete-cache, #wp-admin-bar-alm-cache,
#toplevel_page_ajax-load-more, #menu-settings, #toplevel_page_pp-calendar,
#toplevel_page_email-log, #wp-admin-bar-autoptimize
{ display : none ! important ;}
</ style > ' ;
}
add_action ( 'admin_print_footer_scripts' , 'remove_save_button' );
function remove_save_button () {
?>
< script >
jQuery ( document ) . ready ( function ( $ ) {
setInterval ( function (){
if ( $ ( " input#publish[name='save'] " ) . val () != 'Отправить на рассмотрение' ) {
$ ( " input#publish[name='save'] " ) . val ( 'Обновить и выйти' ) . prev () . val ( 'Обновить и выйти' );
}
if ( $ ( " input#publish[name='publish'] " ) . val () != 'Отправить на рассмотрение' ) {
$ ( " input#publish[name='publish'] " ) . val ( 'Опубликовать и выйти' ) . prev () . val ( 'Опубликовать и выйти' );
}
}, 1000 );
$ ( " #major-publishing-actions " ) . append ( '<div style="float:right;padding:10px 0px 0px 0px;"><input type="button" class="preview button" value="Выйти" onclick="if(confirm(\'Изменения не сохранены. Уверен, что хочешь выйти?\')){window.location.href=\'/wp-admin/edit.php?post_type=<?php echo get_post_type(); ?>\'}" /></div><div class="clear"></div>' );
$ ( '.submitdelete.deletion' ) . html ( 'Удалить' );
});
</ script >< ? php
}
add_filter ( 'redirect_post_location' , 'redirect_after_update' );
function redirect_after_update ( $location ) {
$user = wp_get_current_user ();
if (
( ! array_intersect ( $user -> roles , array ( 'administrator' , 'editor_in_chief' )) || in_array ( get_current_user_id (), array ( 58 ))) &&
( isset ( $_POST [ 'save' ] ) || isset ( $_POST [ 'publish' ] )) && ( get_post_status ( get_the_ID ()) == " publish " || get_post_status ( get_the_ID ()) == " future " )
&&
! in_array ( get_current_user_id (), array ( 57 ))
&&
get_post_type ( get_post ( get_the_ID ())) != 'guest-author'
){
$location = " /?post_type= " . get_post_type ( get_post ( get_the_ID ())) . " &p= " . get_the_ID () . " &preview=true " ;
//debug(get_current_user_id().": ".$location);
return $location ;
}
return $location ;
}
function empty_excerpt_more ( $more ) {
return '' ;
}
add_filter ( 'excerpt_more' , 'empty_excerpt_more' );
add_action ( 'wp_print_styles' , 'tj_deregister_yarpp_header_styles' );
function tj_deregister_yarpp_header_styles () {
wp_dequeue_style ( 'yarppWidgetCss' );
wp_deregister_style ( 'yarppRelatedCss' );
}
add_action ( 'wp_footer' , 'tj_deregister_yarpp_footer_styles' );
function tj_deregister_yarpp_footer_styles () {
wp_dequeue_style ( 'yarppRelatedCss' );
}
add_action ( 'admin_head' , 'clear_interface' , 10 );
function get_current_user_role_roles () {
$user_meta = get_userdata ( get_current_user_id ());
$roles = $user_meta -> roles ;
return $roles ;
}
function clear_interface () {
$roles = get_current_user_role_roles ();
$remove = array ();
$hide = array ();
if ( in_array ( 'editor' , $roles )){
$remove = array (
" amp-options " ,
" tools.php " ,
" profile.php "
);
$hide = array (
" #visibility-radio-password " ,
" #visibility-radio-password+label " ,
" #visibility-radio-password+label+br " ,
" #visibility-radio-private " ,
" #visibility-radio-private+label " ,
" #visibility-radio-private+label+br " ,
" .misc-pub-section.misc-amp-status "
);
}
foreach ( $remove as $item ){
remove_menu_page ( $item );
}
echo " <style> " . implode ( " , " , $hide ) . " { display:none!important;}</style> " ;
}
add_action ( 'admin_print_footer_scripts' , 'add_title_char_counter' );
function add_title_char_counter (){
$screen = get_current_screen ();
if ( in_array ( $screen -> id , array ( 'edit-yellow' , 'edit-profile_article' , 'edit-anew' ))) { return ; }
$script = <<< EOL
< script >
jQuery . fn . countChars = function () {
let cc = jQuery ( this ) . val () . length ;
let limit = [ 60 , 70 ];
let stop = [ " Google уже не поймет " , " Теперь не поймет и Яндекс " ];
let container = jQuery ( this ) . siblings ( " .charcount. " + jQuery ( this ) . attr ( 'id' ));
container . find ( 'span' ) . eq ( 0 ) . html ( cc );
if ( cc > limit [ 1 ]) {
container . fadeIn ();
container . removeClass ( 'danger' ) . addClass ( 'warning' ) . find ( 'span' ) . eq ( 1 ) . html ( stop [ 1 ]);
} else if ( cc > limit [ 0 ]) {
container . fadeIn ();
container . addClass ( 'danger' ) . removeClass ( 'warning' ) . find ( 'span' ) . eq ( 1 ) . html ( stop [ 0 ]);
} else {
container . removeClass ( 'danger' ) . removeClass ( 'warning' ) . find ( 'span' ) . eq ( 1 ) . html ();
container . fadeOut ();
}
jQuery ( container ) . css ({
" top " : jQuery ( this ) . position () . top + " px "
});
}
jQuery ( document ) . ready ( function (){
setTimeout ( function (){
jQuery ( 'input#title' ) . each ( function (){
jQuery ( this ) . before ( '<div class="clear clearfix"></div><div class="charcount ' + jQuery ( this ) . attr ( 'id' ) + '"><span>' + jQuery ( this ) . val () . length + '</span><span></span></div><div class="clear clearfix"></div>' );
jQuery ( this ) . countChars ();
});
}, 2000 );
jQuery ( '#poststuff' ) . on ( 'blur click paste keyup keydown keypress focusin focusout focus' , '#title' , function ( e ){
jQuery ( this ) . countChars ( e );
});
});
</ script >
< style >
#secondary-title-input{
margin : 0 px ;
}
#title {
margin - bottom : 8 px ! important ;
}
. charcount {
display : none ;
color : #222;
width : auto ;
float : right ;
margin : 0 px ;
padding : 0 px ;
}
. charcount . warning {
background : #bd2130;
color : #fff;
}
. charcount . danger {
background : #ffc107;
}
. charcount span {
display : inline - block ;
}
. charcount span {
font - size : 14 px ;
padding : 1 px 4 px 2 px 4 px ;
}
#wp-link #link-options .link-nofollow {
display : none ;
}
</ style >
EOL ;
if ( in_array ( get_post_type (), array ( 'anew' , 'yellow' ))){
$script .= " <script>jQuery('#secondary-title-input').attr('maxlength','230');</script> " ;
}
echo $script ;
}
/* if ( in_array ( get_current_user_id (), array ( 1 , 37 )) ){
echo '<pre>' ;
var_dump ( get_current_user_role_roles ());
echo '</pre>' ;
} */
//метаполя в статье
add_action ( 'post_submitbox_misc_actions' , 'create_custom_fields_submitbox' );
add_action ( 'save_post' , 'save_custom_fields' );
$fields = array (
array ( //Скрывает пост с главной
" type " => " checkbox " ,
" pt " => array ( " anew " , " profile_article " ),
" metabox " => " submitbox " ,
" id " => " _hide_on_mainpage " ,
" meta_key " => false ,
" label " => " Н е показывать на главной" ,
" value " => " 1 " ,
" echo " => true ,
" roles " => false
),
array ( //Скрывает пост с главной
" type " => " checkbox " ,
" pt " => array ( " anew " , " profile_article " ),
" metabox " => " submitbox " ,
" id " => " _hide_on_website " ,
" meta_key " => false ,
" label " => " Н е показывать на сайте" ,
" value " => " 1 " ,
" echo " => true ,
" roles " => false
),
array ( //Доступ только по ссылке, отправка в Р С С
" type " => " checkbox " ,
" pt " => array ( " anew " , " profile_article " , " yellow " ),
" metabox " => " submitbox " ,
" id " => " _only_link_access " ,
" meta_key " => false ,
" label " => " Доступно только по ссылке " ,
" value " => " 1 " ,
" echo " => true ,
" roles " => false
),
/* array ( //Исключить из Р С С для Я.Н . и Г.Н .
" type " => " checkbox " ,
" pt " => array ( " anew " , " profile_article " , " yellow " ),
" metabox " => " submitbox " ,
" id " => " layf_exclude_from_feed " ,
" meta_key " => false ,
" label " => " Исключить из новостных фидов " ,
" value " => " 1 " ,
" echo " => true ,
" roles " => false
), */
array ( //Исключить из Р С С для Я.Н .
" type " => " checkbox " ,
" pt " => array ( " anew " , " profile_article " , " yellow " ),
" metabox " => " submitbox " ,
" id " => " ynrss_exclude " ,
" meta_key " => false ,
" label " => " Исключить из ЯН " ,
" value " => " 1 " ,
" echo " => true ,
" roles " => false
),
array ( //Исключить из Р С С для Г.Н .
" type " => " checkbox " ,
" pt " => array ( " anew " , " profile_article " , " yellow " ),
" metabox " => " submitbox " ,
" id " => " gnrss_exclude " ,
" meta_key " => false ,
" label " => " Исключить из GN " ,
" value " => " 1 " ,
" echo " => true ,
" roles " => false
),
array ( //Исключить из Р С С для Я.Дзен
" type " => " checkbox " ,
" pt " => array ( " anew " , " profile_article " , " yellow " ),
" metabox " => " submitbox " ,
" id " => " yzrssenabled_meta_value " ,
" meta_key " => false ,
" label " => " Исключить из Я.Дзен " ,
" value " => array (
0 => " no " ,
1 => " yes "
),
" echo " => true ,
" roles " => false
),
array ( //Тематика Я.Дзен
" type " => " checkbox " ,
" pt " => array ( " anew " , " profile_article " ),
" metabox " => " submitbox " ,
" id " => " yzcategory_meta_value " ,
" meta_key " => false ,
" label " => " " ,
" value " => NULL ,
" echo " => false ,
" roles " => false
),
array ( //Событие
" type " => " checkbox " ,
" pt " => array ( " anew " , " yellow " ),
" metabox " => " submitbox " ,
" id " => " event " ,
" meta_key " => false ,
" label " => " Событие " ,
" value " => " 1 " ,
" echo " => true ,
" roles " => array (
" administrator " ,
" editor_in_chief " ,
" corrector " ,
" newsline_editor " ,
" senior_editor " ,
" chief_editor " ,
" editor "
)
),
array (
" type " => " date " ,
" pt " => array ( " anew " , " yellow " ),
" metabox " => " submitbox " ,
" id " => " event_date " ,
" meta_key " => false ,
" label " => " Дата " ,
" echo " => function ( $post_id ){
return ( get_post_meta ( $post_id , 'event' , true ) == '1' ) ? true : false ;
},
" roles " => array (
" administrator " ,
" editor_in_chief " ,
" corrector " ,
" chief_editor " ,
" senior_editor " ,
" newsline_editor "
)
),
array (
" type " => " checkbox " ,
" pt " => array ( " guest-author " ),
" metabox " => " author_settings " ,
" id " => " show_data " ,
" meta_key " => false ,
" label " => " Показывать подробности " ,
" value " => " 1 " ,
" echo " => true ,
" roles " => array (
" administrator " ,
" editor_in_chief " ,
" chief_editor " ,
" managing_editor "
)
),
array (
" type " => " checkbox " ,
" pt " => array ( " guest-author " ),
" metabox " => " author_settings " ,
" id " => " show_only_articles " ,
" meta_key " => false ,
" label " => " Показывать только статьи " ,
" value " => " 1 " ,
" echo " => true ,
" roles " => array (
" administrator " ,
" editor_in_chief " ,
" chief_editor " ,
" managing_editor "
)
),
array (
" type " => " select " ,
" pt " => array ( " profile_article " ),
" metabox " => " columnist_category " ,
" id " => " mt_category " ,
" meta_key " => false ,
" label " => " " ,
" value " => array (
" IT " => " IT " ,
" Авто-мото " => " Авто-мото " ,
" Бизнес и финансы " => " Бизнес и финансы " ,
" В мире животных" => " В мире животных" ,
" Военное дело " => " Военное дело " ,
" Дети и семья " => " Дети и семья " ,
" Дом/Дача " => " Дом/Дача " ,
" Игры " => " Игры " ,
" История " => " История " ,
" Кино " => " Кино " ,
" Кулинария " => " Кулинария " ,
" Культура и искусство " => " Культура и искусство " ,
" Медицина и здоровье " => " Медицина и здоровье " ,
" Мода и красота " => " Мода и красота " ,
" Наука и технологии " => " Наука и технологии " ,
" Общество " => " Общество " ,
" Охота и рыбалка " => " Охота и рыбалка " ,
" Политика " => " Политика " ,
" Работа и карьера " => " Работа и карьера " ,
" Реклама " => " Реклама " ,
" Религия " => " Религия " ,
" Спорт " => " Спорт " ,
" Строительство и недвижимость " => " Строительство и недвижимость " ,
" Туризм " => " Туризм " ,
" Фото " => " Фото " ,
" Шоу-бизнес " => " Шоу-бизнес " ,
" Юмор и развлечения " => " Юмор и развлечения "
),
" echo " => true ,
" roles " => array (
" administrator " ,
" editor_in_chief " ,
" chief_editor " ,
" corrector " ,
" senior_editor " ,
" newsline_editor " ,
" editor "
)
),
array ( //Молния
" type " => " checkbox " ,
" pt " => array ( " anew " , " yellow " ),
" metabox " => " submitbox " ,
" id " => " _breaking " ,
" meta_key " => false ,
" label " => " Молния " ,
" value " => " 1 " ,
" echo " => true ,
" roles " => array (
" administrator " ,
" editor_in_chief " ,
" chief_editor " ,
" senior_editor " ,
" newsline_editor "
)
),
array ( //Телега
" type " => " checkbox " ,
" pt " => array ( " anew " , " profile_article " , " yellow " ),
" metabox " => " submitbox " ,
" id " => " _send_telegram " ,
" meta_key " => false ,
" label " => " Отправить в канал " ,
" after " => function (){
return ( get_post_meta ( get_the_ID (), '_sended_telegram' , true )) ? " (отправлено) " : " " ;
},
" value " => " 1 " ,
" echo " => true ,
" roles " => array (
" corrector " ,
" editor_in_chief " ,
" administrator " ,
" chief_editor " ,
" senior_editor " ,
" newsline_editor "
)
),
array ( //Телега отправлено
" type " => " checkbox " ,
" pt " => array ( " anew " , " profile_article " ),
" metabox " => " submitbox " ,
" id " => " _sended_telegram " ,
" meta_key " => false ,
" label " => " Отправлено в канал " ,
" value " => " 1 " ,
" echo " => false ,
" roles " => array (
" editor_in_chief " ,
" chief_editor " ,
" administrator " ,
" senior_editor " ,
" newsline_editor "
)
),
);
function check_user_meta_access ( $field ){
$allow = false ;
$user = wp_get_current_user ();
if ( ! is_array ( $field [ " roles " ])){
return true ;
}
if ( array_intersect ( $field [ " roles " ], $user -> roles ) || $field [ " roles " ] === false ) {
$allow = true ;
}
if ( array_key_exists ( " users " , $field )) {
if ( in_array ( $user -> ID , $field [ " users " ][ " allow " ])) {
$allow = true ;
}
if ( in_array ( $user -> ID , $field [ " users " ][ " deny " ])) {
$allow = false ;
}
}
return $allow ;
}
function create_custom_fields_submitbox () { //создаем кастомные чекбоксы
global $fields ;
$post_id = get_the_ID ();
$post_type = get_post_type ();
foreach ( $fields as $field ) {
//hr(check_user_meta_access($field));
if ( in_array ( $post_type , $field [ " pt " ]) && $field [ 'metabox' ] == 'submitbox' ){
create_custom_field ( $field );
}
}
}
function create_custom_fields ( $post , $params ) { //создаем кастомные чекбоксы
global $fields ;
$post_id = get_the_ID ();
$post_type = get_post_type ();
foreach ( $fields as $field ) {
//hr(check_user_meta_access($field));
if ( in_array ( $post_type , $field [ " pt " ]) && $field [ 'metabox' ] == $params [ 'id' ]){
create_custom_field ( $field );
}
}
}
function create_custom_field ( $field ) { //создаем кастомный чекбокс
global $fields ;
$post_id = get_the_ID ();
$gpm = get_post_meta ( $post_id , $field [ 'id' ], true );
foreach ( $fields as $f ){
if ( $f [ " id " ] !== $field [ " id " ]) { continue ; }
$value = ( is_array ( $f [ " value " ])) ? array_search ( $gpm , $f [ " value " ]) : $gpm ;
}
$write = ( is_callable ( $field [ 'echo' ])) ? $field [ 'echo' ]( $post_id ) : $field [ 'echo' ];
wp_nonce_field ( 'nonce_' . $field [ 'id' ] . '_' . $post_id , 'nonce_' . $field [ 'id' ]);
if ( $write ) :
$display = check_user_meta_access ( $field ) ? " d-block " : " d-none " ;
?>
< div class = " misc-pub-section misc-pub-section-last <?php echo $display ; ?> " >
< label >
< ? php _e ( custom_field_html ( $field )) ?>
< ? php ( is_callable ( $field [ 'after' ])) ? _e ( $field [ 'after' ]()) : _e ( $field [ 'after' ]); ?>
</ label >
</ div >
< ? php
endif ;
}
function custom_field_html ( $field ){
global $fields ;
$html = '' ;
$post_id = get_the_ID ();
$gpm = get_post_meta ( $post_id , $field [ 'id' ], true );
foreach ( $fields as $f ){
if ( $f [ " id " ] !== $field [ " id " ]) { continue ; }
$value = ( is_array ( $f [ " value " ])) ? array_search ( $gpm , $f [ " value " ]) : $gpm ;
}
switch ( $field [ 'type' ]) {
case ( " checkbox " ) :
//' . checked($value, true, false) . '
$html = '
< input
type = " checkbox "
value = " '. $field['value'] .' "
2025-08-27 00:00:02 +03:00
name = " ' . $field['id'] . ' "
' . checked((bool)$value, true, false) . '
2025-07-09 21:21:17 +03:00
/>
' . _e($field[' label ' ]);
break ;
case ( " checkbox_option " ) :
$html = '
< input
type = " checkbox "
value = " '. $field['value'] .' "
name = " ' . $field['id'] . ' "
' . ((get_option($field[' id ']) == get_the_ID()) ? "checked" : "") . '
/>
' . _e($field[' label ' ]);
break ;
case ( 'date' ) :
$html = '
< input
type = " date "
value = " '. $value .' "
name = " ' . $field['id'] . ' "
/>
' . _e($field[' label ' ]);
break ;
case ( 'select' ) :
$html = '<select name="' . $field [ 'id' ] . '" id="' . $field [ 'id' ] . '">' ;
foreach ( $field [ 'value' ] as $key => $val ){
$html .= '<option value="' . $key . '" ' . (( $key == $value ) ? 'selected' : '' ) . '>' . $val . '</option>' ;
}
$html .= '</select>' ;
break ;
case ( 'text' ) :
$txt_val = is_closure ( $field [ 'value' ]) ? $field [ 'value' ]() : $field [ 'value' ];
$html = _e ( $field [ 'label' ]) . '<input name="' . $field [ 'id' ] . '" id="' . $field [ 'id' ] . '" value="' . $txt_val . '" >' ;
//$html = '';
break ;
default :
$html = '' ;
}
return $html ;
}
function is_closure ( $t ) {
return $t instanceof \Closure ;
}
function save_custom_fields () { //сохраняем кастомные чекбоксы
if ( defined ( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return ; }
global $fields ;
$post_id = get_the_ID ();
foreach ( $fields as $field ) {
save_custom_field ( $post_id , $field );
}
}
function save_custom_field ( $post_id , $field ) { //сохраняем кастомный чекбокс
global $fields ;
$value = $_POST [ $field [ 'id' ]];
if ( is_callable ( $field [ " onsave " ])){
if ( ! $field [ " onsave " ]()){
return ;
}
}
if ( defined ( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return ; }
if ( ! isset ( $_POST [ 'nonce_' . $field [ 'id' ]]) || ! wp_verify_nonce ( $_POST [ 'nonce_' . $field [ 'id' ]], 'nonce_' . $field [ 'id' ] . '_' . $post_id )) { return ; }
if ( ! current_user_can ( 'edit_post' , $post_id )) { return ; }
if ( isset ( $_POST [ $field [ 'id' ]])) {
foreach ( $fields as $f ) {
if ( $f [ " id " ] !== $field [ " id " ]) { continue ; }
$value = is_array ( $f [ " value " ]) ? ( isset ( $_POST [ $field [ 'id' ]])) ? $f [ " value " ][ 1 ] : $f [ " value " ][ 0 ] : $_POST [ $field [ " id " ]];
$field [ 'id' ] = ( $f [ 'meta_key' ]) ? $f [ 'meta_key' ] : $field [ 'id' ];
$value = $f [ 'type' ] == 'select' ? $_POST [ $field [ 'id' ]] : $value ;
}
update_post_meta ( $post_id , $field [ 'id' ], $value );
} else {
if ( $field [ 'echo' ] === true ){
delete_post_meta ( $post_id , $field [ 'id' ]);
}
}
}
add_action ( 'add_meta_boxes' , 'remove_post_custom_fields' , 99 );
function remove_post_custom_fields () { //убираем ненужные мета
$context = array ( 'normal' , 'advanced' , 'side' );
$screen = array ( 'anew' , 'profile_article' , 'yellow' );
$id = array (
'layf_related_links' ,
'yzen_meta_box'
);
foreach ( $context as $c ){
foreach ( $screen as $s ){
foreach ( $id as $i ){
remove_meta_box ( $i , $s , $c );
}
}
}
}
add_action ( 'add_meta_boxes' , 'yzen_meta_boxx' );
function yzen_meta_boxx (){ //Добавляем свой метабокс для тематик дзена взамен стандартного
add_meta_box ( 'yzen_category' , 'Тематика Яндекс.Дзен' , 'yzen_categories' , array ( 'profile_article' , 'anew' , 'yellow' ), 'normal' , 'high' );
}
function yzen_categories (){ //создаем селект в своем метабоксе дзена
$meta_name = 'yzcategory_meta_value' ;
$categories = array ( " Происшествия " , " Политика " , " Война " , " Общество " , " Экономика " , " Спорт " , " Технологии " , " Наука " , " Игры " , " Музыка " , " Литература " , " Кино " , " Культура " , " Мода " , " Знаменитости " , " Психология " , " Здоровье " , " Авто " , " Дом " , " Хобби " , " Еда " , " Дизайн " , " Фотографии " , " Юмор " , " Природа " , " Путешествия " );
$meta_value = get_post_meta ( get_the_ID (), $meta_name , true );
$html = '<select name="' . $meta_name . '">' ;
foreach ( $categories as $cat ){
$selected = ( $meta_value == $cat ) ? 'selected="selected"' : '' ;
$html .= '<option value="' . $cat . '" ' . $selected . ' >' . $cat . '</option>' ;
}
$html .= '</select>' ;
$html .= wp_nonce_field ( 'nonce_yzcategory_meta_value_' . get_the_ID (), 'nonce_yzcategory_meta_value' );
echo $html ;
}
//добавляем свои колонки в таблицу-список статей
add_filter ( 'manage_yellow_posts_columns' , 'add_custom_columns' );
add_filter ( 'manage_anew_posts_columns' , 'add_custom_columns' );
add_filter ( 'manage_profile_article_posts_columns' , 'add_custom_columns' );
function add_custom_columns ( $columns ){
$arr = array ( 'thumb' => 'Фото' );
return $columns + $arr ;
}
//добавляем в таблицу содержимое для ячеек кастомных колонок
add_action ( 'manage_yellow_posts_custom_column' , 'add_custom_columns_column' );
add_action ( 'manage_anew_posts_custom_column' , 'add_custom_columns_column' );
add_action ( 'manage_profile_article_posts_custom_column' , 'add_custom_columns_column' );
function add_custom_columns_column ( $column_name ) {
if ( $column_name === 'thumb' ) {
if ( has_post_thumbnail ()) {
?>
< a class = " wpseo-score-icon good " target = " _blank " href = " <?php echo get_the_post_thumbnail_url(); ?> " ></ a >
< ? php
} else {
?>
< div class = " wpseo-score-icon na " ></ div >
< ? php
}
}
}
//удаляем скрипты медиаплеера
add_action ( 'wp_enqueue_scripts' , 'remove_mediaplayer_scripts' );
function remove_mediaplayer_scripts () {
wp_deregister_script ( 'jquery' );
wp_deregister_script ( 'jquery-core' );
wp_deregister_script ( 'jquery-migrate' );
wp_deregister_script ( 'mediaelement' );
wp_deregister_script ( 'mediaelement-core' );
wp_deregister_script ( 'mediaelement-migrate' );
}
//удаляем параметр высоты видео фрейма, пусть подстраивается сам
add_filter ( 'wp_video_shortcode' , 'rewrite_video_shortcode' , 10 , 5 );
function rewrite_video_shortcode ( $output , $atts , $video , $post_id , $library ) {
$output = preg_replace ( '/(<[^>]+) height=".*?"/i' , '$1' , $output );
$output = preg_replace ( '/(<[^>]+) width=".*?"/i' , '$1' , $output );
$output = preg_replace ( '/(<[^>]+) style=".*?"/i' , '$1' , $output );
return $output ;
}
//упорядочиваем загрузку новостей при бесконечном скролле
// убираем ссылку на ленту комментариев для каждого поста
function pr_disable_feed () {
wp_redirect ( get_option ( 'siteurl' ));
}
add_action ( 'do_feed' , 'pr_disable_feed' , 1 );
add_action ( 'do_feed_rdf' , 'pr_disable_feed' , 1 );
add_action ( 'do_feed_rss' , 'pr_disable_feed' , 1 );
add_action ( 'do_feed_rss2' , 'pr_disable_feed' , 1 );
add_action ( 'do_feed_atom' , 'pr_disable_feed' , 1 );
remove_action ( 'wp_head' , 'feed_links_extra' , 3 );
remove_action ( 'wp_head' , 'feed_links' , 2 );
remove_action ( 'wp_head' , 'rsd_link' );
2025-08-27 00:00:02 +03:00
//делаем opengraph для постов без фото
add_action ( 'wp_head' , function () {
if ( ! is_singular ()) return ;
$post_id = get_the_ID ();
$default_image = 'https://cdn.profile.ru/wp-content/uploads/2023/07/profile_lazyload_hq.jpg' ; // Заглушка в папке темы
$og_image = esc_url ( $default_image );
if ( ! has_post_thumbnail ( $post_id ) or ! show_thumbnail ( $post_id )) {
echo '<meta property="og:image" content="' . $og_image . '" />' . " \n " ;
echo '<meta property="og:image:width" content="1200" />' . " \n " ;
echo '<meta property="og:image:height" content="630" />' . " \n " ;
echo '<meta name="twitter:image" content="' . $og_image . '" />' ;
//} else {
// $og_image = get_the_post_thumbnail_url($post_id, 'large');
}
});
2025-07-09 21:21:17 +03:00
//Добавили к ссылкам nofollow
add_action ( 'after_wp_tiny_mce' , function (){
?>
< script >
var originalWpLink ;
if ( typeof tinymce !== 'undefined' && typeof _ !== 'undefined' && typeof wpLink !== 'undefined' ) {
if ( tinymce . $ ( '#link-options' ) . length ) {
tinymce . $ ( '#link-options' ) . append ( < ? php echo json_encode ( '<div class="link-redirect"><label><span></span><input type="checkbox" id="wp-link-redirect" /> Редирект с задержкой</label></div>' ); ?> );
originalWpLink = _ . clone ( wpLink );
wpLink . addRedirect = tinymce . $ ( '#wp-link-redirect' );
wpLink = _ . extend ( wpLink , {
getAttrs : function () {
var attrs = originalWpLink . getAttrs ();
attrs . redirect = wpLink . addRedirect . prop ( 'checked' ) ? 'true' : false ;
return attrs ;
},
buildHtml : function ( attrs ) {
var html = '<a href="' + attrs . href + '"' ;
if ( attrs . target ) {
html += ' target="' + attrs . target + '"' ;
}
if ( attrs . redirect ) {
html += ' redirect="' + attrs . redirect + '"' ;
}
return html + '>' ;
},
mceRefresh : function ( searchStr , text ) {
originalWpLink . mceRefresh ( searchStr , text );
var editor = window . tinymce . get ( window . wpActiveEditor )
if ( typeof editor !== 'undefined' && ! editor . isHidden () ) {
var linkNode = editor . dom . getParent ( editor . selection . getNode (), 'a[href]' );
if ( linkNode ) {
wpLink . addRedirect . prop ( 'checked' , 'true' === editor . dom . getAttrib ( linkNode , 'redirect' ) );
}
}
}
});
}
}
</ script >
< style >
#wp-link #link-options .link-nofollow {
padding : 3 px 0 0 ;
white - space : nowrap ;
overflow : hidden ;
text - overflow : ellipsis ;
}
#wp-link #link-options .link-nofollow label span {
width : 83 px ;
}
. has - text - field #wp-link .query-results {
top : 223 px ;
}
</ style >
< ? php
});
add_filter ( 'the_title' , 'archive_title_filter' , 10 , 2 );
function archive_title_filter ( $title , $id ) {
$title = ( get_post_type ( $id ) == 'archive' ) ? " Архивная публикация " . get_the_date ( " Y " , $id ) . " года: \" " . $title . " \" " : $title ;
return $title ;
}
remove_filter ( 'the_title' , 'wptexturize' );
add_filter ( 'the_title' , 'remove_dashes_from_title' , 100 , 2 );
function remove_dashes_from_title ( $title , $id ){
$title = str_replace ( array ( ' - ' , ' — ' ), ' – ' , $title );
$title = str_replace ( array ( '—' ), '– ' , $title );
return $title ;
}
add_filter ( 'the_title' , 'remove_nbsp' , 100 , 2 );
add_filter ( 'the_secondary_title' , 'remove_nbsp' , 100 , 2 );
add_filter ( 'get_secondary_title' , 'remove_nbsp' , 100 , 2 );
function remove_nbsp ( $title , $id ){
$string = htmlentities ( $title , null , 'utf-8' );
$title = str_replace ( " " , " " , $string );
$title = html_entity_decode ( $title );
return $title ;
}
foreach ( [ 'post' , 'page' , 'yellow' , 'post_type' ] as $type ) {
add_filter ( $type . '_link' , function ( $url , $post_id , $sample ) use ( $type )
{
return apply_filters ( 'wpse_link' , $url , $post_id , $sample , $type );
}, 9999 , 3 );
}
add_filter ( 'wpse_link' , function ( $url , $post_id , $sample , $type )
{
$url = str_replace ( '/gregator/' , '/news/' , $url );
return $url ;
}, 10 , 4 );
//Получаем темплейт без вывода
//Ссылки на желтуху в фиде
function filter_wpseo_xml_sitemap_post_url ( $get_permalink , $post ) {
$get_permalink = ( get_post_type ( $post ) == 'yellow' ) ? str_replace ( '/gregator/' , '/news/' , $get_permalink ) : $get_permalink ;
return $get_permalink ;
}
add_filter ( 'wpseo_xml_sitemap_post_url' , 'filter_wpseo_xml_sitemap_post_url' , 10 , 2 );
//Редиректы на правильные ссылки желтухи
add_action ( 'template_redirect' , 'agregator_to_news_redirect' );
function agregator_to_news_redirect () {
if ( is_single () && get_post_type ( get_the_ID ()) == 'yellow' && strripos ( filter_input ( INPUT_SERVER , 'REQUEST_URI' , FILTER_SANITIZE_STRING ), 'gregator/' ) !== false && ! ( is_user_logged_in ())) {
wp_redirect ( str_replace ( 'gregator/' , 'news/' , filter_input ( INPUT_SERVER , 'REQUEST_URI' , FILTER_SANITIZE_STRING )), 301 );
exit ;
}
}
//Запрет показа баннера в брендированных рубриках
function deny_branding (){
$ids = array ();
return false ;
foreach ( get_the_category () as $crnt_cat ) {
array_push ( $ids , $crnt_cat -> term_id );
array_push ( $ids , $crnt_cat -> category_parent );
}
if ( is_home ()){
return true ;
}
if ( in_array ( 91781 , $ids )){
return true ;
}
foreach ( $ids as $id ){
if ( get_term_meta ( $id , 'type' , 1 ) == " branding " ){
return false ;
}
}
return true ;
}
//Удалил лишние колонки из таблицы WP
/* add_filter ( 'manage_yellow_posts_columns' , 'remove_columns_for_user' , 10 );
add_filter ( 'manage_anew_posts_columns' , 'remove_columns_for_user' , 10 );
add_filter ( 'manage_profile_article_posts_columns' , 'remove_columns_for_user' , 10 );
add_filter ( 'manage_edit-yellow_columns' , 'remove_columns_for_user' , 10 );
add_filter ( 'manage_edit-anew_columns' , 'remove_columns_for_user' , 10 );
add_filter ( 'manage_edit-profile_article_columns' , 'remove_columns_for_user' , 10 ); */
function remove_columns_for_user ( $columns ) {
/* if ( ! in_array ( get_current_user_id (), array ( 57 , 37 ))) {
return $columns ;
}
$unset = array ( " secondary_title " , " cb " , " coauthors " , " tags " , " comments " , " thumb " , " wpseo-score " , " wpseo-score-readability " , " wpseo-title " , " wpseo-metadesc " , " wpseo-focuskw " , " wpseo-links " , " wpseo-linked " );
foreach ( $unset as $key ) {
//unset($columns[$key]);
} */
return $columns ;
}
add_action ( 'admin_head' , 'admin_head_styles' );
function admin_head_styles (){
?>
< style >
. d - block {
display : block ;
}
. d - none {
display : none ;
}
</ style >
< ? php
return ;
}
add_action ( 'wp_enqueue_scripts' , function () {
// Подключаем CSS-файл
wp_enqueue_style (
'app-paginator' , // Уникальный идентификатор
get_theme_file_uri ( '/assets/css/app-paginator.css' ), // Путь относительно темы
[], // Зависимости (например, ['bootstrap'])
'1.0.1' , // Версия по дате изменения
'all' // Медиа-тип
);
});
add_action ( 'after_setup_theme' , 'my_theme_add_editor_styles' );
function my_theme_add_editor_styles () {
add_theme_support ( 'editor-style' );
add_editor_style ( 'assets/css/admin/editor-styles.css' );
}
add_filter ( 'oembed_request_post_id' , 'post_id_for_oembed' , 10 , 2 );
function post_id_for_oembed ( $post_id , $url ) {
if ( parse_url ( $url )[ 'host' ] == 'profile.ru' ){
$url = str_replace ( " / " , " " , $url );
$post_id = array_pop ( explode ( " - " , $url ));
$post_id = ( int ) $post_id ;
} else {
$post_id = false ;
}
return $post_id ;
}
function get_current_page_category () {
$cat = get_the_category ();
$id = ( $cat [ 0 ] -> parent == 0 ) ? $cat [ 0 ] -> cat_ID : $cat [ 0 ] -> parent ;
return $id ;
}
//Добавление дополнительных интервалов в крон
add_filter ( 'cron_schedules' , 'my_cron_schedules' );
function my_cron_schedules ( $schedules ){
if ( ! isset ( $schedules [ " 5min " ])){
$schedules [ " 5min " ] = array (
'interval' => 5 * 60 ,
'display' => __ ( 'Once every 5 minutes' ));
}
if ( ! isset ( $schedules [ " 2min " ])){
$schedules [ " 2min " ] = array (
'interval' => 2 * 60 ,
'display' => __ ( 'Once every 2 minutes' ));
}
if ( ! isset ( $schedules [ " 30min " ])){
$schedules [ " 30min " ] = array (
'interval' => 30 * 60 ,
'display' => __ ( 'Once every 30 minutes' ));
}
if ( ! isset ( $schedules [ " 1min " ])){
$schedules [ " 1min " ] = array (
'interval' => 1 * 60 ,
'display' => __ ( 'Once every 1 minute' ));
}
if ( ! isset ( $schedules [ " 10sec " ])){
$schedules [ " 10sec " ] = array (
'interval' => 10 ,
'display' => __ ( 'Once every 10 seconds' ));
}
if ( ! isset ( $schedules [ " 1week " ])){
$schedules [ " 1week " ] = array (
'interval' => 60 * 60 * 24 * 7 ,
'display' => __ ( 'Once every 1 week' ));
}
return $schedules ;
}
//Проверка, выбрана ли рубрика в quick-edit
add_action ( 'admin_footer' , 'quick_edit_category_required' );
function quick_edit_category_required (){
$script = <<< JS
< script >
( function ( $ ){
$ ( '.save' , $ ( '#inline-edit' )) . click ( function ( e ){
console . log ( e );
if ( ! checkFields ( this , $ )){
e . preventDefault ();
e . stopPropagation ();
e . stopImmediatePropagation ();
alert ( 'Сначала выберите рубрику!' );
}
})
})( jQuery );
function checkFields ( el , $ ) {
var elems = $ ( el ) . parents ( 'tr' ) . find ( 'input[name="post_category[]"]:checked, input[name="radio_tax_input[category][]"]:checked' );
return ( elems . length == 0 ) ? false : true ;
}
</ script >
JS ;
$screen = get_current_screen ();
if ( $screen -> base == 'edit' ){
echo $script ;
}
}
//если создаем новую желтую, надо сразу е е помечать как желтую
add_action ( 'admin_footer' , 'mark_new_yellow' );
function mark_new_yellow (){
$screen = get_current_screen ();
if ( is_edit_page ( 'new' ) && $screen -> id == 'yellow' ){
echo <<< JS
< script >
( function ( $ ){
$ ( 'input[name="_yellow"]' ) . prop ( 'checked' , true );
})( jQuery );
</ script >
JS ;
}
}
//Фильтр для отсеивания материалов, доступных только по ссылке
add_filter ( 'posts_where' , 'only_link_access_request_filter' , 99 , 1 );
function only_link_access_request_filter ( $where ){
if ( ! is_single () && ! is_admin () || filter_input ( INPUT_GET , 'action' ) == 'alm_get_posts' ){
$where .= " AND `ID` NOT IN (SELECT `post_id` FROM `wp_postmeta` WHERE `meta_key` = '_only_link_access' and `meta_value` = '1') " ;
//$where .= " AND '".esc_sql($_SERVER['REQUEST_URI'])."' = '".esc_sql($_SERVER['REQUEST_URI'])."' ";
}
return $where ;
}
//Фильтр для отсеивания материалов дзен
add_filter ( 'posts_where' , 'only_link_access_request_filter' , 99 , 1 );
function dzen_request_filter ( $where ){
if ( str_contains ( $_SERVER [ " REQUEST_URI " ], " feed/zen " )){
$where .= " AND `ID` NOT IN (SELECT `post_id` FROM `wp_postmeta` WHERE `meta_key` = 'yzrssenabled_meta_value' and `meta_value` = 'yes') " ;
}
return $where ;
}
add_filter ( 'posts_where' , 'dzen_request_filter' , 99 , 1 );
add_filter ( 'posts_where' , 'hide_on_website_request_filter' , 99 , 1 );
function hide_on_website_request_filter ( $where ){
if (( is_admin () || is_feed () || is_single () || is_yn ()) && filter_input ( INPUT_GET , 'action' ) != 'alm_get_posts' ){
return $where ;
} else {
$where .= " AND `ID` NOT IN (SELECT `post_id` FROM `wp_postmeta` WHERE `meta_key` = '_hide_on_website' and `meta_value` = '1') " ;
}
return $where ;
}
//Фильтр для добавления тега милитари в рубрику милитари
add_filter ( 'posts_where' , 'military_posts_appending' );
function military_posts_appending ( $where ){
if (( filter_input ( INPUT_GET , 'slug' ) == 'military' || get_queried_object_id () == 8529 ) && ! is_feed ()){
$where .= " OR `ID` IN (SELECT `object_id` FROM `wp_term_relationships` WHERE `term_taxonomy_id` = 103464) " ;
}
return $where ;
}
add_filter ( 'posts_where' , 'persona_posts_appending' );
function persona_posts_appending ( $where ){
if (( filter_input ( INPUT_GET , 'slug' ) == 'persona' || get_queried_object_id () == 105049 ) && ! is_feed ()){
$where .= " OR `ID` IN (SELECT `object_id` FROM `wp_term_relationships` WHERE `term_taxonomy_id` = 105047) " ;
}
return $where ;
}
//Фильтр для добавления импортозамещение милитари в рубрику "знай наших"
add_filter ( 'posts_where' , 'import_posts_appending' );
function import_posts_appending ( $where ){
if (( filter_input ( INPUT_GET , 'slug' ) == 'znaj-nashih' || get_queried_object_id () == 104807 ) && ! is_feed () && ! is_admin ()){
//$where .= " OR (`ID` IN (SELECT `object_id` FROM `wp_term_relationships` WHERE `term_taxonomy_id` = 17548) AND `post_status` = 'publish' AND `ID` NOT IN (SELECT `post_id` FROM `wp_postmeta` WHERE `meta_key` = '_hide_on_website' and `meta_value` = '1') ) ";
$where .= " AND ID != 1067204 OR (`post_status` = 'publish' AND `ID` IN (SELECT `object_id` FROM `wp_term_relationships` WHERE `term_taxonomy_id` = 17548 AND `object_id` NOT IN (SELECT `post_id` FROM `wp_postmeta` WHERE `meta_key` = '_hide_on_website' and `meta_value` = '1') ) ) " ;
}
return $where ;
}
//Фильтр для отсеивания на главной публикаций с чеком "Н е показывать на главной"
add_action ( 'posts_where' , 'mainpage_request_filter' );
function mainpage_request_filter ( $where ){
if ( is_home () || filter_input ( INPUT_GET , 'id' ) == 'home_page' ){
$where .= " AND `ID` NOT IN (SELECT `post_id` FROM `wp_postmeta` WHERE `meta_key` = '_hide_on_mainpage' and `meta_value` = '1') " ;
}
return $where ;
}
add_action ( 'posts_where' , function ( $where ){
if ( filter_input ( INPUT_GET , 'id' ) == 'mainpage_request' ){
$where .= " AND `ID` NOT IN ( " . implode ( " , " , json_decode ( get_option ( 'mainpage_ids' ))) . " ) " ;
}
return $where ;
}, 999 , 1 );
//Фильтр для отсеивания в рекомендациях публикаций с чеком "Н е показывать в рекомендуемом"
add_filter ( 'posts_where' , 'related_request_filter' , 10 , 2 );
function related_request_filter ( $where , $wp_query ) {
global $wpdb ;
if ( ! mb_strrpos ( $wpdb -> last_query , 'yarpp' )){ return $where ; }
$where .= " AND `ID` NOT IN (SELECT `post_id` FROM `wp_postmeta` WHERE `meta_key` = '_hide_from_related' AND `meta_value` = '1') AND `post_type` " ;
return $where ;
}
//Фильтр для отсеивания из фида Дзена публикаций с чеком "Н е отправлять в Дзен"
add_filter ( 'posts_where' , 'zen_feed_request_filter' , 10 , 2 );
function zen_feed_request_filter ( $where , $query ){
//$yzen_options = get_option('yzen_options');
//if (array_values(array_filter(explode('/', esc_sql($_SERVER['REQUEST_URI']))))[1] == $yzen_options['yzrssname'] && $query->query['posts_per_page'] == $yzen_options['yznumber']){
if ( is_zen () && is_feed ()){
$where = " AND `wp_posts`.`ID` NOT IN (SELECT `post_id` FROM `wp_postmeta` where `meta_key` = 'yzrssenabled_meta_value' AND `meta_value` = 'yes' ) " ;
$where .= " AND `ID` IN (SELECT `post_id` FROM `wp_postmeta` WHERE `meta_key` = '_thumbnail_id') " ;
$where .= " AND `post_type` IN ('anew','profile_article','yellow') " ;
$where .= " AND ( ( wp_posts.post_status = 'publish' ) ) " ;
}
return $where ;
}
//Фильтр для фида избранных материалов
add_filter ( 'posts_where' , 'featured_feed_request_filter' , 10 , 2 );
function featured_feed_request_filter ( $where , $query ){
if ( array_key_exists ( 'feed' , $query -> query )){
if ( $query -> query [ 'feed' ] == get_option ( 'ff_options' , false )[ 'url' ]){
$where .= " AND `ID` IN (SELECT `post_id` FROM `wp_postmeta` WHERE `meta_key` = 'featured_teaser') " ;
}
}
return $where ;
}
add_filter ( 'wpseo_canonical' , 'prefix_filter_canonical_example' );
function prefix_filter_canonical_example ( $canonical ) {
if (
strpos ( filter_input ( INPUT_SERVER , 'REQUEST_URI' ), '/events/' ) === false
||
strlen ( str_replace ( 'events' , '' , preg_replace ( '/[0-9\-\/]/' , '' , filter_input ( INPUT_SERVER , 'REQUEST_URI' )))) !== 0
) {
return $canonical ;
} else {
$canonical = 'https://profile.ru/events/' ;
}
return $canonical ;
}
function filter_by_the_author () {
$params = array (
'name' => 'author' , // this is the "name" attribute for filter <select>
'show_option_all' => 'В с е авторы' // label for all authors (display posts without filter)
);
if ( isset ( $_GET [ 'user' ]) )
$params [ 'selected' ] = $_GET [ 'user' ]; // choose selected user by $_GET variable
wp_dropdown_users ( $params ); // print the ready author list
}
add_action ( 'restrict_manage_posts' , 'filter_by_the_author' );
//add_filter( 'posts_where', 'hide_cars_from_feed', 10, 1 );
function hide_cars_from_feed ( $where ) {
if ( is_feed () || is_yn ()){
$where .= " AND `wp_posts`.`ID` NOT IN (SELECT `object_id` FROM `wp_term_relationships` WHERE `term_taxonomy_id` = 3386 AND `object_id` <= 194172 ) " ;
}
return $where ;
}
add_filter ( 'posts_where' , 'ynrss_exclude' , 10 , 1 );
function ynrss_exclude ( $where ){
if ( is_yn ()){
$where .= " AND `wp_posts`.`ID` NOT IN (SELECT `post_id` FROM `wp_postmeta` WHERE `meta_key` = 'ynrss_exclude' AND `meta_value` = 1) " ;
}
return $where ;
}
add_filter ( 'posts_where' , 'gnrss_exclude' , 10 , 1 );
function gnrss_exclude ( $where ){
$options = get_option ( 'gnf_options' );
$array = explode ( " / " , $_SERVER [ 'REQUEST_URI' ]);
if (( is_feed () && $options [ 'url' ] == array_pop ( $array )) || stripos ( $_SERVER [ 'REQUEST_URI' ], '/feed/gn' ) !== false ){
$where .= " AND `wp_posts`.`ID` NOT IN (SELECT `post_id` FROM `wp_postmeta` WHERE `meta_key` = 'gnrss_exclude' AND `meta_value` = 1) " ;
}
return $where ;
}
//Когда будешь делать нормальный фильтр по авторам, убери нахуй этот ебаный костыль
add_filter ( 'posts_where' , 'legolas_where' );
function legolas_where ( $where ){
if ( ! in_array ( get_current_user_id (), array ( 1 , 58 ))){ return $where ;}
if ( filter_input ( INPUT_GET , 'guest_author' ) == " profile " && is_admin ()){
$where .= ' AND ID in (SELECT object_id FROM wp_term_relationships where term_taxonomy_id in (7511, 3520)) ' ;
}
return $where ;
}
function legolas_add_taxonomy_filters () {
if ( ! in_array ( get_current_user_id (), array ( 1 , 58 ))){ return ;}
echo '<input type="button" value="Автор: Профиль" class="button" onclick="window.location.replace(document.URL+\'&guest_author=profile\')" />' ;
}
add_action ( 'restrict_manage_posts' , 'legolas_add_taxonomy_filters' );
function datesort_add_default_filter (){
echo '<input type="hidden" name="orderby" value="date" />' ;
echo '<input type="hidden" name="order" value="desc" />' ;
}
add_action ( 'restrict_manage_posts' , 'datesort_add_default_filter' );
//Кобзев не загружает картинки больше 500К Б (хотя и это слишком много)
add_filter ( 'upload_size_limit' , 'upload_size_lim' , 10 , 3 );
function upload_size_lim ( $size , $u_bytes , $p_bytes ){
if ( in_array ( get_current_user_id (), array ( 17 ))){
$size = 512000 ;
}
return $size ;
}
//Ресайз фреймов с врезами
add_filter ( 'the_content' , 'responsive_embeds' );
function responsive_embeds ( $content ) {
$content = str_replace ( 'sandbox="allow-scripts"' , 'sandbox="allow-same-origin allow-top-navigation allow-scripts"' , $content );
return $content ;
}
//Отключили сжатие картинок
add_filter ( 'jpeg_quality' , function ( $quality ){
return 100 ;
});
//Настройки автора!
function author_settings_meta_box () {
$screens = array ( 'guest-author' );
foreach ( $screens as $screen ) {
add_meta_box (
'author_settings' ,
__ ( 'Настройки' , 'author_settings' ),
'create_custom_fields' ,
$screen
);
}
}
add_action ( 'add_meta_boxes' , 'author_settings_meta_box' );
add_filter ( 'layf_content_feed' , 'remove_blockquotes' );
function remove_blockquotes ( $content ){
$content = preg_replace ( '~<blockquote(.*?)</blockquote>~Usi' , " " , $content );
return $content ;
}
add_filter ( 'the_content' , 'remove_blockquotes_from_feed' );
function remove_blockquotes_from_feed ( $content ){
if ( is_feed ()) {
$content = preg_replace ( '~<blockquote(.*?)</blockquote>~Usi' , " " , $content );
$content = preg_replace ( '~<p><iframe class(.*?)</iframe></p>~Usi' , " " , $content );
}
return $content ;
}
add_filter ( 'mce_external_plugins' , 'quot_add_buttons' );
add_filter ( 'mce_buttons' , 'quot_register_buttons' );
function quot_add_buttons ( $plugin_array ) {
$plugin_array [ 'add_quotes' ] = get_stylesheet_directory_uri () . '/assets/js/vendor/tinymce/tinymce_quotebutton.js' ;
return $plugin_array ;
}
function quot_register_buttons ( $buttons ) {
array_push ( $buttons , 'open_quote' );
array_push ( $buttons , 'close_quote' );
return $buttons ;
}
function is_turbo (){
if ( strripos ( filter_input ( INPUT_SERVER , 'REQUEST_URI' ), get_option ( 'mytf_options' )[ 'url' ]) !== false ){
return true ;
}
return false ;
}
add_filter ( 'the_content' , 'clear_dom' , 100000 );
function clear_dom ( $content ){
$content = str_replace (
array (
'<html><head><meta http-equiv="Content-Type" content="charset=utf-8">' ,
'</head><body>' ,
'</body></html>'
),
'' ,
$content
);
return $content ;
}
//TODO: Перенести в темплейты
add_filter ( 'the_content' , 'ad_inread_archive' , 20 );
function ad_inread_archive ( $content ) {
if (( int ) get_option ( 'show_ad' ) == 1 ) {
if ( get_post_type () == 'archive' ) {
$ps = explode ( " \n " , $content );
$ps [ 2 ] .= "
<!-- montemedia -->
<!-- Площадка : profile . ru / desktop / 785 x desktop -->
<!-- Категория : < не задана >-->
<!-- Тип баннера : Перетяжка 100 %-->
< div id = \ " adfox_163361840755876626 \" ></div>
< script >
window . yaContextCb . push (() => {
Ya . adfoxCode . create ({
ownerId : 242477 ,
containerId : 'adfox_163361840755876626' ,
params : {
p1 : 'cjhzz' ,
p2 : 'y'
}
})
})
</ script >
" ;
$content = implode ( " <p> " , $ps );
}
}
return $content ;
}
add_action ( 'wp_insert_post' , 'send_telegram' , 10 , 1 );
function send_telegram ( $post ) {
$post = get_post ( $post );
$post_id = $post -> ID ;
if (
( ! in_array ( get_post_type ( $post_id ), array ( 'anew' , 'yellow' , 'profile_article' ))) || (( bool )( get_post_meta ( $post_id , '_sended_telegram' , true ))) || ( get_post_status ( $post_id ) !== 'publish' )){
return ;
}
$bot_id = " 1108783670:AAGm7_vdXQAte25OGUa5gWJNXhy5-v6d_hU " ;
$post_id = ( is_object ( $post_id )) ? $post_id -> ID : $post_id ;
2025-08-27 00:00:02 +03:00
// Получаем и проверяем ссылку
$curr_url = get_permalink ( $post_id );
if ( empty ( $curr_url )) {
error_log ( 'Telegram bot: Empty permalink for post ID ' . $post_id );
return ;
}
$curr_url = fix_broken_url ( $curr_url , 'profile.ru' ); //корректируем ссылку с ошиюбками
2025-07-09 21:21:17 +03:00
if ( has_tag ( 103565 , $post_id )){
$chat_id = " -1001241573514 " ; //идентификатор канала profile_lifestyle
2025-08-27 00:00:02 +03:00
$text = '<a href="' . $curr_url . '?utm_from=telegram">' . get_the_title ( $post_id ) . '</a>' ;
2025-07-09 21:21:17 +03:00
$text = str_replace ( 'admin.' , '' , $text );
$request = " https://api.telegram.org/bot " . $bot_id . " /sendMessage?chat_id= " . $chat_id . " &parse_mode=HTML&text= " . urlencode ( $text );
update_post_meta ( $post_id , '_sended_telegram' , '1' );
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_URL , $request );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
$result = curl_exec ( $ch );
2025-08-27 00:00:02 +03:00
2025-07-09 21:21:17 +03:00
} else {
if (
((( bool ) filter_input ( INPUT_POST , '_send_telegram' ))
||
(( bool ) get_post_meta ( $post_id , '_send_telegram' , true )))
){
$chat_id = " -1001365682276 " ; //идентификатор канала profile_news
2025-08-27 00:00:02 +03:00
$text = '<a href="' . $curr_url . '?utm_from=telegram">' . get_the_title ( $post_id ) . '</a>' ;
2025-07-09 21:21:17 +03:00
$text = str_replace ( 'admin.' , '' , $text );
$request = " https://api.telegram.org/bot " . $bot_id . " /sendMessage?chat_id= " . $chat_id . " &parse_mode=HTML&text= " . urlencode ( $text );
update_post_meta ( $post_id , '_sended_telegram' , '1' );
update_option ( 'last_telegram_message' , date ( " U " ));
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_URL , $request );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
$result = curl_exec ( $ch );
}
}
return true ;
}
add_filter ( 'pre_get_posts' , 'hide_posts_from_editor' , 10 , 1 );
function hide_posts_from_editor ( $query ){
if ( is_admin () && in_array ( get_current_user_id (), array ( 57 ) ) ){
$notinArray = array ();
foreach (( array ) json_decode ( get_option ( 'ppp_options' )) as $item ){
if ( $item -> count > 100 ){
array_push ( $notinArray , $item -> id );
}
}
$query -> set ( 'post__not_in' , $notinArray );
}
return $query ;
}
//другу
add_action ( 'wp_login' , 'auth_fn' , 10 , 2 );
function auth_fn ( $user_login , $user ){
if ( in_array ( $user -> data -> ID , array ( 17 )) && ! wp_is_mobile ()){
$meta = ( int ) get_user_meta ( $user -> data -> ID , 'has_cookie' , true );
update_post_meta ( $user -> data -> ID , 'has_cookie' , ( $meta + 1 ));
}
}
function profile_custom_fields ( $item_id , $item ) {
wp_nonce_field ( 'menu_item_color_nonce' , '_menu_item_color_nonce_name' );
$menu_item_color = get_post_meta ( $item_id , '_menu_item_color' , true );
$colors = array (
" black " => " Черный " ,
" yellow " => " Желтый " ,
" blue " => " Синий " ,
" green " => " Зеленый " ,
" red " => " Красный " ,
" orange " => " Оранжевый " ,
" gray " => " Серый " ,
" indigo " => " Индиго " ,
" purple " => " Пурпурный " ,
" pink " => " Розовый " ,
" teal " => " Биюзовый " ,
" cyan " => " Циан " ,
" white " => " Белый " ,
" gray-dark " => " Темно-серый " ,
" light " => " Магнолия " ,
" dark " => " Космос "
);
?>
< input type = " hidden " name = " custom-menu-meta-nonce " value = " <?php echo wp_create_nonce( 'custom-menu-meta-name' ); ?> " />
< div class = " field-menu_item_color description-wide " style = " margin: 5px 0; " >
< span class = " description " >< ? php _e ( " Цвет пункта меню " , 'custom-menu-meta' ); ?> </span>
< br />
< input type = " hidden " class = " nav-menu-id " value = " <?php echo $item_id ;?> " />
< div class = " logged-input-holder " >
< select name = " menu_item_color[<?php echo $item_id ;?>] " id = " custom-menu-meta-for-<?php echo $item_id ;?> " value = " <?php echo esc_attr( $menu_item_color ); ?> " >
< ? php
foreach ( $colors as $value => $text ){
$selected = $menu_item_color == $value ? " selected " : " " ;
echo '<option value="' . $value . '"' . $selected . '>' . $text . '</option>' ;
}
?>
</ select >
</ div >
</ div >
< ? php
}
add_action ( 'wp_nav_menu_item_custom_fields' , 'profile_custom_fields' , 10 , 2 );
function profile_nav_update ( $menu_id , $menu_item_db_id ) {
// Verify this came from our screen and with proper authorization.
if ( ! isset ( $_POST [ '_menu_item_color_nonce_name' ] ) || ! wp_verify_nonce ( $_POST [ '_menu_item_color_nonce_name' ], 'menu_item_color_nonce' ) ) {
return $menu_id ;
}
if ( isset ( $_POST [ 'menu_item_color' ][ $menu_item_db_id ] ) ) {
$sanitized_data = sanitize_text_field ( $_POST [ 'menu_item_color' ][ $menu_item_db_id ] );
update_post_meta ( $menu_item_db_id , '_menu_item_color' , $sanitized_data );
} else {
delete_post_meta ( $menu_item_db_id , '_menu_item_color' );
}
}
add_action ( 'wp_update_nav_menu_item' , 'profile_nav_update' , 10 , 2 );
function profile_custom_menu_title ( $title , $item ) {
if ( is_object ( $item ) && isset ( $item -> ID ) ) {
$menu_item_color = get_post_meta ( $item -> ID , '_menu_item_color' , true );
if ( ! empty ( $menu_item_color ) ) {
$title .= ' - ' . $menu_item_color ;
}
}
return $title ;
}
add_filter ( 'nav_menu_item_title' , 'profile_custom_menu_title' , 10 , 2 );
function hex2rgba ( $color , $opacity = false ) {
$default = 'rgb(0,0,0)' ;
//Return default if no color provided
if ( empty ( $color ))
return $default ;
//Sanitize $color if "#" is provided
if ( $color [ 0 ] == '#' ) {
$color = substr ( $color , 1 );
}
//Check if color has 6 or 3 characters and get values
if ( strlen ( $color ) == 6 ) {
$hex = array ( $color [ 0 ] . $color [ 1 ], $color [ 2 ] . $color [ 3 ], $color [ 4 ] . $color [ 5 ] );
} elseif ( strlen ( $color ) == 3 ) {
$hex = array ( $color [ 0 ] . $color [ 0 ], $color [ 1 ] . $color [ 1 ], $color [ 2 ] . $color [ 2 ] );
} else {
return $default ;
}
//Convert hexadec to rgb
$rgb = array_map ( 'hexdec' , $hex );
//Check if opacity is set(rgba or rgb)
if ( $opacity !== false ){
if ( abs ( $opacity ) > 1 )
$opacity = 1.0 ;
$output = 'rgba(' . implode ( " , " , $rgb ) . ',' . $opacity . ')' ;
} else {
$output = 'rgb(' . implode ( " , " , $rgb ) . ')' ;
}
//Return rgb(a) color string
return $output ;
}
function ml_upload_image (){
if ( ! current_user_can ( 'edit_posts' ) ) return ;
$mime = ! empty ( $_POST [ 'imgMime' ] ) ? $_POST [ 'imgMime' ] : null ;
if ( 'null' === $mime ) $mime = null ;
$name = ! empty ( $_POST [ 'imgName' ] ) ? $_POST [ 'imgName' ] : null ;
if ( 'null' === $name ) $name = null ;
$parentId = isset ( $_POST [ 'imgParent' ] ) ? intval ( $_POST [ 'imgParent' ]) : 0 ;
$ref = isset ( $_POST [ 'imgRef' ] ) ? $_POST [ 'imgRef' ] : false ;
if ( empty ( $mime ) ) {
if ( ! empty ( $_POST [ 'file' ] ) && preg_match ( '/image\/[a-z0-9]+/' , $_POST [ 'file' ], $matches ) ) {
$mime = $matches [ 0 ];
} else {
factory_325_json_error ( 'Unable to get mime type of the file.' );
}
}
// gets extension
$parts = explode ( '/' , $mime );
$ext = empty ( $parts [ 1 ] ) ? 'png' : $parts [ 1 ];
if ( ! in_array ( $ext , array ( 'png' , 'jpeg' , 'jpg' , 'gif' , 'tiff' , 'bmp' ) ) ) {
factory_325_json_error ( 'Sorry, only following types of images allowed to paste: png, jpeg, jpg, gif, tiff, bmp' );
}
// check the path to upload
$uploadInfo = wp_upload_dir ();
$targetPath = $uploadInfo [ 'path' ];
if ( ! is_dir ( $targetPath ) ) mkdir ( $targetPath , 0777 , true );
// move the uploaded file to the upload path
$imageName = ( ! empty ( $name ) && $name !== 'undefined' )
? factory_325_filename_without_ext ( $name )
: 'img_' . uniqid ();
$target = $targetPath . '/' . $imageName . '.' . $ext ;
if ( isset ( $_FILES [ 'file' ] ) ) {
if ( empty ( $_FILES [ 'file' ][ 'size' ] ) ) {
factory_325_json_error ( '[A] Sorry, the error of reading image data occured. May be the image is empty or has incorrect format.' );
}
$source = $_FILES [ 'file' ][ 'tmp_name' ];
$image = imagecreatefrompng ( $source );
imagejpeg ( $image , $target , 75 );
imagedestroy ( $image );
//move_uploaded_file($source, $target);
} else {
if ( preg_match ( '/base64,(.*)/' , $_POST [ 'file' ], $matches ) ) {
$img = str_replace ( ' ' , '+' , $matches [ 1 ]);
$data = base64_decode ( $img );
if ( empty ( $data ) ) {
factory_325_json_error ( '[B] Sorry, the error of reading image data occured. May be the image is empty or has incorrect format.' );
}
if ( ! is_dir ( $targetPath ) ) {
factory_325_json_error ( " Unable to save the image. Unable to create the folder ' $targetPath '. " );
}
if ( ! is_writable ( $targetPath ) ) {
factory_325_json_error ( " Unable to save the image. The folder ' $targetPath ' is not writable. " );
}
if ( is_file ( $target ) ) {
factory_325_json_error ( " Unable to save the image. The file ' $target ' already exists. " );
}
$success = file_put_contents ( $target , $data );
if ( ! $success ) {
if ( is_file ( $target ) ) {
$filesize = filesize ( $target );
if ( $filesize == 0 ) {
factory_325_json_error ( 'Unable to save the image. The file is not writable' );
} else {
// looks everything is fine O_o
}
} else {
factory_325_json_error ( 'Unable to save the image.' );
}
}
} else {
factory_325_json_error ( 'Incorrect file format (base64).' );
}
}
$media = array ();
$media [ 'base' ] = array (
'guid' => $uploadInfo [ 'url' ] . '/' . $imageName . '.' . $ext ,
'path' => $target ,
'name' => $imageName
);
$resizingEnabled = false ;
$compressionEnabled = false ;
// for the function wp_generate_attachment_metadata() to work
require_once ( ABSPATH . 'wp-admin/includes/image.php' );
foreach ( $media as $key => $item ) {
$attachment = array (
'guid' => $item [ 'guid' ],
'post_mime_type' => $mime ,
'post_title' => $item [ 'name' ],
'post_name' => $item [ 'name' ],
'post_content' => '' ,
'post_status' => 'inherit' ,
);
$media [ $key ][ 'id' ] = wp_insert_attachment ( $attachment , $item [ 'path' ], $parentId );
$attach_data = wp_generate_attachment_metadata ( $media [ $key ][ 'id' ], $item [ 'path' ] );
wp_update_attachment_metadata ( $media [ $key ][ 'id' ], $attach_data );
}
$id = $media [ 'base' ][ 'id' ];
$cssClasses = ' ' . trim ( get_option ( 'imgevr_css_class' , '' ) );
if ( ! empty ( $id ) ) {
$html = " <img loading='lazy' alt='' class='alignnone size-full wp-image- " . $id . $cssClasses . " ' src=' " . $media [ 'base' ][ 'guid' ] . " ' /> " ;
} else {
$html = " <img loading='lazy' alt='' class='alignnone size-full " . $cssClasses . " ' src=' " . $media [ 'base' ][ 'guid' ] . " ' /> " ;
}
$linksEnabled = get_option ( 'imgevr_links_enable' , false );
if ( $linksEnabled ) {
$saveOriginal = get_option ( 'imgevr_resizing_save_original' , false );
if ( $resizingEnabled && $saveOriginal ) {
$html = " <a href=' " . $media [ 'original' ][ 'guid' ] . " '> " . $html . '</a>' ;
} else {
$html = " <a href=' " . $media [ 'base' ][ 'guid' ] . " '> " . $html . '</a>' ;
}
}
$result = array (
'html' => $html
);
echo json_encode ( $result );
exit ;
}
add_action ( 'wp_ajax_ml_insert_upload' , 'ml_upload_image' , 1 );
function my_prepare_attachment_for_js ( $response , $attachment , $meta ) {
//debug($_POST);
$sizes = array ();
$post = filter_input_array ( INPUT_POST );
$get = filter_input_array ( INPUT_GET );
$server = filter_input_array ( INPUT_SERVER );
$screen = get_current_screen ();
foreach ( $meta [ 'sizes' ] as $key => $size ){
$sizes [ str_replace ( '-' , '_' , $key )] = $size ;
}
$response [ 'all_sizes' ] = $sizes ;
$response [ 'apply_filter' ] = ( strripos ( explode ( '?' , filter_input ( INPUT_SERVER , 'HTTP_REFERER' ))[ 0 ], 'upload.php' ) !== false || ( $post [ 'action' ] == 'query-attachments' && $post [ 'post_id' ] > 0 && $post [ 'query' ][ 'post_mime_type' ] == 'image' )) ? true : false ;
//return false;
//debug($array);
return $response ;
};
// add the action
add_filter ( 'wp_prepare_attachment_for_js' , 'my_prepare_attachment_for_js' , 11 , 3 );
function custom_print_media_templates () {
remove_action ( 'admin_footer' , 'wp_print_media_templates' );
remove_action ( 'wp_footer' , 'wp_print_media_templates' );
remove_action ( 'customize_controls_print_footer_scripts' , 'wp_print_media_templates' );
add_action ( 'admin_footer' , 'my_print_media_templates' );
add_action ( 'wp_footer' , 'my_print_media_templates' );
add_action ( 'customize_controls_print_footer_scripts' , 'my_print_media_templates' );
}
add_action ( 'wp_enqueue_media' , 'custom_print_media_templates' );
function my_print_media_templates () {
global $is_IE ;
$class = 'media-modal wp-core-ui' ;
if ( $is_IE && strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], 'MSIE 7' ) !== false ) {
$class .= ' ie7' ;
}
$alt_text_description = sprintf (
/* translators: 1: Link to tutorial, 2: Additional link attributes, 3: Accessibility text. */
__ ( '<a href="%1$s" %2$s>Describe the purpose of the image%3$s</a>. Leave empty if the image is purely decorative.' ),
esc_url ( 'https://www.w3.org/WAI/tutorials/images/decision-tree' ),
'target="_blank" rel="noopener noreferrer"' ,
sprintf (
'<span class="screen-reader-text"> %s</span>' ,
/* translators: Accessibility text. */
__ ( '(opens in a new tab)' )
)
);
?>
< ? php // Template for the media frame: used both in the media grid and in the media modal. ?>
< script type = " text/html " id = " tmpl-media-frame " >
< div class = " media-frame-title " id = " media-frame-title " ></ div >
< h2 class = " media-frame-menu-heading " >< ? php _ex ( 'Actions' , 'media modal menu actions' ); ?> </h2>
< button type = " button " class = " button button-link media-frame-menu-toggle " aria - expanded = " false " >
< ? php _ex ( 'Menu' , 'media modal menu' ); ?>
< span class = " dashicons dashicons-arrow-down " aria - hidden = " true " ></ span >
</ button >
< div class = " media-frame-menu " ></ div >
< div class = " media-frame-tab-panel " >
< div class = " media-frame-router " ></ div >
< div class = " media-frame-content " ></ div >
</ div >
< h2 class = " media-frame-actions-heading screen-reader-text " >
< ? php
/* translators: Accessibility text. */
_e ( 'Selected media actions' );
?>
</ h2 >
< div class = " media-frame-toolbar " ></ div >
< div class = " media-frame-uploader " ></ div >
</ script >
< ? php // Template for the media modal. ?>
< script type = " text/html " id = " tmpl-media-modal " >
< div tabindex = " 0 " class = " <?php echo $class ; ?> " role = " dialog " aria - labelledby = " media-frame-title " >
< # if ( data.hasCloseButton ) { #>
< button type = " button " class = " media-modal-close " >< span class = " media-modal-icon " >< span class = " screen-reader-text " >< ? php _e ( 'Close dialog' ); ?> </span></span></button>
< # } #>
< div class = " media-modal-content " role = " document " ></ div >
</ div >
< div class = " media-modal-backdrop " ></ div >
</ script >
< ? php // Template for the window uploader, used for example in the media grid. ?>
< script type = " text/html " id = " tmpl-uploader-window " >
< div class = " uploader-window-content " >
< div class = " uploader-editor-title " >< ? php _e ( 'Drop files to upload' ); ?> </div>
</ div >
</ script >
< ? php // Template for the editor uploader. ?>
< script type = " text/html " id = " tmpl-uploader-editor " >
< div class = " uploader-editor-content " >
< div class = " uploader-editor-title " >< ? php _e ( 'Drop files to upload' ); ?> </div>
</ div >
</ script >
< ? php // Template for the inline uploader, used for example in the Media Library admin page - Add New. ?>
< script type = " text/html " id = " tmpl-uploader-inline " >
< # var messageClass = data.message ? 'has-upload-message' : 'no-upload-message'; #>
< # if ( data.canClose ) { #>
< button class = " close dashicons dashicons-no " >< span class = " screen-reader-text " >< ? php _e ( 'Close uploader' ); ?> </span></button>
< # } #>
< div class = " uploader-inline-content { { messageClass }} " >
< # if ( data.message ) { #>
< h2 class = " upload-message " > {{ data . message }} </ h2 >
< # } #>
< ? php if ( ! _device_can_upload () ) : ?>
< div class = " upload-ui " >
< h2 class = " upload-instructions " >< ? php _e ( 'Your browser cannot upload files' ); ?> </h2>
< p >
< ? php
printf (
/* translators: %s: https://apps.wordpress.org/ */
__ ( 'The web browser on your device cannot be used to upload files. You may be able to use the <a href="%s">native app for your device</a> instead.' ),
'https://apps.wordpress.org/'
);
?>
</ p >
</ div >
< ? php elseif ( is_multisite () && ! is_upload_space_available () ) : ?>
< div class = " upload-ui " >
< h2 class = " upload-instructions " >< ? php _e ( 'Upload Limit Exceeded' ); ?> </h2>
< ? php
/** This action is documented in wp-admin/includes/media.php */
do_action ( 'upload_ui_over_quota' );
?>
</ div >
< ? php else : ?>
< div class = " upload-ui " >
< h2 class = " upload-instructions drop-instructions " >< ? php _e ( 'Drop files to upload' ); ?> </h2>
< p class = " upload-instructions drop-instructions " >< ? php _ex ( 'or' , 'Uploader: Drop files here - or - Select Files' ); ?> </p>
< button type = " button " class = " browser button button-hero " >< ? php _e ( 'Select Files' ); ?> </button>
</ div >
< div class = " upload-inline-status " ></ div >
< div class = " post-upload-ui " >
< ? php
/** This action is documented in wp-admin/includes/media.php */
do_action ( 'pre-upload-ui' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
/** This action is documented in wp-admin/includes/media.php */
do_action ( 'pre-plupload-upload-ui' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
if ( 10 === remove_action ( 'post-plupload-upload-ui' , 'media_upload_flash_bypass' ) ) {
/** This action is documented in wp-admin/includes/media.php */
do_action ( 'post-plupload-upload-ui' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
add_action ( 'post-plupload-upload-ui' , 'media_upload_flash_bypass' );
} else {
/** This action is documented in wp-admin/includes/media.php */
do_action ( 'post-plupload-upload-ui' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
}
$max_upload_size = wp_max_upload_size ();
if ( ! $max_upload_size ) {
$max_upload_size = 0 ;
}
?>
< p class = " max-upload-size " >
< ? php
printf (
/* translators: %s: Maximum allowed file size. */
__ ( 'Maximum upload file size: %s.' ),
esc_html ( size_format ( $max_upload_size ) )
);
?>
</ p >
< # if ( data.suggestedWidth && data.suggestedHeight ) { #>
< p class = " suggested-dimensions " >
< ? php
/* translators: 1: Suggested width number, 2: Suggested height number. */
printf ( __ ( 'Suggested image dimensions: %1$s by %2$s pixels.' ), '{{data.suggestedWidth}}' , '{{data.suggestedHeight}}' );
?>
</ p >
< # } #>
< ? php
/** This action is documented in wp-admin/includes/media.php */
do_action ( 'post-upload-ui' ); // phpcs:ignore WordPress.NamingConventions.ValidHookName.UseUnderscores
?>
</ div >
< ? php endif ; ?>
</ div >
</ script >
< ? php // Template for the view switchers, used for example in the Media Grid. ?>
< script type = " text/html " id = " tmpl-media-library-view-switcher " >
< a href = " <?php echo esc_url( add_query_arg( 'mode', 'list', $_SERVER['REQUEST_URI'] ) ); ?> " class = " view-list " >
< span class = " screen-reader-text " >< ? php _e ( 'List View' ); ?> </span>
</ a >
< a href = " <?php echo esc_url( add_query_arg( 'mode', 'grid', $_SERVER['REQUEST_URI'] ) ); ?> " class = " view-grid current " aria - current = " page " >
< span class = " screen-reader-text " >< ? php _e ( 'Grid View' ); ?> </span>
</ a >
</ script >
< ? php // Template for the uploading status UI. ?>
< script type = " text/html " id = " tmpl-uploader-status " >
< h2 >< ? php _e ( 'Uploading' ); ?> </h2>
< button type = " button " class = " button-link upload-dismiss-errors " >< span class = " screen-reader-text " >< ? php _e ( 'Dismiss Errors' ); ?> </span></button>
< div class = " media-progress-bar " >< div ></ div ></ div >
< div class = " upload-details " >
< span class = " upload-count " >
< span class = " upload-index " ></ span > / < span class = " upload-total " ></ span >
</ span >
< span class = " upload-detail-separator " >& ndash ; </ span >
< span class = " upload-filename " ></ span >
</ div >
< div class = " upload-errors " ></ div >
</ script >
< ? php // Template for the uploading status errors. ?>
< script type = " text/html " id = " tmpl-uploader-status-error " >
< span class = " upload-error-filename " > {{{ data . filename }}} </ span >
< span class = " upload-error-message " > {{ data . message }} </ span >
</ script >
< ? php // Template for the Attachment Details layout in the media browser. ?>
< script type = " text/html " id = " tmpl-edit-attachment-frame " >
< div class = " edit-media-header " >
< button class = " left dashicons " < # if ( ! data.hasPrevious ) { #> disabled<# } #>><span class="screen-reader-text"><?php _e( 'Edit previous media item' ); ?></span></button>
< button class = " right dashicons " < # if ( ! data.hasNext ) { #> disabled<# } #>><span class="screen-reader-text"><?php _e( 'Edit next media item' ); ?></span></button>
< button type = " button " class = " media-modal-close " >< span class = " media-modal-icon " >< span class = " screen-reader-text " >< ? php _e ( 'Close dialog' ); ?> </span></span></button>
</ div >
< div class = " media-frame-title " ></ div >
< div class = " media-frame-content " ></ div >
</ script >
< ? php // Template for the Attachment Details two columns layout. ?>
< script type = " text/html " id = " tmpl-attachment-details-two-column " >
< div class = " attachment-media-view { { data.orientation }} " >
< h2 class = " screen-reader-text " >< ? php _e ( 'Attachment Preview' ); ?> </h2>
< div class = " thumbnail thumbnail- { { data.type }} " >
< # if ( data.uploading ) { #>
< div class = " media-progress-bar " >< div ></ div ></ div >
< # } else if ( data.sizes && data.sizes.large ) { #>
< img class = " details-image " src = " { { data.sizes.large.url }} " draggable = " false " alt = " " />
< # } else if ( data.sizes && data.sizes.full ) { #>
< img class = " details-image " src = " { { data.sizes.full.url }} " draggable = " false " alt = " " />
< # } else if ( -1 === jQuery.inArray( data.type, [ 'audio', 'video' ] ) ) { #>
< img class = " details-image icon " src = " { { data.icon }} " draggable = " false " alt = " " />
< # } #>
< # if ( 'audio' === data.type ) { #>
< div class = " wp-media-wrapper " >
< audio style = " visibility: hidden " controls class = " wp-audio-shortcode " width = " 100% " preload = " none " >
< source type = " { { data.mime }} " src = " { { data.url }} " />
</ audio >
</ div >
< # } else if ( 'video' === data.type ) {
var w_rule = '' ;
if ( data . width ) {
w_rule = 'width: ' + data . width + 'px;' ;
} else if ( wp . media . view . settings . contentWidth ) {
w_rule = 'width: ' + wp . media . view . settings . contentWidth + 'px;' ;
}
#>
< div style = " { { w_rule }} " class = " wp-media-wrapper wp-video " >
< video controls = " controls " class = " wp-video-shortcode " preload = " metadata "
< # if ( data.width ) { #>width="{{ data.width }}"<# } #>
< # if ( data.height ) { #>height="{{ data.height }}"<# } #>
< # if ( data.image && data.image.src !== data.icon ) { #>poster="{{ data.image.src }}"<# } #>>
< source type = " { { data.mime }} " src = " { { data.url }} " />
</ video >
</ div >
< # } #>
< div class = " attachment-actions " >
< # if ( 'image' === data.type && ! data.uploading && data.sizes && data.can.save ) { #>
< button type = " button " class = " button edit-attachment " >< ? php _e ( 'Edit Image' ); ?> </button>
< # } else if ( 'pdf' === data.subtype && data.sizes ) { #>
< p >< ? php _e ( 'Document Preview' ); ?> </p>
< # } #>
</ div >
</ div >
</ div >
< div class = " attachment-info " >
< span class = " settings-save-status " role = " status " >
< span class = " spinner " ></ span >
< span class = " saved " >< ? php esc_html_e ( 'Saved.' ); ?> </span>
</ span >
< div class = " details " >
< # let fDate = new Date(data.date); fDate.setHours( fDate.getHours() + 0 ); #>
< # data.dateF = ("00" + fDate.getDate()).slice(-2)+'.'+("00" + (fDate.getMonth() + 1)).slice(-2)+'.'+fDate.getFullYear()+' '+("00" + fDate.getHours()).slice(-2)+':'+("00" + fDate.getMinutes()).slice(-2)+':'+("00" + fDate.getSeconds()).slice(-2) #>
< h2 class = " screen-reader-text " >< ? php _e ( 'Details' ); ?> </h2>
< div class = " filename " >< strong >< ? php _e ( 'File name:' ); ?> </strong> {{ data.filename }}</div>
< div class = " filename " >< strong >< ? php _e ( 'File type:' ); ?> </strong> {{ data.mime }}</div>
< div class = " uploaded " >< strong >< ? php _e ( 'Uploaded on:' ); ?> </strong> {{ data.dateF }}</div>
< div class = " file-size " >< strong >< ? php _e ( 'File size:' ); ?> </strong> {{ data.filesizeHumanReadable }}</div>
< # if ( 'image' === data.type && ! data.uploading ) { #>
< # if ( data.width && data.height ) { #>
< div class = " dimensions " >< strong >< ? php _e ( 'Dimensions:' ); ?> </strong>
< ? php
/* translators: 1: A number of pixels wide, 2: A number of pixels tall. */
printf ( __ ( '%1$s by %2$s pixels' ), '{{ data.width }}' , '{{ data.height }}' );
?>
</ div >
< # } #>
< # if ( data.originalImageURL && data.originalImageName ) { #>
< ? php _e ( 'Original image:' ); ?>
< a href = " { { data.originalImageURL }} " > {{ data . originalImageName }} </ a >
< # } #>
< # } #>
< # if ( data.fileLength && data.fileLengthHumanReadable ) { #>
< div class = " file-length " >< strong >< ? php _e ( 'Length:' ); ?> </strong>
< span aria - hidden = " true " > {{ data . fileLength }} </ span >
< span class = " screen-reader-text " > {{ data . fileLengthHumanReadable }} </ span >
</ div >
< # } #>
< # if ( 'audio' === data.type && data.meta.bitrate ) { #>
< div class = " bitrate " >
< strong >< ? php _e ( 'Bitrate:' ); ?> </strong> {{ Math.round( data.meta.bitrate / 1000 ) }}kb/s
< # if ( data.meta.bitrate_mode ) { #>
{{ ' ' + data . meta . bitrate_mode . toUpperCase () }}
< # } #>
</ div >
< # } #>
< div class = " compat-meta " >
< # if ( data.compat && data.compat.meta ) { #>
{{{ data . compat . meta }}}
< # } #>
</ div >
</ div >
< div class = " settings " >
< # var maybeReadOnly = data.can.save || data.allowLocalEdits ? '' : 'readonly'; #>
< # if ( 'image' === data.type ) { #>
< span class = " setting has-description " data - setting = " alt " >
< label for = " attachment-details-two-column-alt-text " class = " name " >< ? php _e ( 'Alternative Text' ); ?> </label>
< input type = " text " id = " attachment-details-two-column-alt-text " value = " { { data.alt }} " aria - describedby = " alt-text-description " {{ maybeReadOnly }} />
</ span >
< p class = " description " id = " alt-text-description " >< ? php echo $alt_text_description ; ?> </p>
< # } #>
< ? php if ( post_type_supports ( 'attachment' , 'title' ) ) : ?>
< span class = " setting " data - setting = " title " >
< label for = " attachment-details-two-column-title " class = " name " > Название </ label >
< input type = " text " id = " attachment-details-two-column-title " value = " { { data.title }} " {{ maybeReadOnly }} />
</ span >
< ? php endif ; ?>
< # if ( 'audio' === data.type ) { #>
< ? php
foreach ( array (
'artist' => __ ( 'Artist' ),
'album' => __ ( 'Album' ),
) as $key => $label ) :
?>
< span class = " setting " data - setting = " <?php echo esc_attr( $key ); ?> " >
< label for = " attachment-details-two-column-<?php echo esc_attr( $key ); ?> " class = " name " >< ? php echo $label ; ?> </label>
< input type = " text " id = " attachment-details-two-column-<?php echo esc_attr( $key ); ?> " value = " { { data.<?php echo $key ; ?> || data.meta.<?php echo $key ; ?> || '' }} " />
</ span >
< ? php endforeach ; ?>
< # } #>
< span class = " setting " data - setting = " caption " >
< label for = " attachment-details-two-column-caption " class = " name " > Copyright </ label >
< textarea id = " attachment-details-two-column-caption " {{ maybeReadOnly }} > {{ data . caption }} </ textarea >
</ span >
< span class = " setting " data - setting = " description " >
< label for = " attachment-details-two-column-description " class = " name " > Подпись </ label >
< textarea id = " attachment-details-two-column-description " {{ maybeReadOnly }} > {{ data . description }} </ textarea >
</ span >
< span class = " setting " >
< span class = " name " >< ? php _e ( 'Uploaded By' ); ?> </span>
< span class = " value " > {{ data . authorName }} </ span >
</ span >
< # if ( data.uploadedToTitle ) { #>
< span class = " setting " >
< span class = " name " >< ? php _e ( 'Uploaded To' ); ?> </span>
< # if ( data.uploadedToLink ) { #>
< span class = " value " >< a href = " { { data.uploadedToLink }} " > {{ data . uploadedToTitle }} </ a ></ span >
< # } else { #>
< span class = " value " > {{ data . uploadedToTitle }} </ span >
< # } #>
</ span >
< # } #>
< span class = " setting " data - setting = " url " >
< label for = " attachment-details-two-column-copy-link " class = " name " >< ? php _e ( 'Copy Link' ); ?> </label>
< input type = " text " id = " attachment-details-two-column-copy-link " value = " { { data.url }} " readonly />
</ span >
< div class = " attachment-compat " ></ div >
</ div >
< div class = " actions " >
< a class = " view-attachment " href = " { { data.link }} " >< ? php _e ( 'View attachment page' ); ?> </a>
< # if ( data.can.save ) { #> |
< a href = " { { data.editLink }} " >< ? php _e ( 'Edit more details' ); ?> </a>
< # } #>
< # if ( ! data.uploading && data.can.remove ) { #> |
< ? php if ( MEDIA_TRASH ) : ?>
< # if ( 'trash' === data.status ) { #>
< button type = " button " class = " button-link untrash-attachment " >< ? php _e ( 'Restore from Trash' ); ?> </button>
< # } else { #>
< button type = " button " class = " button-link trash-attachment " >< ? php _e ( 'Move to Trash' ); ?> </button>
< # } #>
< ? php else : ?>
< button type = " button " class = " button-link delete-attachment " >< ? php _e ( 'Delete Permanently' ); ?> </button>
< ? php endif ; ?>
< # } #>
</ div >
</ div >
</ script >
< ? php // Template for the Attachment "thumbnails" in the Media Grid. ?>
< script type = " text/html " id = " tmpl-attachment " >
< div class = " attachment-preview js--select-attachment type- { { data.type }} subtype- { { data.subtype }} { { data.orientation }} " >
< div class = " thumbnail " >
< # if(typeof data.all_sizes !== "undefined") { #>
< # if(typeof data.all_sizes.post_thumbnail !== "undefined") { #>
< # if(Math.abs((data.all_sizes.post_thumbnail.width/data.all_sizes.post_thumbnail.height)/(1.777777777777777777777/100)-100) > 5 && data.apply_filter){ #>
< div style = " position:absolute;left:0;top:30%:0;width:100%;text-align:center;fint-size:10px;z-index:3; " >
Н е подходит в качестве заходного
</ div >
< # } #>
< # } #>
< # } #>
< # if ( data.uploading ) { #>
< div class = " media-progress-bar " >< div style = " width: { { data.percent }}% " ></ div ></ div >
< # } else if ( 'image' === data.type && data.sizes ) { #>
< # if ( data.apply_filter ) { #>
< div class = " centered " < # if(typeof data.all_sizes !== "undefined") { #><# if(typeof data.all_sizes.post_thumbnail !== "undefined") { #><# if(Math.abs((data.all_sizes.post_thumbnail.width/data.all_sizes.post_thumbnail.height)/(1.777777777777777777777/100)-100) > 5){ #> style="opacity:0.2"<# } #><# } #><# } #>>
< img src = " { { data.size.url }} " draggable = " false " alt = " " />
</ div >
< # } else { #>
< div class = " centered " >
< img src = " { { data.size.url }} " draggable = " false " alt = " " />
</ div >
< # } #>
< # } else { #>
< div class = " centered " >
< # if ( data.image && data.image.src && data.image.src !== data.icon ) { #>
< img src = " { { data.image.src }} " class = " thumbnail " draggable = " false " alt = " " />
< # } else if ( data.sizes && data.sizes.medium ) { #>
< img src = " { { data.sizes.medium.url }} " class = " thumbnail " draggable = " false " alt = " " />
< # } else { #>
< img src = " { { data.icon }} " class = " icon " draggable = " false " alt = " " />
< # } #>
</ div >
< div class = " filename " >
< div > {{ data . filename }} </ div >
</ div >
< # } #>
</ div >
< # if ( data.buttons.close ) { #>
< button type = " button " class = " button-link attachment-close media-modal-icon " >< span class = " screen-reader-text " >< ? php _e ( 'Remove' ); ?> </span></button>
< # } #>
</ div >
< # if ( data.buttons.check ) { #>
< button type = " button " class = " check " tabindex = " -1 " >< span class = " media-modal-icon " ></ span >< span class = " screen-reader-text " >< ? php _e ( 'Deselect' ); ?> </span></button>
< # } #>
< #
var maybeReadOnly = data . can . save || data . allowLocalEdits ? '' : 'readonly' ;
if ( data . describe ) {
if ( 'image' === data . type ) { #>
< input type = " text " value = " { { data.caption }} " class = " describe " data - setting = " caption "
aria - label = " <?php esc_attr_e( 'Caption' ); ?> "
placeholder = " <?php esc_attr_e( 'Caption…' ); ?> " {{ maybeReadOnly }} />
< # } else { #>
< input type = " text " value = " { { data.title }} " class = " describe " data - setting = " title "
< # if ( 'video' === data.type ) { #>
aria - label = " <?php esc_attr_e( 'Video title' ); ?> "
placeholder = " <?php esc_attr_e( 'Video title…' ); ?> "
< # } else if ( 'audio' === data.type ) { #>
aria - label = " <?php esc_attr_e( 'Audio title' ); ?> "
placeholder = " <?php esc_attr_e( 'Audio title…' ); ?> "
< # } else { #>
aria - label = " <?php esc_attr_e( 'Media title' ); ?> "
placeholder = " <?php esc_attr_e( 'Media title…' ); ?> "
< # } #> {{ maybeReadOnly }} />
< # }
} #>
</ script >
< ? php // Template for the Attachment details, used for example in the sidebar. ?>
< script type = " text/html " id = " tmpl-attachment-details " >
< h2 >
< ? php _e ( 'Attachment Details' ); ?>
< span class = " settings-save-status " role = " status " >
< span class = " spinner " ></ span >
< span class = " saved " >< ? php esc_html_e ( 'Saved.' ); ?> </span>
</ span >
</ h2 >
< div class = " attachment-info " >
< div class = " thumbnail thumbnail- { { data.type }} " >
< # if ( data.uploading ) { #>
< div class = " media-progress-bar " >< div ></ div ></ div >
< # } else if ( 'image' === data.type && data.sizes ) { #>
< img src = " { { data.size.url }} " draggable = " false " alt = " " />
< # } else { #>
< img src = " { { data.icon }} " class = " icon " draggable = " false " alt = " " />
< # } #>
</ div >
< div class = " details " >
< div class = " filename " > {{ data . filename }} </ div >
< div class = " uploaded " > {{ data . dateFormatted }} </ div >
< div class = " file-size " > {{ data . filesizeHumanReadable }} </ div >
< # if ( 'image' === data.type && ! data.uploading ) { #>
< # if ( data.width && data.height ) { #>
< div class = " dimensions " >
< ? php
/* translators: 1: A number of pixels wide, 2: A number of pixels tall. */
printf ( __ ( '%1$s by %2$s pixels' ), '{{ data.width }}' , '{{ data.height }}' );
?>
</ div >
< # } #>
< # if ( data.originalImageURL && data.originalImageName ) { #>
< ? php _e ( 'Original image:' ); ?>
< a href = " { { data.originalImageURL }} " > {{ data . originalImageName }} </ a >
< # } #>
< # if ( data.can.save && data.sizes ) { #>
< a class = " edit-attachment " href = " { { data.editLink }}&image-editor " target = " _blank " >< ? php _e ( 'Edit Image' ); ?> </a>
< # } #>
< # } #>
< # if ( data.fileLength && data.fileLengthHumanReadable ) { #>
< div class = " file-length " >< ? php _e ( 'Length:' ); ?>
< span aria - hidden = " true " > {{ data . fileLength }} </ span >
< span class = " screen-reader-text " > {{ data . fileLengthHumanReadable }} </ span >
</ div >
< # } #>
< # if ( ! data.uploading && data.can.remove ) { #>
< ? php if ( MEDIA_TRASH ) : ?>
< # if ( 'trash' === data.status ) { #>
< button type = " button " class = " button-link untrash-attachment " >< ? php _e ( 'Restore from Trash' ); ?> </button>
< # } else { #>
< button type = " button " class = " button-link trash-attachment " >< ? php _e ( 'Move to Trash' ); ?> </button>
< # } #>
< ? php else : ?>
< button type = " button " class = " button-link delete-attachment " >< ? php _e ( 'Delete Permanently' ); ?> </button>
< ? php endif ; ?>
< # } #>
< div class = " compat-meta " >
< # if ( data.compat && data.compat.meta ) { #>
{{{ data . compat . meta }}}
< # } #>
</ div >
</ div >
</ div >
< # var maybeReadOnly = data.can.save || data.allowLocalEdits ? '' : 'readonly'; #>
< # if ( 'image' === data.type ) { #>
< span class = " setting has-description " data - setting = " alt " >
< label for = " attachment-details-alt-text " class = " name " >< ? php _e ( 'Alt Text' ); ?> </label>
< input type = " text " id = " attachment-details-alt-text " value = " { { data.alt }} " aria - describedby = " alt-text-description " {{ maybeReadOnly }} />
</ span >
< p class = " description " id = " alt-text-description " >< ? php echo $alt_text_description ; ?> </p>
< # } #>
< ? php if ( post_type_supports ( 'attachment' , 'title' ) ) : ?>
< span class = " setting " data - setting = " title " >
< label for = " attachment-details-title " class = " name " > Название </ label >
< input type = " text " id = " attachment-details-title " value = " { { data.title }} " {{ maybeReadOnly }} />
</ span >
< ? php endif ; ?>
< # if ( 'audio' === data.type ) { #>
< ? php
foreach ( array (
'artist' => __ ( 'Artist' ),
'album' => __ ( 'Album' ),
) as $key => $label ) :
?>
< span class = " setting " data - setting = " <?php echo esc_attr( $key ); ?> " >
< label for = " attachment-details-<?php echo esc_attr( $key ); ?> " class = " name " >< ? php echo $label ; ?> </label>
< input type = " text " id = " attachment-details-<?php echo esc_attr( $key ); ?> " value = " { { data.<?php echo $key ; ?> || data.meta.<?php echo $key ; ?> || '' }} " />
</ span >
< ? php endforeach ; ?>
< # } #>
< span class = " setting " data - setting = " caption " >
< label for = " attachment-details-caption " class = " name " > Copyright </ label >
< textarea id = " attachment-details-caption " {{ maybeReadOnly }} > {{ data . caption }} </ textarea >
</ span >
< span class = " setting " data - setting = " description " >
< label for = " attachment-details-description " class = " name " > Подпись </ label >
< textarea id = " attachment-details-description " {{ maybeReadOnly }} > {{ data . description }} </ textarea >
</ span >
< span class = " setting " data - setting = " url " >
< label for = " attachment-details-copy-link " class = " name " >< ? php _e ( 'Copy Link' ); ?> </label>
< input type = " text " id = " attachment-details-copy-link " value = " { { data.url }} " readonly />
</ span >
</ script >
< ? php // Template for the Selection status bar. ?>
< script type = " text/html " id = " tmpl-media-selection " >
< div class = " selection-info " >
< span class = " count " ></ span >
< # if ( data.editable ) { #>
< button type = " button " class = " button-link edit-selection " >< ? php _e ( 'Edit Selection' ); ?> </button>
< # } #>
< # if ( data.clearable ) { #>
< button type = " button " class = " button-link clear-selection " >< ? php _e ( 'Clear' ); ?> </button>
< # } #>
</ div >
< div class = " selection-view " ></ div >
</ script >
< ? php // Template for the Attachment display settings, used for example in the sidebar. ?>
< script type = " text/html " id = " tmpl-attachment-display-settings " >
< h2 >< ? php _e ( 'Attachment Display Settings' ); ?> </h2>
< # if ( 'image' === data.type ) { #>
< span class = " setting align " >
< label for = " attachment-display-settings-alignment " class = " name " >< ? php _e ( 'Alignment' ); ?> </label>
< select id = " attachment-display-settings-alignment " class = " alignment "
data - setting = " align "
< # if ( data.userSettings ) { #>
data - user - setting = " align "
< # } #>>
< option value = " left " >
< ? php esc_html_e ( 'Left' ); ?>
</ option >
< option value = " center " >
< ? php esc_html_e ( 'Center' ); ?>
</ option >
< option value = " right " >
< ? php esc_html_e ( 'Right' ); ?>
</ option >
< option value = " none " selected >
< ? php esc_html_e ( 'None' ); ?>
</ option >
</ select >
</ span >
< # } #>
< span class = " setting " >
< label for = " attachment-display-settings-link-to " class = " name " >
< # if ( data.model.canEmbed ) { #>
< ? php _e ( 'Embed or Link' ); ?>
< # } else { #>
< ? php _e ( 'Link To' ); ?>
< # } #>
</ label >
< select id = " attachment-display-settings-link-to " class = " link-to "
data - setting = " link "
< # if ( data.userSettings && ! data.model.canEmbed ) { #>
data - user - setting = " urlbutton "
< # } #>>
< # if ( data.model.canEmbed ) { #>
< option value = " embed " selected >
< ? php esc_html_e ( 'Embed Media Player' ); ?>
</ option >
< option value = " file " >
< # } else { #>
< option value = " none " selected >
< ? php esc_html_e ( 'None' ); ?>
</ option >
< option value = " file " >
< # } #>
< # if ( data.model.canEmbed ) { #>
< ? php esc_html_e ( 'Link to Media File' ); ?>
< # } else { #>
< ? php esc_html_e ( 'Media File' ); ?>
< # } #>
</ option >
< option value = " post " >
< # if ( data.model.canEmbed ) { #>
< ? php esc_html_e ( 'Link to Attachment Page' ); ?>
< # } else { #>
< ? php esc_html_e ( 'Attachment Page' ); ?>
< # } #>
</ option >
< # if ( 'image' === data.type ) { #>
< option value = " custom " >
< ? php esc_html_e ( 'Custom URL' ); ?>
</ option >
< # } #>
</ select >
</ span >
< span class = " setting " >
< label for = " attachment-display-settings-link-to-custom " class = " name " >< ? php _e ( 'URL' ); ?> </label>
< input type = " text " id = " attachment-display-settings-link-to-custom " class = " link-to-custom " data - setting = " linkUrl " />
</ span >
< # if ( 'undefined' !== typeof data.sizes ) { #>
< span class = " setting " >
< label for = " attachment-display-settings-size " class = " name " >< ? php _e ( 'Size' ); ?> </label>
< select id = " attachment-display-settings-size " class = " size " name = " size "
data - setting = " size "
< # if ( data.userSettings ) { #>
data - user - setting = " imgsize "
< # } #>>
< ? php
/** This filter is documented in wp-admin/includes/media.php */
$sizes = apply_filters (
'image_size_names_choose' ,
array (
#'thumbnail' => __( 'Thumbnail' ),
#'medium' => __( 'Medium' ),
#'large' => __( 'Large' ),
'full' => __ ( 'Full Size' ),
)
);
foreach ( $sizes as $value => $name ) :
?>
< #
var size = data . sizes [ '<?php echo esc_js( $value ); ?>' ];
if ( size ) { #>
< option value = " <?php echo esc_attr( $value ); ?> " < ? php selected ( $value , 'full' ); ?> >
< ? php echo esc_html ( $name ); ?> – {{ size.width }} × {{ size.height }}
</ option >
< # } #>
< ? php endforeach ; ?>
</ select >
</ span >
< # } #>
</ script >
< ? php // Template for the Gallery settings, used for example in the sidebar. ?>
< script type = " text/html " id = " tmpl-gallery-settings " >
< h2 >< ? php _e ( 'Gallery Settings' ); ?> </h2>
< span class = " setting " >
< label for = " gallery-settings-link-to " class = " name " >< ? php _e ( 'Link To' ); ?> </label>
< select id = " gallery-settings-link-to " class = " link-to "
data - setting = " link "
< # if ( data.userSettings ) { #>
data - user - setting = " urlbutton "
< # } #>>
< option value = " post " < # if ( ! wp.media.galleryDefaults.link || 'post' == wp.media.galleryDefaults.link ) {
#>selected="selected"<# }
#>>
< ? php esc_html_e ( 'Attachment Page' ); ?>
</ option >
< option value = " file " < # if ( 'file' == wp.media.galleryDefaults.link ) { #>selected="selected"<# } #>>
< ? php esc_html_e ( 'Media File' ); ?>
</ option >
< option value = " none " < # if ( 'none' == wp.media.galleryDefaults.link ) { #>selected="selected"<# } #>>
< ? php esc_html_e ( 'None' ); ?>
</ option >
</ select >
</ span >
< span class = " setting " >
< label for = " gallery-settings-columns " class = " name select-label-inline " >< ? php _e ( 'Columns' ); ?> </label>
< select id = " gallery-settings-columns " class = " columns " name = " columns "
data - setting = " columns " >
< ? php for ( $i = 1 ; $i <= 9 ; $i ++ ) : ?>
< option value = " <?php echo esc_attr( $i ); ?> " < #
if ( < ? php echo $i ; ?> == wp.media.galleryDefaults.columns ) { #>selected="selected"<# }
#>>
< ? php echo esc_html ( $i ); ?>
</ option >
< ? php endfor ; ?>
</ select >
</ span >
< span class = " setting " >
< input type = " checkbox " id = " gallery-settings-random-order " data - setting = " _orderbyRandom " />
< label for = " gallery-settings-random-order " class = " checkbox-label-inline " >< ? php _e ( 'Random Order' ); ?> </label>
</ span >
< span class = " setting size " >
< label for = " gallery-settings-size " class = " name " >< ? php _e ( 'Size' ); ?> </label>
< select id = " gallery-settings-size " class = " size " name = " size "
data - setting = " size "
< # if ( data.userSettings ) { #>
data - user - setting = " imgsize "
< # } #>
>
< ? php
/** This filter is documented in wp-admin/includes/media.php */
$size_names = apply_filters (
'image_size_names_choose' ,
array (
'thumbnail' => __ ( 'Thumbnail' ),
'medium' => __ ( 'Medium' ),
'large' => __ ( 'Large' ),
'full' => __ ( 'Full Size' ),
)
);
foreach ( $size_names as $size => $label ) :
?>
< option value = " <?php echo esc_attr( $size ); ?> " >
< ? php echo esc_html ( $label ); ?>
</ option >
< ? php endforeach ; ?>
</ select >
</ span >
</ script >
< ? php // Template for the Playlists settings, used for example in the sidebar. ?>
< script type = " text/html " id = " tmpl-playlist-settings " >
< h2 >< ? php _e ( 'Playlist Settings' ); ?> </h2>
< # var emptyModel = _.isEmpty( data.model ),
isVideo = 'video' === data . controller . get ( 'library' ) . props . get ( 'type' ); #>
< span class = " setting " >
< input type = " checkbox " id = " playlist-settings-show-list " data - setting = " tracklist " < # if ( emptyModel ) { #>
checked = " checked "
< # } #> />
< label for = " playlist-settings-show-list " class = " checkbox-label-inline " >
< # if ( isVideo ) { #>
< ? php _e ( 'Show Video List' ); ?>
< # } else { #>
< ? php _e ( 'Show Tracklist' ); ?>
< # } #>
</ label >
</ span >
< # if ( ! isVideo ) { #>
< span class = " setting " >
< input type = " checkbox " id = " playlist-settings-show-artist " data - setting = " artists " < # if ( emptyModel ) { #>
checked = " checked "
< # } #> />
< label for = " playlist-settings-show-artist " class = " checkbox-label-inline " >
< ? php _e ( 'Show Artist Name in Tracklist' ); ?>
</ label >
</ span >
< # } #>
< span class = " setting " >
< input type = " checkbox " id = " playlist-settings-show-images " data - setting = " images " < # if ( emptyModel ) { #>
checked = " checked "
< # } #> />
< label for = " playlist-settings-show-images " class = " checkbox-label-inline " >
< ? php _e ( 'Show Images' ); ?>
</ label >
</ span >
</ script >
< ? php // Template for the "Insert from URL" layout. ?>
< script type = " text/html " id = " tmpl-embed-link-settings " >
< span class = " setting link-text " >
< label for = " embed-link-settings-link-text " class = " name " >< ? php _e ( 'Link Text' ); ?> </label>
< input type = " text " id = " embed-link-settings-link-text " class = " alignment " data - setting = " linkText " />
</ span >
< div class = " embed-container " style = " display: none; " >
< div class = " embed-preview " ></ div >
</ div >
</ script >
< ? php // Template for the "Insert from URL" image preview and details. ?>
< script type = " text/html " id = " tmpl-embed-image-settings " >
< div class = " wp-clearfix " >
< div class = " thumbnail " >
< img src = " { { data.model.url }} " draggable = " false " alt = " " />
</ div >
</ div >
< span class = " setting alt-text has-description " >
< label for = " embed-image-settings-alt-text " class = " name " >< ? php _e ( 'Alternative Text' ); ?> </label>
< input type = " text " id = " embed-image-settings-alt-text " data - setting = " alt " aria - describedby = " alt-text-description " />
</ span >
< p class = " description " id = " alt-text-description " >< ? php echo $alt_text_description ; ?> </p>
< ? php
/** This filter is documented in wp-admin/includes/media.php */
if ( ! apply_filters ( 'disable_captions' , '' ) ) :
?>
< span class = " setting caption " >
< label for = " embed-image-settings-caption " class = " name " >< ? php _e ( 'Caption' ); ?> </label>
< textarea id = " embed-image-settings-caption " data - setting = " caption " />
</ span >
< ? php endif ; ?>
< fieldset class = " setting-group " >
< legend class = " name " >< ? php _e ( 'Align' ); ?> </legend>
< span class = " setting align " >
< span class = " button-group button-large " data - setting = " align " >
< button class = " button " value = " left " >
< ? php esc_html_e ( 'Left' ); ?>
</ button >
< button class = " button " value = " center " >
< ? php esc_html_e ( 'Center' ); ?>
</ button >
< button class = " button " value = " right " >
< ? php esc_html_e ( 'Right' ); ?>
</ button >
< button class = " button active " value = " none " >
< ? php esc_html_e ( 'None' ); ?>
</ button >
</ span >
</ span >
</ fieldset >
< fieldset class = " setting-group " >
< legend class = " name " >< ? php _e ( 'Link To' ); ?> </legend>
< span class = " setting link-to " >
< span class = " button-group button-large " data - setting = " link " >
< button class = " button " value = " file " >
< ? php esc_html_e ( 'Image URL' ); ?>
</ button >
< button class = " button " value = " custom " >
< ? php esc_html_e ( 'Custom URL' ); ?>
</ button >
< button class = " button active " value = " none " >
< ? php esc_html_e ( 'None' ); ?>
</ button >
</ span >
</ span >
< span class = " setting " >
< label for = " embed-image-settings-link-to-custom " class = " name " >< ? php _e ( 'URL' ); ?> </label>
< input type = " text " id = " embed-image-settings-link-to-custom " class = " link-to-custom " data - setting = " linkUrl " />
</ span >
</ fieldset >
</ script >
< ? php // Template for the Image details, used for example in the editor. ?>
< script type = " text/html " id = " tmpl-image-details " >
< div class = " media-embed " >
< div class = " embed-media-settings " >
< div class = " column-settings " >
< span class = " setting alt-text has-description " >
< label for = " image-details-alt-text " class = " name " >< ? php _e ( 'Alternative Text' ); ?> </label>
< input type = " text " id = " image-details-alt-text " data - setting = " alt " value = " { { data.model.alt }} " aria - describedby = " alt-text-description " />
</ span >
< p class = " description " id = " alt-text-description " >< ? php echo $alt_text_description ; ?> </p>
< ? php
/** This filter is documented in wp-admin/includes/media.php */
if ( ! apply_filters ( 'disable_captions' , '' ) ) :
?>
< span class = " setting caption " >
< label for = " image-details-caption " class = " name " >< ? php _e ( 'Caption' ); ?> </label>
< textarea id = " image-details-caption " data - setting = " caption " > {{ data . model . caption }} </ textarea >
</ span >
< ? php endif ; ?>
< h2 >< ? php _e ( 'Display Settings' ); ?> </h2>
< fieldset class = " setting-group " >
< legend class = " legend-inline " >< ? php _e ( 'Align' ); ?> </legend>
< span class = " setting align " >
< span class = " button-group button-large " data - setting = " align " >
< button class = " button " value = " left " >
< ? php esc_html_e ( 'Left' ); ?>
</ button >
< button class = " button " value = " center " >
< ? php esc_html_e ( 'Center' ); ?>
</ button >
< button class = " button " value = " right " >
< ? php esc_html_e ( 'Right' ); ?>
</ button >
< button class = " button active " value = " none " >
< ? php esc_html_e ( 'None' ); ?>
</ button >
</ span >
</ span >
</ fieldset >
< # if ( data.attachment ) { #>
< # if ( 'undefined' !== typeof data.attachment.sizes ) { #>
< span class = " setting size " >
< label for = " image-details-size " class = " name " >< ? php _e ( 'Size' ); ?> </label>
< select id = " image-details-size " class = " size " name = " size "
data - setting = " size "
< # if ( data.userSettings ) { #>
data - user - setting = " imgsize "
< # } #>>
< ? php
/** This filter is documented in wp-admin/includes/media.php */
$sizes = apply_filters (
'image_size_names_choose' ,
array (
'thumbnail' => __ ( 'Thumbnail' ),
'medium' => __ ( 'Medium' ),
'large' => __ ( 'Large' ),
'full' => __ ( 'Full Size' ),
)
);
foreach ( $sizes as $value => $name ) :
?>
< #
var size = data . sizes [ '<?php echo esc_js( $value ); ?>' ];
if ( size ) { #>
< option value = " <?php echo esc_attr( $value ); ?> " >
< ? php echo esc_html ( $name ); ?> – {{ size.width }} × {{ size.height }}
</ option >
< # } #>
< ? php endforeach ; ?>
< option value = " <?php echo esc_attr( 'custom' ); ?> " >
< ? php _e ( 'Custom Size' ); ?>
</ option >
</ select >
</ span >
< # } #>
< div class = " custom-size wp-clearfix<# if ( data.model.size !== 'custom' ) { #> hidden<# } #> " >
< span class = " custom-size-setting " >
< label for = " image-details-size-width " >< ? php _e ( 'Width' ); ?> </label>
< input type = " number " id = " image-details-size-width " aria - describedby = " image-size-desc " data - setting = " customWidth " step = " 1 " value = " { { data.model.customWidth }} " />
</ span >
< span class = " sep " aria - hidden = " true " >& times ; </ span >
< span class = " custom-size-setting " >
< label for = " image-details-size-height " >< ? php _e ( 'Height' ); ?> </label>
< input type = " number " id = " image-details-size-height " aria - describedby = " image-size-desc " data - setting = " customHeight " step = " 1 " value = " { { data.model.customHeight }} " />
</ span >
< p id = " image-size-desc " class = " description " >< ? php _e ( 'Image size in pixels' ); ?> </p>
</ div >
< # } #>
< span class = " setting link-to " >
< label for = " image-details-link-to " class = " name " >< ? php _e ( 'Link To' ); ?> </label>
< select id = " image-details-link-to " data - setting = " link " >
< # if ( data.attachment ) { #>
< option value = " file " >
< ? php esc_html_e ( 'Media File' ); ?>
</ option >
< option value = " post " >
< ? php esc_html_e ( 'Attachment Page' ); ?>
</ option >
< # } else { #>
< option value = " file " >
< ? php esc_html_e ( 'Image URL' ); ?>
</ option >
< # } #>
< option value = " custom " >
< ? php esc_html_e ( 'Custom URL' ); ?>
</ option >
< option value = " none " >
< ? php esc_html_e ( 'None' ); ?>
</ option >
</ select >
</ span >
< span class = " setting " >
< label for = " image-details-link-to-custom " class = " name " >< ? php _e ( 'URL' ); ?> </label>
< input type = " text " id = " image-details-link-to-custom " class = " link-to-custom " data - setting = " linkUrl " />
</ span >
< div class = " advanced-section " >
< h2 >< button type = " button " class = " button-link advanced-toggle " >< ? php _e ( 'Advanced Options' ); ?> </button></h2>
< div class = " advanced-settings hidden " >
< div class = " advanced-image " >
< span class = " setting title-text " >
< label for = " image-details-title-attribute " class = " name " >< ? php _e ( 'Image Title Attribute' ); ?> </label>
< input type = " text " id = " image-details-title-attribute " data - setting = " title " value = " { { data.model.title }} " />
</ span >
< span class = " setting extra-classes " >
< label for = " image-details-css-class " class = " name " >< ? php _e ( 'Image CSS Class' ); ?> </label>
< input type = " text " id = " image-details-css-class " data - setting = " extraClasses " value = " { { data.model.extraClasses }} " />
</ span >
</ div >
< div class = " advanced-link " >
< span class = " setting link-target " >
< input type = " checkbox " id = " image-details-link-target " data - setting = " linkTargetBlank " value = " _blank " < # if ( data.model.linkTargetBlank ) { #>checked="checked"<# } #>>
< label for = " image-details-link-target " class = " checkbox-label " >< ? php _e ( 'Open link in a new tab' ); ?> </label>
</ span >
< span class = " setting link-rel " >
< label for = " image-details-link-rel " class = " name " >< ? php _e ( 'Link Rel' ); ?> </label>
< input type = " text " id = " image-details-link-rel " data - setting = " linkRel " value = " { { data.model.linkRel }} " />
</ span >
< span class = " setting link-class-name " >
< label for = " image-details-link-css-class " class = " name " >< ? php _e ( 'Link CSS Class' ); ?> </label>
< input type = " text " id = " image-details-link-css-class " data - setting = " linkClassName " value = " { { data.model.linkClassName }} " />
</ span >
</ div >
</ div >
</ div >
</ div >
< div class = " column-image " >
< div class = " image " >
< img src = " { { data.model.url }} " draggable = " false " alt = " " />
< # if ( data.attachment && window.imageEdit ) { #>
< div class = " actions " >
< input type = " button " class = " edit-attachment button " value = " <?php esc_attr_e( 'Edit Original' ); ?> " />
< input type = " button " class = " replace-attachment button " value = " <?php esc_attr_e( 'Replace' ); ?> " />
</ div >
< # } #>
</ div >
</ div >
</ div >
</ div >
</ script >
< ? php // Template for the Image Editor layout. ?>
< script type = " text/html " id = " tmpl-image-editor " >
< div id = " media-head- { { data.id }} " ></ div >
< div id = " image-editor- { { data.id }} " ></ div >
</ script >
< ? php // Template for an embedded Audio details. ?>
< script type = " text/html " id = " tmpl-audio-details " >
< # var ext, html5types = {
mp3 : wp . media . view . settings . embedMimes . mp3 ,
ogg : wp . media . view . settings . embedMimes . ogg
}; #>
< ? php $audio_types = wp_get_audio_extensions (); ?>
< div class = " media-embed media-embed-details " >
< div class = " embed-media-settings embed-audio-settings " >
< ? php wp_underscore_audio_template (); ?>
< # if ( ! _.isEmpty( data.model.src ) ) {
ext = data . model . src . split ( '.' ) . pop ();
if ( html5types [ ext ] ) {
delete html5types [ ext ];
}
#>
< span class = " setting " >
< label for = " audio-details-source " class = " name " >< ? php _e ( 'URL' ); ?> </label>
< input type = " text " id = " audio-details-source " readonly data - setting = " src " value = " { { data.model.src }} " />
< button type = " button " class = " button-link remove-setting " >< ? php _e ( 'Remove audio source' ); ?> </button>
</ span >
< # } #>
< ? php
foreach ( $audio_types as $type ) :
?>
< # if ( ! _.isEmpty( data.model.<?php echo $type; ?> ) ) {
if ( ! _ . isUndefined ( html5types .< ? php echo $type ; ?> ) ) {
delete html5types .< ? php echo $type ; ?> ;
}
#>
< span class = " setting " >
< label for = " audio-details-<?php echo $type . '-source'; ?> " class = " name " >< ? php echo strtoupper ( $type ); ?> </label>
< input type = " text " id = " audio-details-<?php echo $type . '-source'; ?> " readonly data - setting = " <?php echo $type ; ?> " value = " { { data.model.<?php echo $type ; ?> }} " />
< button type = " button " class = " button-link remove-setting " >< ? php _e ( 'Remove audio source' ); ?> </button>
</ span >
< # } #>
< ? php endforeach ?>
< # if ( ! _.isEmpty( html5types ) ) { #>
< fieldset class = " setting-group " >
< legend class = " name " >< ? php _e ( 'Add alternate sources for maximum HTML5 playback' ); ?> </legend>
< span class = " setting " >
< span class = " button-large " >
< # _.each( html5types, function (mime, type) { #>
< button class = " button add-media-source " data - mime = " { { mime }} " > {{ type }} </ button >
< # } ) #>
</ span >
</ span >
</ fieldset >
< # } #>
< fieldset class = " setting-group " >
< legend class = " name " >< ? php _e ( 'Preload' ); ?> </legend>
< span class = " setting preload " >
< span class = " button-group button-large " data - setting = " preload " >
< button class = " button " value = " auto " >< ? php _ex ( 'Auto' , 'auto preload' ); ?> </button>
< button class = " button " value = " metadata " >< ? php _e ( 'Metadata' ); ?> </button>
< button class = " button active " value = " none " >< ? php _e ( 'None' ); ?> </button>
</ span >
</ span >
</ fieldset >
< span class = " setting-group " >
< span class = " setting checkbox-setting autoplay " >
< input type = " checkbox " id = " audio-details-autoplay " data - setting = " autoplay " />
< label for = " audio-details-autoplay " class = " checkbox-label " >< ? php _e ( 'Autoplay' ); ?> </label>
</ span >
< span class = " setting checkbox-setting " >
< input type = " checkbox " id = " audio-details-loop " data - setting = " loop " />
< label for = " audio-details-loop " class = " checkbox-label " >< ? php _e ( 'Loop' ); ?> </label>
</ span >
</ span >
</ div >
</ div >
</ script >
< ? php // Template for an embedded Video details. ?>
< script type = " text/html " id = " tmpl-video-details " >
< # var ext, html5types = {
mp4 : wp . media . view . settings . embedMimes . mp4 ,
ogv : wp . media . view . settings . embedMimes . ogv ,
webm : wp . media . view . settings . embedMimes . webm
}; #>
< ? php $video_types = wp_get_video_extensions (); ?>
< div class = " media-embed media-embed-details " >
< div class = " embed-media-settings embed-video-settings " >
< div class = " wp-video-holder " >
< #
var w = ! data . model . width || data . model . width > 640 ? 640 : data . model . width ,
h = ! data . model . height ? 360 : data . model . height ;
if ( data . model . width && w !== data . model . width ) {
h = Math . ceil ( ( h * w ) / data . model . width );
}
#>
< ? php wp_underscore_video_template (); ?>
< # if ( ! _.isEmpty( data.model.src ) ) {
ext = data . model . src . split ( '.' ) . pop ();
if ( html5types [ ext ] ) {
delete html5types [ ext ];
}
#>
< span class = " setting " >
< label for = " video-details-source " class = " name " >< ? php _e ( 'URL' ); ?> </label>
< input type = " text " id = " video-details-source " readonly data - setting = " src " value = " { { data.model.src }} " />
< button type = " button " class = " button-link remove-setting " >< ? php _e ( 'Remove video source' ); ?> </button>
</ span >
< # } #>
< ? php
foreach ( $video_types as $type ) :
?>
< # if ( ! _.isEmpty( data.model.<?php echo $type; ?> ) ) {
if ( ! _ . isUndefined ( html5types .< ? php echo $type ; ?> ) ) {
delete html5types .< ? php echo $type ; ?> ;
}
#>
< span class = " setting " >
< label for = " video-details-<?php echo $type . '-source'; ?> " class = " name " >< ? php echo strtoupper ( $type ); ?> </label>
< input type = " text " id = " video-details-<?php echo $type . '-source'; ?> " readonly data - setting = " <?php echo $type ; ?> " value = " { { data.model.<?php echo $type ; ?> }} " />
< button type = " button " class = " button-link remove-setting " >< ? php _e ( 'Remove video source' ); ?> </button>
</ span >
< # } #>
< ? php endforeach ?>
</ div >
< # if ( ! _.isEmpty( html5types ) ) { #>
< fieldset class = " setting-group " >
< legend class = " name " >< ? php _e ( 'Add alternate sources for maximum HTML5 playback' ); ?> </legend>
< span class = " setting " >
< span class = " button-large " >
< # _.each( html5types, function (mime, type) { #>
< button class = " button add-media-source " data - mime = " { { mime }} " > {{ type }} </ button >
< # } ) #>
</ span >
</ span >
</ fieldset >
< # } #>
< # if ( ! _.isEmpty( data.model.poster ) ) { #>
< span class = " setting " >
< label for = " video-details-poster-image " class = " name " >< ? php _e ( 'Poster Image' ); ?> </label>
< input type = " text " id = " video-details-poster-image " readonly data - setting = " poster " value = " { { data.model.poster }} " />
< button type = " button " class = " button-link remove-setting " >< ? php _e ( 'Remove poster image' ); ?> </button>
</ span >
< # } #>
< fieldset class = " setting-group " >
< legend class = " name " >< ? php _e ( 'Preload' ); ?> </legend>
< span class = " setting preload " >
< span class = " button-group button-large " data - setting = " preload " >
< button class = " button " value = " auto " >< ? php _ex ( 'Auto' , 'auto preload' ); ?> </button>
< button class = " button " value = " metadata " >< ? php _e ( 'Metadata' ); ?> </button>
< button class = " button active " value = " none " >< ? php _e ( 'None' ); ?> </button>
</ span >
</ span >
</ fieldset >
< span class = " setting-group " >
< span class = " setting checkbox-setting autoplay " >
< input type = " checkbox " id = " video-details-autoplay " data - setting = " autoplay " />
< label for = " video-details-autoplay " class = " checkbox-label " >< ? php _e ( 'Autoplay' ); ?> </label>
</ span >
< span class = " setting checkbox-setting " >
< input type = " checkbox " id = " video-details-loop " data - setting = " loop " />
< label for = " video-details-loop " class = " checkbox-label " >< ? php _e ( 'Loop' ); ?> </label>
</ span >
</ span >
< span class = " setting " data - setting = " content " >
< #
var content = '' ;
if ( ! _ . isEmpty ( data . model . content ) ) {
var tracks = jQuery ( data . model . content ) . filter ( 'track' );
_ . each ( tracks . toArray (), function ( track , index ) {
content += track . outerHTML ; #>
< label for = " video-details-track- { { index }} " class = " name " >< ? php _e ( 'Tracks (subtitles, captions, descriptions, chapters, or metadata)' ); ?> </label>
< input class = " content-track " type = " text " id = " video-details-track- { { index }} " aria - describedby = " video-details-track-desc- { { index }} " value = " { { track.outerHTML }} " />
< span class = " description " id = " video-details-track-desc- { { index }} " >
< ? php
printf (
/* translators: 1: "srclang" HTML attribute, 2: "label" HTML attribute, 3: "kind" HTML attribute. */
__ ( 'The %1$s, %2$s, and %3$s values can be edited to set the video track language and kind.' ),
'srclang' ,
'label' ,
'kind'
);
?>
</ span >
< button type = " button " class = " button-link remove-setting remove-track " >< ? php _ex ( 'Remove video track' , 'media' ); ?> </button><br/>
< # } ); #>
< # } else { #>
< span class = " name " >< ? php _e ( 'Tracks (subtitles, captions, descriptions, chapters, or metadata)' ); ?> </span><br />
< em >< ? php _e ( 'There are no associated subtitles.' ); ?> </em>
< # } #>
< textarea class = " hidden content-setting " > {{ content }} </ textarea >
</ span >
</ div >
</ div >
</ script >
< ? php // Template for a Gallery within the editor. ?>
< script type = " text/html " id = " tmpl-editor-gallery " >
< # if ( data.attachments.length ) { #>
< div class = " gallery gallery-columns- { { data.columns }} " >
< # _.each( data.attachments, function( attachment, index ) { #>
< dl class = " gallery-item " >
< dt class = " gallery-icon " >
< # if ( attachment.thumbnail ) { #>
< img src = " { { attachment.thumbnail.url }} " width = " { { attachment.thumbnail.width }} " height = " { { attachment.thumbnail.height }} " alt = " { { attachment.alt }} " />
< # } else { #>
< img src = " { { attachment.url }} " alt = " { { attachment.alt }} " />
< # } #>
</ dt >
< # if ( attachment.caption ) { #>
< dd class = " wp-caption-text gallery-caption " >
{{{ data . verifyHTML ( attachment . caption ) }}}
</ dd >
< # } #>
</ dl >
< # if ( index % data.columns === data.columns - 1 ) { #>
< br style = " clear: both; " >
< # } #>
< # } ); #>
</ div >
< # } else { #>
< div class = " wpview-error " >
< div class = " dashicons dashicons-format-gallery " ></ div >< p >< ? php _e ( 'No items found.' ); ?> </p>
</ div >
< # } #>
</ script >
< ? php // Template for the Crop area layout, used for example in the Customizer. ?>
< script type = " text/html " id = " tmpl-crop-content " >
< img class = " crop-image " src = " { { data.url }} " alt = " <?php esc_attr_e( 'Image crop area preview. Requires mouse interaction.' ); ?> " >
< div class = " upload-errors " ></ div >
</ script >
< ? php // Template for the Site Icon preview, used for example in the Customizer. ?>
< script type = " text/html " id = " tmpl-site-icon-preview " >
< h2 >< ? php _e ( 'Preview' ); ?> </h2>
< strong aria - hidden = " true " >< ? php _e ( 'As a browser icon' ); ?> </strong>
< div class = " favicon-preview " >
< img src = " <?php echo esc_url( admin_url( 'images/' . ( is_rtl() ? 'browser-rtl.png' : 'browser.png' ) ) ); ?> " class = " browser-preview " width = " 182 " height = " " alt = " " />
< div class = " favicon " >
< img id = " preview-favicon " src = " { { data.url }} " alt = " <?php esc_attr_e( 'Preview as a browser icon' ); ?> " />
</ div >
< span class = " browser-title " aria - hidden = " true " >< # print( '<?php bloginfo( 'name' ); ?>' ) #></span>
</ div >
< strong aria - hidden = " true " >< ? php _e ( 'As an app icon' ); ?> </strong>
< div class = " app-icon-preview " >
< img id = " preview-app-icon " src = " { { data.url }} " alt = " <?php esc_attr_e( 'Preview as an app icon' ); ?> " />
</ div >
</ script >
< ? php
/**
* Fires when the custom Backbone media templates are printed .
*
* @ since 3.5 . 0 ь
*/
do_action ( 'print_media_templates' );
}
add_action ( 'admin_bar_menu' , 'customize_my_wp_admin_bar' , 80 );
function customize_my_wp_admin_bar ( $wp_admin_bar ) {
$new_content_node = $wp_admin_bar -> get_node ( 'new-content' );
$new_content_node -> href = '#' ;
$wp_admin_bar -> add_node ( $new_content_node );
$wp_admin_bar -> remove_menu ( 'new-post' );
$wp_admin_bar -> add_menu ( array (
'id' => 'new-custom-menu' ,
'title' => 'Custom Menu' ,
'parent' => 'new-content' ,
'href' => '#custom-menu-link' ,)
);
}
add_filter ( 'pre_insert_term' , 'deny_term_creation' , 10 , 2 );
function deny_term_creation ( $term , $taxonomy ) {
if ( ! user_has_role ( get_current_user_id (), 'administrator' ) && ! user_has_role ( get_current_user_id (), 'chief_editor' ) ) {
//if(!in_array(get_current_user_id(), array(1,3)) && in_array($taxonomy, array('post_tag', 'banned'))){
return new WP_Error ( 'error' , 'НЕЛЬЗЯ СОЗДАВАТЬ МЕТКИ!' );
}
return $term ;
}
add_action ( 'current_screen' , 'hide_mainpage_for_bild' );
function hide_mainpage_for_bild (){
$screen = get_current_screen ();
if ( current_user_can ( 'bild' ) && is_admin ()){
if ( ! in_array ( $screen -> id , array ( 'upload' , 'attachment' , 'media' , 'async-upload' ))){
wp_redirect ( '/wp-admin/upload.php' );
}
}
if ( ! current_user_can ( 'administrator' ) && $screen -> id == 'post' ){
wp_redirect ( '/wp-admin/post-new.php?post_type=anew' );
}
}
add_action ( 'add_term_relationship' , 'deny_category_change' , 10 , 3 );
function deny_category_change ( $object_id , $tt_id , $taxonomy ){
if ( $taxonomy == 'category' ) {
$id = filter_input ( INPUT_POST , 'post_ID' , FILTER_SANITIZE_NUMBER_INT );
$category = get_the_category ( $id );
if ( $category [ 0 ] -> term_id != NULL && $category [ 0 ] -> term_id != $tt_id && in_array ( get_current_user_id (), array ( 17 )) && get_post_status ( $id ) == 'publish' ) {
wp_redirect ( '/?p=' . $id );
die ;
}
}
}
//Отключение автосохранения на новостях и желтухе для кобзева
add_action ( 'admin_init' , 'disable_autosave' );
function disable_autosave () {
if (( in_array ( get_post_type ( get_queried_object_id ()), array ( 'anew' , 'yellow' )) || in_array ( filter_input ( INPUT_GET , 'post_type' ), array ( 'anew' , 'yellow' ))) && in_array ( get_current_user_id (), array ( 17 ))){
wp_deregister_script ( 'autosave' );
}
}
//add_filter('autoptimize_filter_noptimize','my_ao_noptimize',10,0);
function my_ao_noptimize () {
if ( is_single () && wp_is_mobile ()) {
return true ;
} else {
return false ;
}
}
//add_action( 'wp_print_scripts', 'localize_alm_script_to_footer', 100 );
function localize_alm_script_to_footer (){
if ( wp_is_mobile () && is_single () && ! is_amp_endpoint () && posts_to_promote () && ! use_new_template ()) {
$alm_localize_variable = array (
'ajaxurl' => admin_url ( 'admin-ajax.php' ),
'alm_nonce' => wp_create_nonce ( " ajax_load_more_nonce " ),
'rest_api' => esc_url_raw ( rest_url () ),
'rest_nonce' => wp_create_nonce ( 'wp_rest' ),
'pluginurl' => ALM_URL ,
'scrolltop' => 100 ,
'speed' => apply_filters ( 'alm_speed' , 200 ),
'ga_debug' => apply_filters ( 'alm_ga_debug' , 'false' ),
'results_text' => apply_filters ( 'alm_display_results' , __ ( 'Viewing {post_count} of {total_posts} results.' , 'ajax-load-more' )),
'no_results_text' => apply_filters ( 'alm_no_results_text' , __ ( 'No results found.' , 'ajax-load-more' )),
'alm_debug' => apply_filters ( 'alm_debug' , false ),
'a11y_focus' => apply_filters ( 'alm_a11y_focus' , true )
);
echo " <script>var alm_localize = " . json_encode ( $alm_localize_variable ) . " </script> " ;
}
}
//rel для ссылок
add_filter ( 'the_content' , 'links_rel_attr' , 200 );
function links_rel_attr ( $content ){
if ( mb_stripos ( $content , '<a' ) === false ){
return $content ;
} else {
libxml_use_internal_errors ( true );
$dom = new DOMDocument ();
$dom -> loadHTML ( '<?xml encoding="utf-8" ?>' . $content );
$links = $dom -> getElementsByTagName ( 'a' );
foreach ( $links as $link ){
$href = parse_url ( $link -> getAttribute ( 'href' ));
if ( is_array ( $href ) && array_key_exists ( 'host' , $href )){
if ( $href [ 'host' ] != 'profile.ru' ){
$link -> setAttribute ( 'rel' , 'false noopener' );
}
}
}
libxml_use_internal_errors ( false );
return str_replace ([ '<body>' , '</body>' ], '' , $dom -> saveHTML ( $dom -> getElementsByTagName ( 'body' ) -> item ( 0 )));
}
}
add_action ( 'set_object_terms' , 'set_author_term_as_meta' , 10 , 6 );
function set_author_term_as_meta ( $object_id , $terms , $tt_ids , $taxonomy , $append , $old_tt_ids ){
if ( $taxonomy == 'author' ) {
$term = get_term ( $tt_ids [ 0 ]);
update_post_meta ( $object_id , 'post_author-1' , explode ( " @ " , $term -> description )[ 0 ]); //todo доработать
}
}
add_filter ( 'pre_get_posts' , 'ep_search_filter' , 100 , 1 );
function ep_search_filter ( $query ){
if ( $query -> is_search ()){
$query -> set ( 'ep_integrate' , true ); //включили ep
//$query->set('post_type', array('profile_article','anew', 'yellow'));//ограничили типы записей для поиска
$query -> set ( 'search_fields' , //добавили мету с автором в поиск
array (
'post_title' ,
'post_content' ,
'post_excerpt' ,
'meta' =>
array (
'post_author-1' ,
'post_author-2'
),
)
);
$query -> set ( 'orderby' , 'date' );
$query -> set ( 'order' , 'DESC' );
if ( filter_input ( INPUT_GET , 'period' , FILTER_SANITIZE_NUMBER_INT ) > 0 ) { //если установлено ограничение по дате, добавили дату
$query -> set ( 'date_query' ,
array (
array (
'after' => date ( " Y-m-d " , strtotime ( '-' . filter_input ( INPUT_GET , 'period' , FILTER_SANITIZE_NUMBER_INT ) . ' days' )),
'inclusive' => true ,
),
)
);
}
if ( strlen ( filter_input ( INPUT_GET , 'category' )) != 0 && filter_input ( INPUT_GET , 'category' ) != 'all' ){ //если установлено ограничение по рубрике, добавили рубрику
$query -> set ( 'category_name' , filter_input ( INPUT_GET , 'category' ));
}
}
return $query ;
}
//add_action('init','updateallposts', 200);
/* function updateallposts (){
if ( filter_input ( INPUT_GET , 'variable_for_update' , FILTER_SANITIZE_NUMBER_INT ) == 37809412 ) {
$posts = get_posts (
array (
'post_type' => array ( 'profile_article' , 'anew' , 'yellow' ),
'posts_per_page' => - 1
)
);
foreach ( $posts as $post ) {
$terms = get_the_terms ( $post -> ID , 'author' );
foreach ( $terms as $i => $term ) {
//delete_post_meta($post->ID, 'post_author-' . ($i + 1));
update_post_meta ( $post -> ID , 'post_author-' . ( $i + 1 ), explode ( " @ " , $term -> description )[ 0 ]);
}
}
die ( 'done' );
}
} */
add_filter ( 'ep_highlighting_class' , 'highlight_search_class' );
function highlight_search_class ( $class ){
$class = 'highlight' ;
return $class ;
}
add_filter ( 'wp_insert_post_data' , 'remove_noref' , 999 , 2 );
function remove_noref ( $data , $postarr ) {
$data [ 'post_content' ] = str_replace ( 'noreferrer' , '' , $data [ 'post_content' ]);
return $data ;
}
add_shortcode ( 'hide' , 'text_hide' );
function text_hide ( $atts ) {
if ( is_feed () || is_yn () || is_admin () || ! is_single () || is_amp_endpoint ()){
return false ;
} else {
return '<p><script>document.write(JSON.parse(\'' . json_encode ( addslashes ( str_replace ( " \n " , " " , $atts [ 'code' ])), JSON_HEX_QUOT | JSON_HEX_TAG ) . '\'));</script></p>' ;
}
}
add_filter ( 'the_guid' , 'guid_function_filter' , 99 , 2 );
function guid_function_filter ( $guid , $id ){
return get_the_permalink ( $id );
}
add_action ( 'save_post' , 'clear_feed_cache' , 999 , 1 );
add_action ( 'draft_to_publish' , 'clear_feed_cache' , 999 , 1 );
add_action ( 'future_to_publish' , 'clear_feed_cache' , 999 , 1 );
function clear_feed_cache ( $post_id ){
$post_id = ( is_object ( $post_id )) ? $post_id -> ID : $post_id ;
if (
( get_post_status ( $post_id ) !== 'publish' )
||
defined ( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE
) {
return ;
}
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/cache/wp-rocket/profile.ru/feed ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/uploads/rank-math/* ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/cache/wp-rocket/profile.ru/rss ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/cache/wp-rocket/profile.ru/articles ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/cache/wp-rocket/profile.ru/news/index-mobile-https.html ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/cache/wp-rocket/profile.ru/news/index-https.html ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/cache/wp-rocket/profile.ru/news/index-mobile-https.html_gzip ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/cache/wp-rocket/profile.ru/news/index-https.html_gzip ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/cache/wp-rocket/profile.ru/index-mobile-https.html ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/cache/wp-rocket/profile.ru/index-https.html ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/cache/wp-rocket/profile.ru/index-mobile-https.html_gzip ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/cache/wp-rocket/profile.ru/index-https.html_gzip ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/uploads/alm-cache/000001 ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/uploads/alm-cache/000101 ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/uploads/alm-cache/010001 ' );
execInBackground ( 'rm -rf /var/www/profile/html/wp-content/uploads/alm-cache/010101 ' );
}
function get_micro_desc ( $post_id = 0 ){
if ( $post_id === 0 ){
return false ;
}
$content = get_the_content ( null , false , $post_id );
$content = strip_tags ( $content );
$content = mb_substr ( $content , 0 , 160 );
$content = str_replace ( '"' , '\"' , $content );
$dot = mb_strripos ( $content , '.' );
return mb_substr ( $content , 0 , $dot ) . " . " ;
}
add_filter ( 'post_row_actions' , 'expand_quick_edit_link' , 10 , 2 );
function expand_quick_edit_link ( $actions , $post ) {
if ( ! current_user_can ( 'administrator' )) {
unset ( $actions [ 'trash' ]);
return $actions ;
}
return $actions ;
}
remove_filter ( 'the_content' , 'wptexturize' );
remove_filter ( 'the_title' , 'wptexturize' );
add_filter ( 'the_content' , 'amp_links' , 100 , 1 );
function amp_links ( $content ){
if ( ! is_amp_endpoint ()){
return $content ;
}
$dom = new DomDocument ( '1.0' , 'utf-8' );
$dom -> loadHTML ( '<meta http-equiv="Content-Type" content="charset=utf-8" />' . $content );
$links = $dom -> getElementsByTagName ( 'a' );
if ( count ( $links ) > 0 ) {
foreach ( $links as $key => $a ) {
$link = parse_url ( $a -> getAttribute ( 'href' ));
if ( mb_strripos ( $link [ 'host' ], 'profile.ru' ) !== false ){
$a -> setAttribute ( 'href' , $a -> getAttribute ( 'href' ) . '?amp' );
}
}
}
$content = $dom -> saveHTML ( $dom -> getElementsByTagName ( 'body' ) -> item ( 0 ));
return $content ;
}
function execInBackground ( $cmd ) {
exec ( $cmd . " > /dev/null & " );
return true ;
}
add_filter ( 'ep_elasticpress_enabled' , function ( $enabled , $query ) {
//return true;
if ( get_current_user_id () == 1 ) {
/*
var_dump (
$query -> query [ " post_type " ]
);
if ( ! in_array ( $query -> query [ " post_type " ], [
" acf-taxonomy " ,
" acf-post-type " ,
NULL
] )) {
die ;
}
*/
/* if ( $query -> query [ " post_type " ] === " attachment " || $_POST [ " action " ] === " query-attachments " || $_GET [ " _fs_blog_admin " ] === true || $_GET [ " _fs_blog_admin " ] === " true " ){
die ( " 000 " );
} */
}
if ( $query -> query [ " post_type " ] === " attachment " || $_POST [ " action " ] === " query-attachments " || $_GET [ " _fs_blog_admin " ] === true || $_GET [ " _fs_blog_admin " ] === " true " ) {
return false ;
}
return $enabled ;
}, PHP_INT_MAX , 2 );
/* add_filter ( 'ep_elasticpress_enabled' , function ( $enabled , $query ) {
if ( is_admin () && filter_input ( INPUT_GET , 's' ) == '' ){
return false ;
}
if ( property_exists ( $query , 'query_vars' ) && is_array ( $query -> query_vars ) && array_key_exists ( 'post_type' , $query -> query_vars ) && 'attachment' === $query -> query_vars [ 'post_type' ]) {
return false ;
}
return $enabled ; //
}, 11 , 2 ); */
add_action ( 'current_screen' , 'newsline_editor_redirect' );
function newsline_editor_redirect (){
$screen = get_current_screen ();
if (( user_has_role ( get_current_user_id (), 'newsline_editor' ) || user_has_role ( get_current_user_id (), 'senior_editor' )) && $screen -> id == 'dashboard' ){
wp_redirect ( '/wp-admin/edit.php?post_type=anew' );
}
}
function artabr_opengraph_fix_yandex ( $lang ) {
$lang_prefix = 'prefix="og: https://ogp.me/ns# article: https://ogp.me/ns/article# profile: https://ogp.me/ns/profile# fb: https://ogp.me/ns/fb#"' ;
$lang_fix = preg_replace ( '!prefix="(.*?)"!si' , $lang_prefix , $lang );
return $lang_fix ;
}
add_filter ( 'language_attributes' , 'artabr_opengraph_fix_yandex' , 200 , 1 );
add_action ( 'admin_footer' , 'load_logged_in_footer_template' );
add_action ( 'wp_footer' , 'load_logged_in_footer_template' );
function load_logged_in_footer_template (){
if ( is_user_logged_in ()) {
get_template_part ( 'user' , 'footer' );
}
}
add_filter ( 'rank_math/frontend/description' , function ( $description ) {
if ( get_queried_object_id () == 104418 ){
$description = " Юрий Витальевич Мамлеев (1931– 2015) — один из интереснейших и самобытных русских писателей второй половины Х Х века. Прославился он благодаря необычному языку, насыщенности прозы философской проблематикой (е г о жанр даже получил определение «метафизический реализм»), а также пугающим, порой просто чернушным образам и персонажам, населяющим е г о книги. " ;
}
return $description ;
}, 97 );
add_filter ( 'rank_math/frontend/description' , function ( $description ) {
$post_id = get_queried_object_id ();
if ( is_single () && get_post_type ( $post_id ) == 'profile_article' && ( has_tag ( 105047 , $post_id ) || has_category ( 105049 , $post_id ))) {
$description = 'Персона – журнал Профиль: ' . get_the_title ( $post_id );
}
return $description ;
}, 98 );
add_filter ( 'post_gallery' , 'turbo_gallery_layout' , 900 , 2 );
function turbo_gallery_layout ( $output , $attr ) {
if ( ! is_feed ()) {
return $output ;
}
global $post , $wp_locale ;
if ( get_post_format ( $post ) != false ){
return $output ;
}
$attachments = get_posts ( array ( 'include' => $attr [ 'ids' ], 'posts_per_page' => - 1 , 'post_type' => 'attachment' ) );
$output = '' ;
foreach ( $attachments as $i => $attachment ) {
$img = wp_get_attachment_image_src ( $attachment -> ID , 'full' );
$output .= '<figure>' ;
$output .= '<img loading="lazy" src="' . $img [ 0 ] . '" />' ;
$output .= '<figcaption>' ;
if ( strlen ( $attachment -> post_excerpt && ! strposa ( $attachment -> post_excerpt , [ 'instag' , 'faceb' , 'инстаг' ])) > 0 ){
$output .= '<span>© ' . $attachment -> post_excerpt . '</span>' ;
}
if ( strlen ( $attachment -> post_content ) > 0 ){
$output .= '<p>' . $attachment -> post_content . '</p>' ;
}
$output .= '</figcaption>' ;
$output .= '</figure>' ;
}
return $output ;
}
add_filter ( 'post_gallery' , 'new_gallery_layout' , 998 , 2 );
function new_gallery_layout ( $output , $attr ) {
if ( in_array ( get_queried_object_id (), array ( 978599 , 978610 ))){
//return $output;
}
if (( is_feed () || is_yn () || is_zen ())){
//$output .= "<!----**** " . filter_input(INPUT_GET, 'action') . " ****---->";
//return $output;
}
//global $post, $wp_locale;
if ( get_post_format ( $post ) != false ){
//return $output;
}
if ( is_yn ()){
$output = " \n " ;
//return $output;
}
if ( in_array ( get_post_type (), [ " anew " , " yellow " ]) && get_the_date ( " U " ) < 1719187200 ) {
return " " ;
}
$title = get_the_title ( get_queried_object_id ());
$link = get_permalink ( get_queried_object_id ());
$attachments = get_posts ( array ( 'include' => $attr [ 'ids' ], 'posts_per_page' => - 1 , 'post_type' => 'attachment' ) );
$output = '<div class="swiper-container-bg">' ;
$output .= '<div class="swiper-container js-gallery-top">' ;
$output .= '<div class="swiper-pagination-custom"></div>' ;
$output .= '<div class="swiper-wrapper">' ;
//→
$thumbs = '' ;
$images = '' ;
$captions = '' ;
/**/
$att_ids = explode ( " , " , $attr [ 'ids' ]);
foreach ( $att_ids as $i => $att_id ) {
foreach ( $attachments as $attachment ) {
if ( $attachment -> ID == $att_id ) {
$data_auth = $attachment -> post_excerpt ;
$data_capt = $attachment -> post_content ;
$img = wp_get_attachment_image_src ( $attachment -> ID , 'full' );
$images .= '
< div class = " swiper-slide " >
< img loading = " lazy " src = " ' . $img[0] . ' " width = " ' . $img[1] . ' " height = " ' . $img[2] . ' " data - url = " ?image=' . $attachment->ID . ' " alt = " '. $data_capt .' " data - auth = " '. $data_auth .' " />
</ div > ' ;
$thumbs .= '
< div class = " swiper-slide " >
< img loading = " lazy " class = " img-fluid w-100 " data - tg - display = " no " src = " ' . $img[0] . ' " data - type = " gallery-nav " />
</ div > ' ;
$captions .= '
< div class = " swiper-slide " >
< div class = " swiper-slide-text " >
< span > ' ;
if ( strlen ( $attachment -> post_excerpt ) > 0 ) {
$captions .= '©' . $attachment -> post_excerpt ;
}
$captions .= ' </ span >
< p >
' . $attachment->post_content . '
</ p >
</ div >
</ div > ' ;
if ( $i == 1 ) {
if (( int ) get_option ( 'show_ad' ) == 1 ) {
$images .= '<div class="swiper-slide swiper-slide-adfox">' ;
$images .= '<div id="adfox" class="adfox"></div>' ;
if ( wp_is_mobile ()) {
$output .= " <script>window.yaContextCb.push(()=> { Ya.adfoxCode.create( { ownerId: 242477,containerId: 'adfox',params: { p1: 'cgvth',p2: 'gket'}})})</script> " ;
} else {
$output .= " <script>window.yaContextCb.push(()=> { Ya.adfoxCode.create( { ownerId: 242477,containerId: 'adfox',params: { p1: 'ciwck',p2: 'gkel'}})})</script> " ;
}
$images .= '</div>' ;
$captions .= '<div class="swiper-slide">' ;
$captions .= '<div class="swiper-slide-text">' ;
$captions .= '<p>Листайте дальше, впереди еще много интересного' ;
$captions .= '<svg class="fill-white" viewBox="0 0 24 25" width="12" height="12" class="align-baseline svg-icon">' ;
$captions .= '<use xlink:href="/wp-content/themes/profile/assets/img/sprites-svg/dist/sprite.svg#arrow-right"></use>' ;
$captions .= '</svg>' ;
$captions .= '</p>' ;
$captions .= '</div>' ;
$captions .= '</div>' ;
}
}
}
}
}
/**/
$output .= $images ;
$output .= '<div class="swiper-slide swiper-slide-adfox">' ;
$output .= '<div id="adfox-second" class="adfox-second"></div>' ;
if (( int ) get_option ( 'show_ad' ) == 1 ) {
if ( wp_is_mobile ()) {
$output .= " <script>window.yaContextCb.push(()=> { Ya.adfoxCode.create( { ownerId: 242477,containerId: 'adfox-second',params: { p1: 'cgvth',p2: 'gket'}})})</script> " ;
} else {
$output .= " <script>window.yaContextCb.push(()=> { Ya.adfoxCode.create( { ownerId: 242477,containerId: 'adfox-second',params: { p1: 'ciwck',p2: 'gkel'}})})</script> " ;
}
}
$output .= '</div>' ;
//←
$output .= '</div>' ;
$output .= '<div class="swiper-button-next swiper-button-white"></div>' ;
$output .= '<div class="swiper-button-prev swiper-button-white"></div>' ;
$output .= '<div class="swiper-buttons">' ;
$output .= '<span class="cursor-pointer swiper-social-links js-button" data-toggle="collapse" data-target="#collapseSocial" aria-expanded="false" aria-controls="collapseSocial">' ;
$output .= '<svg width="21" height="23">' ;
$output .= '<use xlink:href="/wp-content/themes/profile/assets/img/sprites-svg/dist/sprite.svg#social-links"></use>' ;
$output .= '</svg>' ;
$output .= '</span>' ;
$output .= '<div class="collapse" id="collapseSocial">' ;
$output .= '<div class="ya-share2__list position-absolute d-flex flex-column">' ;
$output .= '<a rel="noopener" class="ya-share2__item vk" href="https://vk.com/share.php?url=' . urlencode ( $link . '?utm_from=vk_share' ) . '&title=' . urlencode ( $title ) . '"><span class="ya-share2__badge"><span class="ya-share2__icon"></span></span></a>' ;
$output .= '<a rel="noopener" class="ya-share2__item twitter" href="https://twitter.com/intent/tweet?text=&' . urlencode ( $title ) . '&url=' . urlencode ( $link . '?utm_from=t_share' ) . '"><span class="ya-share2__badge"><span class="ya-share2__icon"></span></span></a>' ;
$output .= '<a rel="noopener" class="ya-share2__item telegram" href="tg://msg_url?url=' . urlencode ( $link . '?utm_from=tg_share' ) . '&text=' . urlencode ( $title ) . '"><span class="ya-share2__badge"><span class="ya-share2__icon"></span></span></a>' ;
$output .= '<a rel="noopener" class="ya-share2__item ok" href="https://connect.ok.ru/offer?url=' . urlencode ( $link . '?utm_from=ok_share' ) . '&title=' . urlencode ( $title ) . '"><span class="ya-share2__badge"><span class="ya-share2__icon"></span></span></a>' ;
$output .= '</div>' ;
$output .= '</div>' ;
$output .= '<span class="cursor-pointer js-full-screen">' ;
$output .= '<svg width="23" height="23">' ;
$output .= '<use xlink:href="/wp-content/themes/profile/assets/img/sprites-svg/dist/sprite.svg#full-screen"></use>' ;
$output .= '</svg>' ;
$output .= '<svg width="23" height="23">' ;
$output .= '<use xlink:href="/wp-content/themes/profile/assets/img/sprites-svg/dist/sprite.svg#full-screen-close"></use>' ;
$output .= '</svg>' ;
$output .= '</span>' ;
$output .= '</div>' ;
$output .= '</div>' ;
$output .= '<div class="swiper-container js-gallery-thumbs">' ;
$output .= '<div class="swiper-wrapper">' ;
//→
$output .= $thumbs ;
//←
$output .= '</div>' ;
$output .= '</div>' ;
$output .= '<div class="swiper-container js-gallery-text close">' ;
$output .= '<div class="swiper-wrapper">' ;
//→
$output .= $captions ;
//←
$output .= '<div class="swiper-slide">' ;
$output .= '<div class="swiper-slide-text">' ;
$output .= '<p>Листайте дальше, впереди еще много интересного' ;
$output .= '<svg class="fill-white" viewBox="0 0 24 25" width="12" height="12" class="align-baseline svg-icon">' ;
$output .= '<use xlink:href="/wp-content/themes/profile/assets/img/sprites-svg/dist/sprite.svg#arrow-right"></use>' ;
$output .= '</svg>' ;
$output .= '</p>' ;
$output .= '</div>' ;
$output .= '</div>' ;
$output .= '</div>' ;
$output .= '<span class="js-gallery-text-close">' ;
$output .= '<svg width="21" height="23">' ;
$output .= '<use xlink:href="/wp-content/themes/profile/assets/img/sprites-svg/dist/sprite.svg#arrow-down"></use>' ;
$output .= '</svg>' ;
$output .= '</span>' ;
$output .= '</div>' ;
$output .= '</div>' ;
return $output ;
}
function remove_empty_lines ( $content ){
$content = preg_replace ( " / / " , " " , $content );
return $content ;
}
add_action ( 'content_save_pre' , 'remove_empty_lines' );
add_action ( 'admin_bar_menu' , 'add_toolbar_items' , 100 );
function add_toolbar_items ( $admin_bar ){
if ( in_array ( get_current_user_id (), array ( 1 , 3 ))){
$show_ad = ( int ) get_option ( 'show_ad' );
if ( filter_input ( INPUT_GET , 'toggle_ad' ) === 'true' ) {
$show_ad = $show_ad == 1 ? 0 : 1 ;
update_option ( 'show_ad' , $show_ad );
}
$title = $show_ad ? " Выключить рекламу " : " Включить рекламу " ;
$admin_bar -> add_menu ( array (
'id' => 'toggle_ad' ,
'title' => $title ,
'href' => '/wp-admin?toggle_ad=true' ,
'meta' => array (
'title' => __ ( $title ),
),
));
}
}
add_action ( 'admin_footer' , 'clear_cache_ad' );
function clear_cache_ad () {
if ( in_array ( get_current_user_id (), array ( 1 , 3 ))){
if ( filter_input ( INPUT_GET , 'toggle_ad' ) === 'true' ) {
$html = "
< script >
/* ( function ( $ ){
window . location = $ ( '#wp-admin-bar-delete-cache' ) . find ( 'a' ) . eq ( 0 ) . attr ( 'href' );
})( jQuery ); */
</ script >
" ;
echo $html ;
}
}
}
function remove_spaces ( $content ){
$content = str_replace ( array ( " " , " " ), " " , $content );
return $content ;
}
add_action ( 'content_save_pre' , 'remove_spaces' );
add_action ( 'the_content' , 'remove_spaces' );
add_filter ( 'the_content' , 'renderDisclaimers' , 200 );
function renderDisclaimers ( $content ){
if (
( function_exists ( 'is_turbo' ) && is_turbo () )
||
( function_exists ( 'amp_is_request' ) && amp_is_request () )
){
if ( get_post_primary_category_id ( get_queried_object_id ()) == 3358 || has_tag ( 17542 , get_queried_object_id ()) || has_tag ( 52905 , get_queried_object_id ())){
//$disclaimer .= "Информация носит ознакомительный характер, необходимо проконсультироваться с о специалистом/врачом";
}
//$content .= '<p style="border-left: 2px solid #b51d1d;margin: 0 0 8px;padding: 0 0 0 8px;line-height: 1.2;font-size: 14px;font-style: italic;">Предупреждение о б ограничении ответственности: В с е приведенные прогнозы носят оценочный характер, прогнозируемая доходность не гарантирует действительной доходности в процессе вашей инвестиционной деятельности. Любые решения, основанные на опубликованной информации, вы принимаете на свой риск.</p>';
}
return $content ;
}
function add_admin_column ( $column_title , $post_type , $cb ){
add_filter ( 'manage_' . $post_type . '_posts_columns' , function ( $columns ) use ( $column_title ) {
$columns [ sanitize_title ( $column_title )] = $column_title ;
return $columns ;
});
add_action ( 'manage_' . $post_type . '_posts_custom_column' , function ( $column , $post_id ) use ( $column_title , $cb ) {
if ( sanitize_title ( $column_title ) === $column ) {
$cb ( $post_id );
}
}, 10 , 2 );
}
add_admin_column ( __ ( 'Последнее изменение' ), 'anew' , function ( $post_id ){
$user = get_user_by ( " id " , get_post_meta ( $post_id , '_edit_last' , true ));
echo $user -> display_name . " в " . get_the_modified_date ( " H:i d.m.Y " , $post_id );
});
add_admin_column ( __ ( 'Последнее изменение' ), 'profile_article' , function ( $post_id ){
$user = get_user_by ( " id " , get_post_meta ( $post_id , '_edit_last' , true ));
echo $user -> display_name . " в " . get_the_modified_date ( " H:i d.m.Y " , $post_id );
});
add_admin_column ( __ ( 'Последнее изменение' ), 'yellow' , function ( $post_id ){
$user = get_user_by ( " id " , get_post_meta ( $post_id , '_edit_last' , true ));
echo $user -> display_name . " в " . get_the_modified_date ( " H:i d.m.Y " , $post_id );
});
function remove_comments_column ( $columns ) {
unset ( $columns [ 'comments' ]);
unset ( $columns [ 'parent' ]);
unset ( $columns [ 'tiny-compress-images' ]);
return $columns ;
}
function remove_column_init () {
add_filter ( 'manage_media_columns' , 'remove_comments_column' );
}
//add_action( 'admin_init' , 'remove_column_init' );
add_action ( 'admin_init' , 'media_request_init' );
function media_request_init (){
//if(get_current_user_id() == 1) {
//add_filter('posts_where', 'media_request', 100);
//}
}
function media_request ( $where ) {
if ( is_admin ()) {
$screen = get_current_screen ();
if ( $screen -> id == 'upload' || $screen -> id == NULL ) {
$where .= ' and post_date <= now() ' ;
}
}
return $where ;
}
//Это позволит убрать лишние новости
function limit_test ( $where ){
$screen = get_current_screen ();
if ( 1 == 2 && is_admin () && in_array ( $screen -> id , array ( 'edit-anew' , 'edit-yellow' , 'edit-profile_article' , 'anew' , 'yellow' , 'profile_article' ))){
$where .= " AND `wp_posts`.`ID` IN (
SELECT post_id from wp_postmeta where meta_key = 'is_actual' and meta_value = '1'
) " ;
}
return $where ;
}
function limit_test_init (){
if ( get_current_user_id () == 1 ) {
add_filter ( 'posts_where' , 'limit_test' , 999 );
}
}
add_action ( 'admin_init' , 'limit_test_init' );
function fake_test_init (){
if ( is_user_logged_in ()){
add_action ( 'save_post' , 'save_fake_status' , 999 , 1 );
add_action ( 'post_updated' , 'save_fake_status' , 999 , 1 );
add_action ( 'add_meta_boxes' , " remove_customized_metabox " , 10 );
add_filter ( 'posts_where' , 'remove_fake_draft' , 10 , 1 );
add_filter ( 'display_post_states' , 'remove_draft_state' , 10 , 2 );
function remove_draft_state ( $post_states , $post ){
if ( get_post_meta ( $post -> ID , 'is_fake' , true ) == '1' ){
return array ();
}
return $post_states ;
}
add_filter ( 'post_class' , function ( $classes ) {
global $post ;
if ( get_post_meta ( $post -> ID , 'is_fake' , true ) == '1' ){
$classes [] = 'seo' ;
$classes [] = 'status-publish' ;
}
return $classes ;
});
add_filter ( 'get_post_status' , 'fake_post_status' , 10 , 2 );
function fake_post_status ( $post_status , $post ){
if ( get_post_meta ( $post -> ID , 'is_fake' , true ) == '1' ){
$post_status = 'publish' ;
}
return $post_status ;
}
}
}
add_action ( 'admin_init' , 'fake_test_init' );
function remove_fake_draft ( $where ){
if ( is_admin ()) {
if ( filter_input ( INPUT_GET , 'post_status' ) == 'draft' ) {
$where .= " and wp_posts.vsp != 'IsFake' " ;
}
if ( filter_input ( INPUT_GET , 'post_status' ) == 'publish' ){
$where .= " and (wp_posts.vsp = 'IsFake' or wp_posts.post_status = 'publish' ) " ;
}
}
return $where ;
}
function remove_customized_metabox (){
if ( get_post_meta ( filter_input ( INPUT_GET , 'post' , FILTER_SANITIZE_NUMBER_INT ), 'is_fake' , true ) == '1' ) {
remove_meta_box ( 'submitdiv' , 'anew' , 'side' );
add_meta_box (
" _submitdiv " ,
__ ( " Publish " ),
" omfgtest " ,
'anew' ,
'side' ,
'high' ,
[ 'show_draft_button' => false ]
);
}
}
function save_fake_status ( $post_id ){
if ( get_post_meta ( $post_id , 'is_fake' , true ) == '1' && get_post_status ( $post_id ) == 'publish' ) {
wp_update_post ( array (
'ID' => $post_id ,
'post_status' => 'draft'
));
}
}
function omfgtest ( ) {
global $action , $post ;
$post_id = ( int ) $post -> ID ;
if ( get_post_meta ( filter_input ( INPUT_GET , 'post' , FILTER_SANITIZE_NUMBER_INT ), 'is_fake' , true ) == '1' ) {
$post -> post_status = 'publish' ;
}
ob_start ();
post_submit_meta_box ( $post );
$cache = ob_get_clean ();
if ( get_post_meta ( filter_input ( INPUT_GET , 'post' , FILTER_SANITIZE_NUMBER_INT ), 'is_fake' , true ) == '1' ) {
echo '<div id="submitdiv">' . $cache . '</div>' ;
} else {
echo $cache ;
}
}
add_action ( 'init' , 'wordfence_cancel_loading' );
function wordfence_cancel_loading (){
if ( filter_input ( INPUT_GET , 'wordfence_syncAttackData' , FILTER_SANITIZE_NUMBER_INT )){
exit ;
}
}
if ( ! function_exists ( 'index_post_now' ) ){
add_action ( 'future_to_publish' , 'index_post_now' );
add_action ( 'post_updated' , 'index_post_now' );
function index_post_now ( $post_id ) : bool {
$post_id = ( is_object ( $post_id )) ? $post_id -> ID : $post_id ;
if ( get_post_status ( $post_id ) !== 'publish' ){
return true ;
}
$params = array (
" key " => " VCujf3mXZaBsHnkenAW2VUv03CDTJaLpkg4CeQbuSgF73ODaAMThUcuZKpcdTmPWWZ0G7EDZ2FmmN74hMmcjeUwOh5ZbGSLKPAo " ,
" url " => get_permalink ( $post_id )
);
$url = " https://yandex.com/indexnow? " . http_build_query ( $params );
file_get_contents ( $url );
$url = " https://www.bing.com/indexnow? " . http_build_query ( $params );
file_get_contents ( $url );
return true ;
}
}
//Ссылки на КП
add_filter ( 'the_content' , function ( $content ) {
$content = preg_replace ( '/<a(.*)href="([^"]*)\/kp\.ru([^"]*)"(.*)>/' , '<a$1href="' . get_site_url () . '/go/$2/kp.ru$3"$4>' , $content );
$content = preg_replace ( '/<a(.*)href="([^"]*)\.kp\.ru([^"]*)"(.*)>/' , '<a$1href="' . get_site_url () . '/go/$2.kp.ru$3"$4>' , $content );
$content = preg_replace ( '/<a(.*)href="([^"]*)novostivl\.ru([^"]*)"(.*)>/' , '<a$1href="' . get_site_url () . '/go/$2novostivl.ru$3"$4>' , $content );
return $content ;
}, 999 );
//Возрастное ограничение
add_filter ( 'the_content' , function ( $content ){
if ( ! preg_match ( '/[0-9]\+/' , $content ) && get_post_meta ( get_the_ID (), 'event' , true ) == 1 ){
$age = get_post_meta ( get_the_ID (), 'age' , true );
$age = $age ? $age : 16 ;
$content = $content . " <p>Возрастное ограничение: " . $age . " +</p> " ;
}
return $content ;
}, 999 );
add_filter ( 'wp_video_shortcode' , 'video_micromarking_filter_function' , 999 , 5 );
function video_micromarking_filter_function ( $output , $atts , $video , $post_id , $library ){
$attachment_id = attachment_url_to_postid ( $atts [ 'mp4' ]);
$metadata = wp_get_attachment_metadata ( $attachment_id );
$attachmentdata = get_post ( $attachment_id );
if ( $attachment_id == 0 ){
return $output ;
}
$length = explode ( " : " , $metadata [ 'length_formatted' ]);
$duration = " PT " . $length [ 0 ] . " M " . $length [ 1 ] . " S " ;
$html = '<div itemscope itemtype="https://schema.org/VideoObject">' ;
//$html .= '<span itemprop="name" class="d-none">'.get_the_title(get_the_ID()).'</span>';
$html .= '<meta itemprop="duration" content="' . $duration . '"/>' ;
$html .= '<meta itemprop="uploadDate" content="' . date ( " c " , strtotime ( $attachmentdata -> post_date )) . '" />' ;
if ( $atts [ 'poster' ] != '' ) {
$html .= '<meta itemprop="thumbnail" content="' . $atts [ 'poster' ] . '"/>' ;
}
if ( get_the_excerpt ( get_the_ID ()) != '' ){
//$html .= '<span itemprop="description" class="d-none">'.get_the_excerpt(get_the_ID()).'</span>';
}
$html .= " <!--[if lt IE 9]><script>document.createElement( \ 'video \ ');</script><![endif]--> " ;
$html .= '<meta itemprop="contentUrl" content="' . $atts [ 'mp4' ] . '" />' ;
$html .= '<video class="wp-video-shortcode" id="video-' . $attachment_id . '-' . $post_id . '" preload="metadata" controls="controls">' ;
$html .= '<source type="' . $attachmentdata -> post_mime_type . '" src="' . $atts [ 'mp4' ] . '?_=1" />' ;
$html .= '<a href="' . $atts [ 'mp4' ] . '">' . $atts [ 'mp4' ] . '</a>' ;
$html .= '</video>' ;
$html .= '</div>' ;
return $html ;
}
add_filter ( 'posts_where' , function ( $where ){
if ( ! is_user_logged_in ()) {
if (
( filter_input ( INPUT_GET , 'id' ) == 'post_type_archive' && filter_input ( INPUT_GET , 'post_id' ) == 'anew' )
||
( is_post_type_archive () && get_queried_object () -> name == 'anew' && ! is_admin ())
) {
//$where .= " AND `wp_posts`.`ID` NOT IN (SELECT `object_id` from `wp_term_relationships` where `term_taxonomy_id` = 103565) ";
}
}
return $where ;
}, 999 );
function use_new_template (){
return false ;
if (
get_current_user_id () == 1
&&
wp_is_mobile ()
){
return true ;
}
return false ;
}
function use_new_banner (){
if (
get_current_user_id () == 1
&&
wp_is_mobile ()
){
return true ;
}
return false ;
}
add_action ( 'init' , 'no_access_to_edit_posts' );
function no_access_to_edit_posts (){
if (
is_admin ()
&&
is_user_logged_in ()
&&
in_array ( filter_input ( INPUT_GET , 'post' , FILTER_SANITIZE_NUMBER_INT ), [ 1027239 ])
&&
! in_array ( get_current_user_id (), [ 58 , 3 , 1 ])
){
wp_die ( 'Вам запрещено редактировать этот материал' );
}
}
add_filter ( 'get_the_tags' , 'remove_agregator_front' , PHP_INT_MAX );
function remove_agregator_front ( $terms ){
if ( get_current_user_id () != 1 ){
//return $terms;
}
if ( ! is_admin ()) {
foreach ( $terms as $i => $term ) {
if ( $term -> term_id == 103565 ){
unset ( $terms [ $i ]);
}
}
}
return $terms ;
}
add_filter ( 'posts_where' , function ( $where ){
if ( is_feed ()){
//$where .= " AND wp_posts.post_date < (NOW() - INTERVAL 1 MINUTE) ";
}
return $where ;
}, PHP_INT_MAX );
add_filter ( 'ep_index_name' , function ( $index_name , $blog_id , $indexable ){
$index_name = str_replace ( 'admin' , '' , $index_name );
return $index_name ;
}, 99 , 3 );
add_action ( 'the_content' , 'remove_admin' );
add_action ( 'the_permalink' , 'remove_admin' );
function remove_admin ( $content ){
$content = str_replace ( 'admin.profile.ru' , 'profile.ru' , $content );
return $content ;
}
add_filter ( 'rank_math/instant_indexing/publish_url' , function ( $url ) {
return str_replace ( 'admin.profile.ru' , 'profile.ru' , $url );
}, PHP_INT_MAX , 1 );
add_filter ( 'rank_math/instant_indexing/submit_url' , function ( $url ) {
return str_replace ( 'admin.profile.ru' , 'profile.ru' , $url );
}, PHP_INT_MAX , 1 );
add_filter ( 'rank_math/instant_indexing/indexnow_key_location' , function ( $url ) {
return str_replace ( 'admin.profile.ru' , 'profile.ru' , $url );
}, PHP_INT_MAX , 1 );
add_filter ( 'rank_math/indexing_api/publish_url' , function ( $url ) {
return str_replace ( 'admin.profile.ru' , 'profile.ru' , $url );
}, PHP_INT_MAX , 1 );
add_filter ( 'rank_math/indexing_api/submit_url' , function ( $url ) {
return str_replace ( 'admin.profile.ru' , 'profile.ru' , $url );
}, PHP_INT_MAX , 1 );
add_filter ( 'rank_math/indexing_api/indexnow_key_location' , function ( $url ) {
return str_replace ( 'admin.profile.ru' , 'profile.ru' , $url );
}, PHP_INT_MAX , 1 );
add_filter ( 'http_request_args' ,
function ( $parsed_args , $url ){
if ( $url === 'https://api.indexnow.org/indexnow/' ){
foreach ( $parsed_args as $i => $arg ){
if ( is_string ( $arg ) && mb_stripos ( $arg , 'admin' ) !== false ){
$parsed_args [ $i ] = preg_replace ( '/admin(.*)profile\.ru\"/i' , 'profile.ru"' , $parsed_args [ $i ]);
}
}
}
return $parsed_args ;
}, 10 , 2 );
add_filter ( 'posts_where' , function ( $where ){
if ( is_admin ()){
if ( is_user_logged_in () && ! in_array ( get_current_user_id (),[ 1 , 3 ])){
$where .= " AND `wp_posts`.`ID` NOT IN (SELECT object_id FROM wp_term_relationships where term_taxonomy_id = 104862) AND 111 = 111 " ;
}
} else {
if ( is_single ()){
if ( is_user_logged_in () && ! in_array ( get_current_user_id (),[ 1 , 3 ])){
$where .= " AND `wp_posts`.`ID` NOT IN (SELECT object_id FROM wp_term_relationships where term_taxonomy_id = 104862) AND 222 = 222 " ;
}
} else {
if ( ! is_yn ()) {
$where .= " AND `wp_posts`.`ID` NOT IN (SELECT object_id FROM wp_term_relationships where term_taxonomy_id = 104862) AND 333 = 333 " ;
}
}
}
if ( filter_input ( INPUT_GET , 'action' ) == 'alm_get_posts' ){
$where .= " AND `wp_posts`.`ID` NOT IN (SELECT object_id FROM wp_term_relationships where term_taxonomy_id = 104862) AND 444 = 444 " ;
}
return $where ;
}, 999 , 1 );
add_filter ( 'ep_index_posts_args' , function ( $args ) {
//if(is_user_logged_in() && !in_array(get_current_user_id(),[1,3])) {
$exclude = get_posts ( [
'fields' => 'ids' ,
'numberposts' => - 1 ,
'category' => 104862 ,
'post_type' => [ 'profile_article' , 'anew' , 'yellow' ],
'suppress_filters' => true ,
] );
$args [ 'post__not_in' ] = $exclude ;
//}
return $args ;
});
add_filter ( 'get_terms' , function ( $terms , $taxonomies , $args , $term_query ){
if ( is_user_logged_in () && ! in_array ( get_current_user_id (), [ 1 , 3 ])){
$exclude = [ 'profil' ];
foreach ( $terms as $key => $term ) {
if ( in_array ( $term -> slug , $exclude )) {
unset ( $terms [ $key ]);
}
}
}
return $terms ;
}, 999 , 4 );
add_filter ( 'get_the_terms' , 'hide_categories_terms' , 999 , 3 );
function hide_categories_terms ( $terms , $post_id , $taxonomy ){
if ( is_user_logged_in () && ! in_array ( get_current_user_id (), [ 1 , 3 ])){
$exclude = [ 'profil' ];
foreach ( $terms as $key => $term ) {
if ( in_array ( $term -> slug , $exclude )) {
unset ( $terms [ $key ]);
}
}
}
return $terms ;
}
/**
* Filters WP_Query arguments for initial ElasticPress indexing .
* Searches for posts with 'do_not_index' and adds those post IDs to 'posts__not_in' argument .
* @ param array $args
* @ return array
*/
function my_ep_filter ( $args ) {
$query = new WP_Query ( [
'fields' => 'ids' ,
'numberposts' => - 1 ,
'category' => 104862 ,
'post_type' => [ 'profile_article' , 'anew' , 'yellow' ],
'suppress_filters' => true ,
] );
if ( 0 != $query -> post_count ) {
$args [ 'post__not_in' ] = $query -> posts ;
}
return $args ;
}
add_filter ( 'ep_index_posts_args' , 'my_ep_filter' );
/**
* Filter to determine if a post should not be indexed .
* @ param bool $return_val Default is false .
* @ param array $post_args
* @ param int $post_id
* @ return boolean
*/
/* function my_ep_stop_sync ( $return_val , $post_args , $post_id ) {
$to_index = has_category ( 104862 , $post_id );
if ( true === boolval ( $to_index ) ) {
return false ;
}
if ( function_exists ( 'ep_delete_post' ) ) {
ep_delete_post ( $post_id );
}
return true ;
}
add_filter ( 'ep_post_sync_kill' , 'my_ep_stop_sync' , 10 , 3 ); */
2025-08-27 00:00:02 +03:00
2025-07-09 21:21:17 +03:00
add_action ( 'wp_insert_post' , 'news_telegram_log' , 10 , 1 );
2025-08-27 00:00:02 +03:00
//хук для запланированных
add_action ( 'transition_post_status' , function ( $new_status , $old_status , $post ) {
if ( $new_status == 'publish' && $old_status == 'future' ) {
news_telegram_log ( $post );
}
}, 10 , 3 );
2025-07-09 21:21:17 +03:00
function news_telegram_log ( $post ){
$post = get_post ( $post );
$post_id = $post -> ID ;
if (
get_post_status ( $post_id ) !== 'publish'
||
! in_array ( get_post_type ( $post_id ), array ( 'anew' , 'yellow' , 'profile_article' ))
||
get_post_meta ( $post_id , 'telegram_log' , true )
){
return ;
}
if ( wp_get_post_categories ( $post_id )[ 0 ] == 104862 ){
return ;
}
2025-08-27 00:00:02 +03:00
// Получаем и проверяем ссылку
$curr_link = get_permalink ( $post_id );
if ( empty ( $curr_link )) {
error_log ( 'Telegram bot: Empty permalink for post ID ' . $post_id );
return ;
}
2025-07-09 21:21:17 +03:00
2025-08-27 00:00:02 +03:00
$curr_link = fix_broken_url ( $curr_link , 'profile.ru' ); //корректируем ссылку с ошиюбками
2025-07-09 21:21:17 +03:00
2025-08-27 00:00:02 +03:00
$content = '<a href="' . $curr_link . '?utm_from=telegram">' . get_the_title ( $post_id ) . '</a>' ;
2025-07-09 21:21:17 +03:00
$content = str_replace ( 'admin.' , '' , $content );
$request = " https://api.telegram.org/bot1184440628:AAE5N10dnzClx3Qce4v1mBD9ax1BsHo98Rs/sendMessage?chat_id=-1001588455134&parse_mode=HTML&text= " . urlencode ( $content );
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_SSL_VERIFYPEER , false );
curl_setopt ( $ch , CURLOPT_VERBOSE , true );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
curl_setopt ( $ch , CURLOPT_USERAGENT , 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)' );
curl_setopt ( $ch , CURLOPT_URL , $request );
$return = curl_exec ( $ch );
update_post_meta ( $post_id , 'telegram_log' , 1 );
return true ;
}
function show_thumbnail ( $id = false ) : bool
{
if ( ! $id ){
$id = get_the_ID ();
}
2025-08-27 00:00:02 +03:00
// Н О В О Е УСЛОВИЕ: Амнистия для постов, опубликованных после 1 августа 2025 года
$amnestyDate = strtotime ( '2025-08-01' );
if ( get_the_date ( " U " , $id ) > $amnestyDate ) {
return true ;
}
2025-07-09 21:21:17 +03:00
$days = (( get_post_meta ( $id , '_hide_thumbnail_countdown' ))[ 0 ]);
if ( $days == NULL ){
return true ;
}
if ( $days === 0 || $days === '0' ) {
return true ;
}
$days = ( int ) $days ;
if (((( date ( " U " ) - get_the_date ( " U " )) > 86400 * $days && $days >= 0 ) && count ( get_post_meta ( $id , '_hide_thumbnail_countdown' )) !== 0 ) || $days == 0 ){
return false ;
}
if (( is_single () || is_turbo ()) && in_array ( get_post_type ( $id ), [ 'anew' , 'yellow' ])) {
if ( date ( " U " ) - get_the_date ( " U " , $id ) > 24 * 60 * 60 * 10 ) {
$term = get_the_category ( $id )[ 0 ];
if ( $term -> category_parent == 11430 || $term -> term_id == 11430 ) {
return true ;
}
if ( get_post_meta ( $id , 'event' , true ) == 1 ) {
return true ;
}
if ( get_the_date ( " U " , $id ) < 1483228800 ) {
return true ;
}
$allow = [
" Global Look Press " ,
" Т А С С " ,
" TASS " ,
" AFP " ,
" «Профиль» " ,
" kremlin.ru " ,
" president.gov.ua " ,
" president.gov.by " ,
" NASA " ,
" АГН «Москва» " ,
" АГН Москва " ,
" Агентство «Москва» " ,
" Авгурова " ,
" mil.ru " ,
" roscosmos.ru " ,
" mid.ru " ,
" vostock photo " ,
" duma.gov.ru " ,
" Пресс-служба "
];
$copyright = wp_get_attachment_caption ( get_post_thumbnail_id ( $id ) );
foreach ( $allow as $substr ){
if ( mb_stripos ( $copyright , $substr )){
return true ;
}
}
return false ;
}
}
return true ;
}
add_filter ( 'post_gallery' , function ( $output , $attr ) {
if ( is_single () && in_array ( get_post_type (), [ 'anew' , 'yellow' ])) {
if ( date ( " U " ) - get_the_date ( " U " ) > 24 * 60 * 60 * 10 ) {
$output = " " ;
}
}
return $output ;
}, 999 , 2 );
function is_in_dk () : bool
{
if ( is_single ()) {
$category = array_shift ( get_the_category ());
if ( $category -> term_id === 11430 || $category -> parent === 11430 ){
return true ;
}
}
if ( is_category ()) {
$category = get_category ( get_query_var ( 'cat' ) );
if ( $category -> term_id === 11430 || $category -> parent === 11430 ){
return true ;
}
}
return false ;
}
add_filter ( 'wp_redirect' , function ( $location , $status ) {
$location = str_replace ( " g.profile.ru " , " profile.ru " , $location );
return $location ;
}, 10 , 2 );
/**
* Экспорт в знай наших
*/
/*
add_action ( 'save_post' , function ( $post_id ) {
if ( ! defined ( 'DOING_AUTOSAVE' ) && ( has_category ( " 104807 " , $post_id ) || get_post_type () === " guest-author " )) {
wp_schedule_single_event ( time () + 60 , 'export_import_zn_hook' , [ $post_id ] );
}
});
add_action ( 'export_import_zn_hook' , 'export_import_zn' );
function export_import_zn ( $post_id ) {
debug ( $post_id );
$thumb = ( int ) get_post_meta ( $post_id , " _thumbnail_id " , true );
if ( $thumb > 0 ){
exec ( " /var/www/exports/scripts/export-import.sh " . $thumb . " > /dev/null & " );
}
if ( $post_id > 0 ){
exec ( " /var/www/exports/scripts/export-import.sh " . $post_id . " > /dev/null & " );
}
}
//Трансляция в телеграм Знай Наших
add_action ( " save_post " , function ( $post_id ) {
if (
! defined ( 'DOING_AUTOSAVE' ) &&
in_array ( get_post_type ( $post_id ), [ " anew " , " profile_article " ] ) &&
get_post_status ( $post_id ) === " publish " &&
has_category ( " 104807 " , $post_id ) &&
! get_post_meta ( $post_id , " _zn_tg_channel_posted " )
)
{
$bot_id = " 1108783670:AAGm7_vdXQAte25OGUa5gWJNXhy5-v6d_hU " ;
$chat_id = " -1001960709397 " ;
$text = '<a href="' . get_the_permalink ( $post_id ) . '?utm_from=telegram">' . get_the_title ( $post_id ) . '</a>' ;
$text = str_replace ( 'admin.' , '' , $text );
$request = " https://api.telegram.org/bot " . $bot_id . " /sendMessage?chat_id= " . $chat_id . " &parse_mode=HTML&text= " . urlencode ( $text );
$ch = curl_init ();
curl_setopt ( $ch , CURLOPT_URL , $request );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , true );
if ( curl_exec ( $ch ) ) {
update_post_meta ( $post_id , '_zn_tg_channel_posted' , 1 );
}
}
}, 999 , 1 );
*/
add_filter ( 'sanitize_file_name' , function ( $filename ){
return strtolower ( $filename );
}, 10 );
add_action ( " transition_post_status " , " mainpage_producer_wpcli " , 10 , 3 );
function mainpage_producer_wpcli ( $new_status , $old_status , $post ) {
if ( $post -> post_type === " profile_article " && $new_status === " publish " ) {
wp_schedule_single_event ( time () + 30 , 'mainpage_producer_update' );
}
}
/*
add_action ( 'save_post' , 'mainpage_producer_user' , 999 , 1 );
function mainpage_producer_user ( $post_id ){
if ( get_post_type ( $post_id ) == 'profile_article' && get_post_status ( $post_id ) == 'publish' ) {
mainpage_producer_requests ();
}
}
*/
add_filter ( 'rank_math/frontend/robots' , function ( $robots ) {
$paged = ( get_query_var ( 'paged' )) ? get_query_var ( 'paged' ) : 1 ;
if ( 1 != $paged ) {
$robots = [ " noindex " , " nofollow " ];
}
return $robots ;
});
function rewrite_post_slug ( int $post_id , string $slug ) : ? bool
{
add_action ( " init " , function () use ( $post_id , $slug ) {
add_rewrite_rule ( '^' . $slug . '(.*)' , 'index.php?p=' . $post_id , 'top' );
});
add_filter ( " the_permalink " , function ( $permalink , $post ) use ( $post_id , $slug ) {
$post = get_post ( $post );
$id = $post -> ID ;
if ( $post_id == $id ) {
$permalink = " / " . $slug ;
}
return $permalink ;
}, 10 , 2 );
add_filter ( 'rank_math/sitemap/entry' , function ( $url , $type , $object ) use ( $post_id , $slug ) {
$id = $object -> ID ;
if ( $post_id == $id ) {
$url [ " loc " ] = " https://profile.ru/ " . $slug ;
}
return $url ;
}, 10 , 3 );
add_filter ( 'rank_math/frontend/canonical' , function ( $canonical ) use ( $post_id , $slug ) {
if ( $canonical == get_permalink ( $post_id )) {
$canonical = " / " . $slug ;
}
return $canonical ;
}, 10 , 1 );
add_action ( " template_redirect " , function () use ( $post_id , $slug ) {
$id = get_queried_object_id ();
if ( $id == $post_id ) {
if ( get_permalink ( $id ) == 'https://' . $_SERVER [ 'HTTP_HOST' ] . $_SERVER [ 'REQUEST_URI' ] ) {
wp_redirect ( " / " . $slug );
}
}
}, 10 );
return true ;
}
rewrite_post_slug ( 1328478 , " profil/maksim-barskij-sibantracit " );
function first_sentence ( string $content ) : string
{
$dom = new DOMDocument ( " 1.0 " , " UTF-8 " );
$dom -> loadHTML ( '<?xml encoding="utf-8" ?>' . $content );
$xpath = new DOMXPath ( $dom );
$first_el = $xpath -> query ( " //html/body/* " ) -> item ( 0 );
$arr = explode ( " . " , $first_el -> nodeValue );
$sentence = array_shift ( $arr );
if ( $first_el -> nodeName == " p " ){
$sentence .= " . " ;
}
foreach ( [ " \" " => " \" " , " ' " => " ' " , " « " => " » " ] as $open => $close ) {
if ( mb_strripos ( $sentence , $open ) !== false && mb_strripos ( $first_el -> nodeValue , $close ) > mb_strpos ( $first_el -> nodeValue , " . " )){
$arr = explode ( $close , $first_el -> nodeValue );
$sentence = array_shift ( $arr ) . $close . " . " ;
}
}
$output_el = $dom -> createElement ( $first_el -> nodeName );
$output_el -> nodeValue = $sentence ;
$a = $dom -> saveXML ( $output_el );
return $a ;
}
add_filter ( " the_content " , function ( $content ){
if ( is_single () && in_array ( get_post_type ( get_queried_object_id ()), [ " anew " , " profile_article " , " yellow " ])){
$paragraphs = explode ( " </p> " , $content );
array_shift ( $paragraphs );
$content = implode ( " </p> " , $paragraphs );
}
return $content ;
}, 999 );
function first_paragraph (){
$content = wpautop ( get_the_content () );
$paragraphs = explode ( " </p> " , $content );
return $paragraphs [ 0 ] . " </p> " ;
}
function is_edit_page ( $new_edit = null ) {
global $pagenow ;
if ( ! is_admin ()) return false ;
if ( $new_edit == " edit " )
return in_array ( $pagenow , array ( 'post.php' , ) );
elseif ( $new_edit == " new " ) //check for new post page
return in_array ( $pagenow , array ( 'post-new.php' ) );
else //check for either new or edit
return in_array ( $pagenow , array ( 'post.php' , 'post-new.php' ) );
}
/**
* Это позже довести до ума
* @ param string $output
* @ param array $attr
* @ param int $instance
* @ return void
*/
function override_gallery_html_site ( string $output , array $attr , int $instance ) // : string
{
if ( is_feed () || is_amp_endpoint ()){
//return $output;
}
if ( in_array ( get_post_type (), [ " anew " , " yellow " ]) && get_the_date ( " U " ) < 1719187200 ) {
$output = " <div></div> " ;
return $output ;
}
$attachments_query = new WP_Query (
[
" post_type " => [ " attachment " ],
" post_status " => [ " inherit " , " publish " ],
" post__in " => explode ( " , " , $attr [ " ids " ]),
" orderby " => " post__in " ,
" ignore_sticky " => true ,
" suppress_filters " => true ,
" posts_per_page " => - 1
]
);
$images = " " ;
$thumbs = " " ;
$descs = " " ;
if ( $attachments_query -> have_posts () ) {
while ( $attachments_query -> have_posts () ) {
$attachments_query -> the_post ();
$images .= "
< div class = \ " swiper-slide col-12 p-0 \" >
< img src = \ " " . wp_get_attachment_image_url ( get_the_ID (), " large " ) . " \" data-url= \" ?image= " . $attachments_query -> current_post . " \" alt= \" " . get_the_content ( get_the_ID () ) . " \" data-auth= \" " . wp_get_attachment_caption ( get_the_ID () ) . " \" />
</ div >
" ;
$thumbs .= "
< div class = \ " swiper-slide gallery-mini-slide \" >
< img src = \ " " . wp_get_attachment_image_url ( get_the_ID (), " medium " ) . " \" data-url= \" ?image= " . $attachments_query -> current_post . " \" alt= \" \" data-type= \" gallery-nav \" />
</ div >
" ;
$descs .= "
< div class = \ " swiper-slide gallery-text-slide d-flex flex-column \" >
< span > " . get_the_content( get_the_ID() ) . " </ span >
< p >
" . wp_get_attachment_caption( get_the_ID() ) . "
</ p >
</ div >
" ;
wp_reset_postdata ();
}
$html = "
< div class = \ " swiper-block \" >
< div class = \ " gallery \" >
< div class = \ " swiper-wrapper d-flex flex-row \" >
" ;
$html .= $images ;
$html .= "
</ div >
< div class = \ " gallery-prev \" ></div>
< div class = \ " gallery-next \" ></div>
< div class = \ " gallery-pagination \" ></div>
</ div >
< div thumbsSlider = \ " \" class= \" gallery-mini \" >
< div class = \ " swiper-wrapper gallery-mini-wrapper d-flex flex-row \" >
" ;
$html .= $thumbs ;
$html .= " </div>
</ div >
< div thumbsSlider = \ " \" class= \" gallery-text \" >
< div class = \ " swiper-wrapper gallery-text-wrapper d-flex flex-row \" > " ;
$html .= $descs ;
$html .= " </div>
</ div >
</ div > " ;
$output = $html ;
return $output ;
}
wp_reset_postdata ();
wp_reset_query ();
return $output ;
}
function override_gallery_html_api ( string $output , array $attr , int $instance ) // : string
{
if ( is_feed () || is_amp_endpoint ()){
//return $output;
}
$attachments_query = new WP_Query (
[
" post_type " => [ " attachment " ],
" post_status " => [ " inherit " , " publish " ],
" post__in " => explode ( " , " , $attr [ " ids " ]),
" orderby " => " post__in " ,
" ignore_sticky " => true ,
" suppress_filters " => true ,
" posts_per_page " => - 1
]
);
if ( $attachments_query -> have_posts () ) {
while ( $attachments_query -> have_posts ()) {
$attachments_query -> the_post ();
$output .= "
< p >
< img src = \ " " . wp_get_attachment_image_url ( get_the_ID (), " large " ) . " \" data-url= \" ?image= " . $attachments_query -> current_post . " \" alt= \" " . htmlspecialchars ( get_the_content ( get_the_ID ())) . " \" data-auth= \" " . wp_get_attachment_caption ( get_the_ID ()) . " \" />
</ p >
" ;
}
}
return $output ;
}
function override_gallery_html ( string $output , array $attr , int $instance ) // : string
{
if ( defined ( 'REST_REQUEST' ) ){
return override_gallery_html_api ( $output , $attr , $instance );
}
return override_gallery_html_site ( $output , $attr , $instance );
}
add_filter ( " post_gallery " , " override_gallery_html " , 9999 , 3 );
function main_photo_caption ( $str ){
$str = str_ireplace ( 'depositphotos.com' , '<a target="_blank" href="https://depositphotos.com/">depositphotos.com</a>' , $str );
return $str ;
}
function m_debug_log ( $content ){
error_log (
sprintf ( " %s Error: %s \n " , date ( " Y-m-d h:i:s " ), $content ),
3 ,
\WP_CONTENT_DIR . " /debug.log "
);
}
//Костыль для отображения бОльшего количества меток при поиске из материала
add_filter ( " get_terms_args " , function ( $args ){
if ( $_GET [ " action " ] === " ajax-tag-search " ) {
$args [ " number " ] = 0 ;
}
return $args ;
}, 999 , 1 );
/**
* Исправление ошибки с тайтлами на странице автора
* @ param string $title
* @ return string
*/
function author_page_title ( string $title ) : string
{
if ( is_author () && is_archive () ) {
$title = str_contains ( $title , get_queried_object () -> display_name ) ? $title : get_queried_object () -> display_name . $title ;
}
return $title ;
}
add_filter ( " rank_math/frontend/title " , " author_page_title " , 99 );
add_action ( " save_post " , function ( $post_id ){
if ( get_post_status ( $post_id ) === " publish " ){
2025-07-15 23:28:33 +03:00
if ( function_exists ( 'rocket_clean_files' ) ){
rocket_clean_files ([ 'https://g.profile.ru/author' ]);
rocket_clean_files ([ 'https://profile.ru/author' ]);
}
2025-07-09 21:21:17 +03:00
}
}, 999 );
//
add_action ( 'acf/save_post' , 'mark_url_chatgpt' );
function mark_url_chatgpt ( $post_id ) {
if (
! in_array (
get_post_type ( $post_id ),
[ " profile_article " , " anew " ]
)
) {
return ;
}
$gpt_marker = get_field ( 'chatgpt' , $post_id );
$gpt_str_marker = " a999 " ;
$post_name = get_post_field ( 'post_name' , $post_id );
$post_title = get_post_field ( 'post_title' , $post_id );
$post_status = get_post_field ( 'post_status' , $post_id );
$post_type = get_post_field ( 'post_type' , $post_id );
if ( $gpt_marker && ! str_ends_with ( $post_name , $gpt_str_marker )) {
wp_update_post (
[
'ID' => $post_id ,
'post_name' => wp_unique_post_slug ( sanitize_title ( $post_title ), $post_id , $post_status , $post_type , 0 ) . " - " . $gpt_str_marker
]
);
}
}
/**
*
* Allow using any attributes and any tags in tinymce
*
*/
add_action ( " tiny_mce_before_init " , function ( $mce_init , $editor_id ){
$mce_init [ " extended_valid_elements " ] = " *[*] " ;
$mce_init [ " valid_elements " ] = " *[*] " ;
$mce_init [ " paste_as_text " ] = true ;
return $mce_init ;
}, 99 , 2 );
add_filter ( " the_content " , function ( $content ){
$dom = new DOMDocument ();
$dom -> loadHTML ( '<?xml encoding="utf-8" ?>' . $content );
$links = $dom -> getElementsByTagName ( 'a' );
foreach ( $links as $link ) {
if ( $link -> getAttribute ( " redirect " ) == " true " && mb_strlen ( $link -> getAttribute ( " href " )) > 0 ) {
$link -> setAttribute ( " href " , 'https://profile.ru/redirection?url=' . urlencode ( $link -> getAttribute ( " href " )));
$link -> setAttribute ( " target " , '_blank' );
}
}
return str_replace ([ '<body>' , '</body>' ], '' , $dom -> saveHTML ( $dom -> getElementsByTagName ( 'body' ) -> item ( 0 )));
}, 11 , 1 );
function is_night () : bool {
if (( int ) date ( " H " ) < 5 ) return true ;
return false ;
}
function update_attachment_date ( int $post_id )
{
/* $postdate = '2010-02-23 18:57:33' ;
$my_args = array (
'ID' => $post_id ,
'post_date' => $postdate
); */
if ( get_current_user_id () != 1 ) {
return ;
}
if ( ! wp_is_post_revision ( $post_id ) ){
// unhook this function so it doesn't loop infinitely
remove_action ( 'save_post' , 'update_attachment_date' );
// update the post, which calls save_post again
//wp_update_post( $my_args );
debug ( $_POST ); die ;
// re-hook this function
add_action ( 'save_post' , 'update_attachment_date' );
}
}
add_action ( 'save_post' , 'update_attachment_date' );
//выводит ссылку на сайт автора
function get_profile_website_link ( $url ) {
if ( ! $url ) {
return '' ;
}
// Удаляем протокол и www для текста ссылки
$display_url = preg_replace ( '#^https?://(www\.)?#' , '' , rtrim ( $url , '/' ));
// Генерируем HTML-ссылку
return '<a href="' . esc_url ( $url ) . '" target="_blank" rel="noopener noreferrer">' . esc_html ( $display_url ) . '</a>' ;
}