• Resolved webdezy

    (@webdezy)


    Начиная с версии 5.5.0 перестала работать транслитерация, если я отдельно вызываю функцию sanitize_title(). Посмотрел изменения по коду, как я понял это связано с добавленным методом при инициализации класса в class-main.php

    if ( ! $this->request->is_allowed() ) {
      return;
    }

    То есть проверка не проходит и все нужные хуки не цепляются. Что это за ограничение и для чего оно сделано?

Viewing 5 replies - 1 through 5 (of 5 total)
  • Plugin Author kaggdesign

    (@kaggdesign)

    Ограничение сделано для того, чтобы плагин работал только в админке, по cron и на POST-запросах с фронта. Иначе вот что происходит. Плюс ряд дополнительных проблем.

    Если вам нужно вызвать sanitize_title() с транслитерацией для своих целей, используйте такой код:

    $GLOBALS['cyr_to_lat_plugin']->sanitize_title( $title );

    или даже

    $GLOBALS['cyr_to_lat_plugin']->transliterate( $title );
    Thread Starter webdezy

    (@webdezy)

    Мда, такое себе решение конечно. Получается, что на сайтах, где раньше это могло использоваться, сейчас могут вылезти какие-нить косяки, т.к. санитайзинг этот не работает, собственно с чем я и столкнулся.
    Тогда уж кастомную функцию использовать типа такого:

    function webdezy_sanitize_title( $title ) {
    	if ( class_exists( 'Cyr_To_Lat\Main' ) ) {
    		$cyr_to_lat = new Cyr_To_Lat\Main();
    		$title = sanitize_title_with_dashes( $cyr_to_lat->transliterate( $title ) );
    	}
    	return $title;
    }

    Но такой вариант вещей мне вообще не нравится, задумался о более простых альтернативах вашего плагина =(

    Plugin Author kaggdesign

    (@kaggdesign)

    Это решение вынужденное, ради исправления предыдущих проблем.

    Ваше право искать альтернативы. Но такого функционала больше нет ни у кого.

    Транслитерация на sanitize_title() – решение 15-летней давности. Эта функция вызывается десятки раз на каждой странице, и 99% вызовов не относятся к функционалу плагина. У нас есть идея переписать плагин целиком, используя современные хуки.

    Plugin Author kaggdesign

    (@kaggdesign)

    И да – ваш код имеет серьёзные проблемы. Вы создаёте классс при каждом вызове webdezy_sanitize_title(), а значит, плодите экземляры класса Main, который создает экземпляры других классов и некоторые экземпляры добавляют хуки. И эти хуки будут исполняться столько раз, сколько экземпляров главного класса создано. Кроме того, само создание классов бесцельно съедает ресурсы.

    Вам надо использовать глобальную переменную, которую я указал в своём примере. Она уже содержит готовый экземпляр класса Main.

    Thread Starter webdezy

    (@webdezy)

    Ага, спасибо, здесь вы правы пожалуй, я не шибко эксперт в ООП)

Viewing 5 replies - 1 through 5 (of 5 total)
  • The topic ‘5.5.0 – не работает при вызове sanitize_title()’ is closed to new replies.