• Как запретить пользователям из России обращаться к определенным функциям сервера?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    ФЗ № 406 от 31.07.2023:
    Владелец сайта и (или) страницы сайта в сети "Интернет", и (или) информационной системы, и (или) программы для электронных вычислительных машин, являющийся российским юридическим лицом или гражданином Российской Федерации и осуществляющий свою деятельность в сети "Интернет" на территории Российской Федерации, в случае, если доступ к информации, размещенной на его сайте и (или) странице сайта в сети "Интернет", и (или) в его информационной системе, и (или) программе для электронных вычислительных машин, предоставляется пользователям, прошедшим авторизацию, обязан проводить ее в отношении пользователей, находящихся на территории Российской Федерации, одним из следующих способов:

    - с использованием абонентского номера оператора подвижной радиотелефонной связи в порядке...
    - ЕСИА...
    - ЕБС...
    - с использованием иной информационной системы, обеспечивающей авторизацию пользователей сайтов и (или) страниц сайтов в сети "Интернет"...

    Закон обязывает всех владельцев "веб-площадок" (зарегистрированных на территории РФ) с возможность авторизации пользователей (находящихся на территории РФ) производить эту "авторизацию" любым из перечисленных способов.

    Тут интересный момент в "находящихся на территории РФ" пользователей. Соответственно, Вы обязаны удостовериться, находится ли пользователь на территории РФ или нет. Варианты определения геолокации пользователя:
    - IP-адрес (своя бд, сторонний сервис, WebRTC).
    - HTML5 Geolocation API.
    - Часовой пояс браузера.
    - Геолокация у мобильных устройств.

    Но в отношение IP имеется №152-ФЗ, который гласит "персональные данные - любая информация, относящаяся к прямо или косвенно определенному или определяемому физическому лицу (субъекту персональных данных)", а значит IP сюда тоже можно "натянуть на глобус", соответственно, вначале необходимо спросить разрешение на обработку данных о любой геолокации пользователя, а затем, если он разрешит - проверять, "верблюд ли он". Соответственно, если пользователь не разрешит, то Вы не имеете право предоставлять авторизацию, через "иные сервисы".
    Т.е. единственный выход выходит сервисы которые каким-то образом ассоциируют IP со страной/регионом/городом и делятся этой информацией по подписке, либо предоставляют готовую БД, но у неё проблема в потере актуальности со временем

    Именно, платить в случае не верного определения - Вам.
    Ответ написан
    Комментировать
  • Почему не обновляется tittle и description в поисковиках?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Поисковикам нужно больше времени, чтобы обновить данные или я что-то неправильно сделал?

    Нужно. Но, если ПС посчитает, что title/desctiption не соответствуют ключу, а страница в целом соответствует, то ПС может использовать иные данные со страницы.
    Ответ написан
    2 комментария
  • Как частично закрыть от индекса /xfsearch/?

    pro100taa
    @pro100taa
    Disallow: /product/
    Allow: /product/*

    Вот так сделайте
    Ответ написан
    1 комментарий
  • Стоил ли экранировать вывод Contact Form 7?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Стоил ли экранировать вывод Contact Form 7?

    Если Вы под "экранировать" понимаете санитайзинг (Sanitize), то да. Лишний слой безопасности, который не зависит от конкретного плагина - хуже не сделает (если написан не криво).
    Ответ написан
    Комментировать
  • Как исключить записи отдельной категории своей таксономии WordPress?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Параметры Таксономий

    Получаем все записи с таксономией offer_cat, исключая записи с id 100, 101 и 102:
    $q = new WP_Query([
      'post_type' => 'offer',
      'posts_per_page' => 99,
      'tax_query' => [
        [
          'taxonomy' => 'offer_cat',
          'field' => 'term_id',
          'terms' => [100, 101, 102],
          'operator' => 'NOT IN',
        ],
      ],
    ]);

    Получаем записи (3) с таксономией offer_cat и id 100, 101 и 102:
    $q = new WP_Query([
      'post_type' => 'offer',
      'posts_per_page' => 99,
      'tax_query' => [
        [
          'taxonomy' => 'offer_cat',
          'field' => 'term_id',
          'terms' => [100, 101, 102],
          'operator' => 'IN',
        ],
      ],
    ]);
    Ответ написан
    1 комментарий
  • Как написать хендлер aiogram 3.1.1 Successful Payment?

    @Everything_is_bad
    @dp.message(F.successful_payment)
    Ответ написан
    Комментировать
  • Какие методы сжатия изображений (миниатюр) для сайта есть?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Я так понимаю что создание миниатюр и сжатие это все таки разные вещи

    Верно.
    так как миниатюры создаются по принципу размера 1х1

    Не обязательно. Миниатюры создаются под определённые задачи. Бывает так, что существует несколько миниатюр единовременно, для одного изображения.
    Так как оптимизировать главную страницу с лентой записей с такими объемными миниатюрами?

    - Уменьшать количество единовременно загружаемых изображений.
    - Оптимизировать сами изображения.
    Конвертировать в webp формат. Я правильно понимаю?

    Верно.
    Ответ написан
    Комментировать
  • Можно ли как-то применять execute_script относительно только WebElement в Selenium, а не драйвера?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Возможно, попробуйте так:
    el = driver.find_element(By.CLASS_NAME, "checbox")  # or checkbox?
    c = driver.execute_script("return arguments[0].getBoundingClientRect();", el)
    print(c)  # {'bottom': 200, 'height': 50, 'left': 150, 'right': 250, 'top': 150, 'width': 100}
    Ответ написан
    2 комментария
  • Как подключить вход через Google?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Nextend Social Login and Register
    Wp Social
    Login for Google Apps

    Настройка и создание токена выполняется в Google Developers Console (инструкция).
    Ответ написан
    6 комментариев
  • Как вывести список городов и областей на WordPress?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    Для начала вам понадобится простая функция конвертации городов, а так же зарегистрировать гет-параметр на фильтре query_vars

    if ( ! function_exists( 'get_converter_wp_cities' ) ) {
    
    	/**
    	 * Return string or array with wp cities.
    	 *
    	 * @param string $control Key to get one value. Optional. Default null.
    	 *
    	 * @return string|array|false
    	 */
    	function get_converter_wp_cities( $control = null ) {
    
    		// Sanitize string (just to be safe).
    		if ( ! is_null( $control ) ) {
    			$control = get_title_slug( $control );
    		}
    
    		// Main converter array.
    		$converter = array(
    			'moscow'           => 'Москва',
    			'saint-petersburg' => 'Санкт-Петербург',
    			'novosibirsk'      => 'Новосибирск',
    		);
    
    		$converter = apply_filters( 'get_converter_wp_cities', $converter );
    
    		// Return controls.
    		if ( is_null( $control ) ) {
    			return $converter;
    		} elseif ( ! isset( $converter[ $control ] ) || empty( $converter[ $control ] ) ) {
    			return false;
    		} else {
    			return $converter[ $control ];
    		}
    	}
    }
    
    if ( ! function_exists( 'query_vars_wp_cities' ) ) {
    
    	/**
    	 * Function for 'query_vars' filter-hook.
    	 * 
    	 * @param string[] $public_query_vars The array of allowed query variable names.
    	 *
    	 * @return string[]
    	 */
    	function query_vars_wp_cities( $public_query_vars ){
    
    		$public_query_vars[] = 'city';
    
    		return $public_query_vars;
    	}
    }
    add_filter( 'query_vars', 'query_vars_wp_cities' );


    Вывести список городов вы можете простым циклом, создавая ссылки с помощью функции add_query_arg()

    echo '<ul class="city-list">';
    
    foreach ( get_converter_wp_cities() as $key => $city ) {
    	$url = add_query_arg( array( 'city' => $key ), get_home_url( '/' ) );
    
    	echo '<li class="city-list-item"><a href="' . esc_url( $url ) . '" class="link">' . esc_html( $city ) . '</a></li>';
    }
    
    echo '</ul>';


    Получить значение текущего горда из гет-параметра мы можете функцией get_query_var()

    $city = get_query_var( 'city', false );
    var_dump( $city );


    Чтобы создать записи физически, как в вашем примере, вы можете зарегистрировать тип записи и таксономии для него с помощью register_post_type() и register_taxonomy(), а создать записи wp_insert_post()

    Шорткод можете создать по этому шаблону
    if ( ! function_exists( 'wp_city' ) ) {
    
    	/**
    	* Add shortcode with city [wp_city city=""]
    	*
    	* @param array $atts shortcode attributes.
    	*
    	* @return string
    	*/
    	function wp_city( $atts ) {
    
    		// Define a white list of attributes.
    		$atts = shortcode_atts( array(
    			'city' => get_query_var( 'city', false ),
    		), $atts );
    
    		if ( $atts['city'] ) {
    			$output = '<span class="current-city">' . esc_html( get_converter_wp_cities( $atts['city'] ) ) . '</span>';
    		}
    
    		return apply_filters( 'wp_city', $output );
    	}
    }
    add_shortcode( 'wp_city', 'wp_city' );


    Большая проблема — собирать тексты и заголовки для SEO. Для создания переменных плагина Yoast можете взять этот шаблон

    function get_yoast_current_city() {
    
    	$city = get_query_var( 'city', false );
    
    	if ( $city ) {
    		$string = $city;
    	} else {
    		$string = '';
    	}
    
    	return $string;
    }
    
    
    // Define the action for register yoast_variable replacments.
    function register_custom_yoast_variables() {
    	wpseo_register_var_replacement( '%%CurrentCity%%', 'get_yoast_current_city', 'advanced', __( 'Some instead title text', 'wpgen' ) );
    }
    
    // Add action.
    add_action( 'wpseo_register_extra_replacements', 'register_custom_yoast_variables' );


    Еще одна проблема в том, что вам понадобятся склонения городов в тексте и заголовках. Для решения этой задачи я создавал большую excel-таблицу со списком и парсил ее библиотекой SimpleXLSX

    655af38fd63a6389461115.png
    Ответ написан
    2 комментария
  • Не подключается jquery и файлы js в Word Press. В чем причина ошибки?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Элементы массива должны быть в виде строк:
    // wp_enqueue_script( 'slick', get_template_directory_uri() . '/assets/js/slick.min.js', array(jquery), 'null', true );
    wp_enqueue_script( 'slick', get_template_directory_uri() . '/assets/js/slick.min.js', array('jquery'), null, true );

    Зачем Вам 2 одинаковых slick.js?
    // wp_enqueue_script( 'slick', get_template_directory_uri() . '/assets/js/slick.js', array(jquery), 'null', true );
    wp_enqueue_script( 'slick', get_template_directory_uri() . '/assets/js/slick.min.js', array(jquery), 'null', true );

    Стили хорошо бы подключать в шапке, а скрипты в подвале, вот финальный код:
    <?php
    add_action('wp_enqueue_scripts', function () {
        // styles
        wp_enqueue_style('style', get_template_directory_uri() . '/assets/css/style.css');
        wp_enqueue_style('media', get_template_directory_uri() . '/assets/css/media.css');
        wp_enqueue_style('slick-style', get_template_directory_uri() . '/assets/css/slick.css');
    
        // jquery
        wp_deregister_script('jquery');
        wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js', [], null, true);
        wp_enqueue_script('jquery');
    
        // scripts
        wp_enqueue_script('slick', get_template_directory_uri() . '/assets/js/slick.min.js', ['jquery'], null, true);
        wp_enqueue_script('main', get_template_directory_uri() . '/assets/js/main.js', ['jquery'], null, true);
    });
    
    add_theme_support('post-thumbnails');
    add_theme_support('title-tag');
    add_theme_support('custom-logo');
    ?>
    Ответ написан
    5 комментариев
  • Как исправить ошибку при редактировании сайта?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    - Включить другую тему и попробовать снова нажать "Редактировать сайт".
    - Отключить плагины и попробовать снова нажать "Редактировать сайт".
    - Возможно, у Вас слишком древний браузер, который не поддерживает JS метод .at(), зайдите с современного браузера и снова нажмите "Редактировать сайт".

    Попробуйте и сообщите о результате.
    Ответ написан
    9 комментариев
  • Как отключить редактор страниц в админке Wordpress?

    V_A_B
    @V_A_B
    ¯\_(ツ)_/¯
    Как отключить редактор страниц в админке Wordpress?


    так же как и подключается

    редактор и не только

    что-то типо этого:
    add_action('current_screen','remove_editor_support');
    if(!function_exists('remove_editor_support')){
    function remove_editor_support(){
        $get_screen=get_current_screen();
        $current_screen=$get_screen->post_type;
        $post_type='post';
        // $post_type='page';
        if($current_screen==$post_type){
            remove_post_type_support($current_screen,'editor');
        }
    }}


    655eed60573bd635566099.jpeg

    можно также через фильтр add_filter('register_post_type_args',
    например отключить show_in_rest, но на счет корректности точно не скажу (не тестировал)...

    655eee80c44f3234358167.jpeg
    Ответ написан
    2 комментария
  • Что делать если нет платежного плагина от банка, для WooCommerce?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    но у банка нету специального плагина для WooCommerce

    Какие есть варианты, кроме написания своего плагина? Может есть что то готовое?

    Чтобы прям напрямую в нужный Вам банк залетали платежи - такого нет, понадобится какой то сторонний интернет-эквайринг (агрегатор), который: предоставит необходимую интеграцию с WС > примет платеж > переведет деньги в Ваш банк.
    Ответ написан
    1 комментарий
  • Как выбрать прокси для Wordpress?

    Можете попробовать через cloudflare сайт подключить - это из простого
    Ответ написан
    4 комментария
  • Как запретить счетчику Яндекс Метрика изменять HTML страницу сайта?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Вопрос. Как запретить Яндекс Метрике менять что либо на сайте?

    По умолчанию - метрика ничего не изменяет в существующем html.
    В моем случае Яндекс Метрика изменяла номер телефона в шапке сайта на неизвестный мне номер.

    Это не метрика, а очень похоже на calltracking. Возможно, Яндекс Телефония как то была интегрирована в счетчик.
    Ответ написан
    6 комментариев
  • Как часто Docker выполняет logout regestry?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    как часто docker выполняет команду logout и выполняется ли она вообще

    Logout из реестра не выполняется автоматически.
    Ответ написан
    3 комментария
  • Как получить ближайшие вложенные страницы?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    'numberposts' => -1 рекурсивно получает все дочерние страницы указанного родителя, если его не указывать, то вернуться лишь те дочерние страницы, у которых parent_id == id родителя:
    <?php
    $id = 1;
    
    $config = [
      'parent' => $id,
      'post_type' => 'page',
      // 'numberposts' => -1,
      'post_status' => 'publish',
    ];
    
    $child = get_pages($config);
    
    if($child) {
      foreach($child as $page) {
        echo $page->ID;
      }
    } else {
      echo 'У этой страницы нет дочерних страниц.';
    }
    Ответ написан
    Комментировать
  • Что делать если на сервер поступает 2 и более запроса на обработку?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Flask является синхронным фреймворком, а значит все операции будет выполнять последовательно.
    и как это устранить

    Использовать:
    - Многопоточность в Flask.
    - WSGI серверы, которые способны обрабатывать множество запросов параллельно, используя многопроцессорность или многопоточность.
    - Изначально асинхронные фреймворки, например FastAPI.
    - Очереди, но здесь опять синхронное выполнение.
    Ответ написан
    4 комментария
  • Какой выбрать стек технологий?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Какой выбрать стек технологий?

    Тот, который знаете. Вам необходимо отталкиваться от трудозатрат, если Вы можете себе позволить изучить технологию, то можно рассматривать любые узкоспециализированные инструменты.

    Учитывая, что Вы указали Python, то:
    - Back: Python + Django или FastAPI (если не будет хватить Django).
    - Front: Python (Django templates), либо отдельный фронт на React/Vue (если будет иметь смысл).
    Python + Flask и связанное с этим, например, Bootstrap и тому подобное

    Bootstrap не имеет никакого отношения к Python и его экосистеме.
    Мобильное приложение для Android, которое по сути повторяло бы функциональность WEB, но со своими собственными оговорками.

    От самого простого:
    - Cordova.
    - React Native.
    - Flutter.
    - Java и Kotlin смысла не вижу рассматривать в Вашем случае.
    Ответ написан
    Комментировать