Intereting Posts
Как отображать СТРАНИЦЫ дочерних категорий на странице категории Расширенные пользовательские поля – отображается, когда используется конкретный шаблон? Загрузить / просмотреть схему (или DTD) для импорта XML Извлечь встроенное видео из содержимого Импорт пользовательских записей таблицы DB в виде сообщений с категориями wp_mail () не работает в localhost Отображение страницы автора, если у пользователя нет сообщений Добавление пользовательских слизней: родительская страница / имя пользователя / дочерняя страница / Пользовательский тип сообщения Тип Дисплей Загружать сообщения динамически Должен ли я получать данные, управляемые плагином, используя его API или WordPress API? Может ли большее количество зарегистрированных размеров изображения влиять на производительность? Woocommerce включает пользовательскую таблицу стилей после стилизации woocommerce Атрибут Shortcode содержит клонирование всех атрибутов коротких кодов Создание пользовательских связей типа post

Оптимизация обратных вызовов коротких кодов

Я создал плагин для добавления коротких кодов на моем сайте WordPress. Но я новичок в PHP, поэтому считаю, что у него могут быть некоторые ошибки или способы его оптимизации.

Он работает нормально, и, видимо, проблем нет. Использование памяти – 00.04MByte. Не могли бы вы взглянуть? Большое спасибо!

add_action( 'wp_enqueue_scripts', 'prefix_add_my_stylesheet' ); function prefix_add_my_stylesheet() { // Respects SSL, Style.css is relative to the current file wp_register_style( 'prefix-style', plugins_url('style.css', __FILE__) ); wp_enqueue_style( 'prefix-style' ); } /* Adsesnse Shortcode */ function get_adsense($atts) { return 'THE_ADSENSE_SCRIPT_GOES_HERE '; } add_shortcode('adsense', 'get_adsense'); /*Padding Shortcodes*/ function get_pad5($atts) { return '<div class="pad5"></div>'; } add_shortcode('pad5', 'get_pad5'); function get_pad10($atts) { return '<div class="pad10"></div>'; } add_shortcode('pad10', 'get_pad10'); function get_pad20($atts) { return '<div class="pad20"></div>'; } add_shortcode('pad20', 'get_pad20'); function get_pad25($atts) { return '<div class="pad25"></div>'; } add_shortcode('pad25', 'get_pad25'); function get_pad50($atts) { return '<div class="pad50"></div>'; } add_shortcode('pad50', 'get_pad50'); function get_pad75($atts) { return '<div class="pad75"></div>'; } add_shortcode('pad75', 'get_pad75'); function get_pad100($atts) { return '<div class="pad100"></div>'; } add_shortcode('pad100', 'get_pad100'); function get_clr($atts, $content=null) { return '<div class="clr">' . $content . '</div>'; } add_shortcode( 'clr', 'get_clr' ); /* Alert Boxes */ function get_alertblue($atts, $content=null) { return '<div class="ultra_alert_box ultra_box-blue">' . $content . '</div>'; } add_shortcode( 'alertblue', 'get_alertblue' ); function get_alertgreen($atts, $content=null) { return '<div class="ultra_alert_box ultra_box-green">' . $content . '</div>'; } add_shortcode( 'alertgreen', 'get_alertgreen' ); function get_alertyellow($atts, $content=null) { return '<div class="ultra_alert_box ultra_box-yellow">' . $content . '</div>'; } add_shortcode( 'alertyellow', 'get_alertyellow' ); function get_alertred($atts, $content=null) { return '<div class="ultra_alert_box ultra_box-red">' . $content . '</div>'; } add_shortcode( 'alertred', 'get_alertred' ); function get_alertgray($atts, $content=null) { return '<div class="ultra_alert_box ultra_box-gray">' . $content . '</div>'; } add_shortcode( 'alertgray', 'get_alertgray' ); /* Style Boxes */ function get_stylegreen($atts, $content=null) { return '<div class="ultra_style_box ultra_style-green">' . $content . '</div>'; } add_shortcode( 'stylegreen', 'get_stylegreen' ); function get_styleblue($atts, $content=null) { return '<div class="ultra_style_box ultra_style-blue">' . $content . '</div>'; } add_shortcode( 'styleblue', 'get_styleblue' ); function get_styleyellow($atts, $content=null) { return '<div class="ultra_style_box ultra_style-yellow">' . $content . '</div>'; } add_shortcode( 'styleyellow', 'get_styleyellow' ); function get_stylered($atts, $content=null) { return '<div class="ultra_style_box ultra_style-red">' . $content . '</div>'; } add_shortcode( 'stylered', 'get_stylered' ); function get_stylegray($atts, $content=null) { return '<div class="ultra_style_box ultra_style-gray">' . $content . '</div>'; } add_shortcode( 'stylegray', 'get_stylegray' ); function get_stylewhite($atts, $content=null) { return '<div class="ultra_style_box ultra_style-white">' . $content . '</div>'; } add_shortcode( 'stylewhite', 'get_stylewhite' ); 

Существует очень важный принцип программирования: DRY – Не повторяйте себя .
Всякий раз, когда вы понимаете, что повторяете почти ту же работу, попробуйте написать абстракцию.

Для ваших штрих-кодов pad* это означает:

 function get_padding( $atts ) { $args = shortcode_atts( array( 'num' => 10 ), $atts ); return str_repeat( ' ', (int) $args['num'] ); } add_shortcode('pad', 'get_padding'); 

Теперь вы можете использовать короткий код [pad] следующим образом:

 [pad num=5] [pad num=10] [pad num=12000] [pad num=18] 

Преимущество: если вы решили изменить внутреннюю логику ваших коротких кодов, вам нужно коснуться только одной функции, а не дюжины.

См. Также этот ответ .


Существует и другая возможность: использовать один обратный вызов для нескольких коротких кодов. Это использует третий параметр, который получает каждый обратный вызов короткого кода.

 function multipass( $atts, $content = '', $shortcode = '' ) { $args = shortcode_atts( array ( 'name' => 'example' ), $atts ); $name = esc_attr( $args['name'] ); $content = esc_textarea( $content ); if ( 'textarea' === $shortcode ) return "<textarea name='$name'>$content</textarea>"; if ( 'input' === $shortcode ) return "<input name='$name' value='$content' />"; } add_shortcode( 'textarea', 'multipass' ); add_shortcode( 'input', 'multipass' ); 

Связанный

  • Организация коротких кодов. Как отобразить их все и их атрибуты?
  • Показывать короткий код без его выполнения
  • Выполнить короткий код только в другом коротком коде
  • Какие символы разрешены как тег короткого кода и как их следует дезинфицировать?