Htmlspecialchars - Преобразует специальные символы в HTML-сущности. PHP: делаем "мини-БД" на текстовом файле Случайный текст по умолчанию в поле контента в админке
Коллекция полезных снипетов (кодов). Коды рассчитаны на частые задачи при редактировании или создании темы.
Как правило, все эти коды нужно размещать в файл темы functions.php . Или, можно создать отдельный.php файл разместить код туда и подключить файл в functions.php темы так:
// подключаем сниппеты require_once "functions-snippets.php";
Внешний вид CSS для TinyMCE редактораПодключает файл стилей к редактору WordPress TinyMCE. Так мы сможем настроить стили редактора в админке и при редактировании записи видеть как она выглядит во фронт-энде.
// Стили для TinyMCE редактора // Нужно создать файл "editor-styles.css" в папке темы add_action("current_screen", "my_theme_add_editor_styles"); function my_theme_add_editor_styles() { add_editor_style("editor-styles.css"); }
CSS для страницы входа (login)## CSS для страницы входа (login) ## Нужно создать файл "wp-login.css" в папке темы add_action("login_head", "my_loginCSS"); function my_loginCSS() { echo ""; }
CSS для админ-панелиПодключает файл стилей на все страницы админ панели. Так, можно удобно переделывать и дополнять стили админки.
## CSS стили для админ-панели. Нужно создать файл "wp-admin.css" в папке темы add_action("admin_enqueue_scripts", "my_admin_css", 99); function my_admin_css(){ wp_enqueue_style("my-wp-admin", get_template_directory_uri() ."/wp-admin.css"); }
Удаление Админ-бара с фронт-эндаАдмин бар может мешаться когда в теме используются фиксированные (плавающие) блоки. В таких случаях иногда проще убрать этот бар.
## Удаляет Админ-бар с фронт-энда add_filter("show_admin_bar", "__return_false"); ## Включаем поддержку виджетов. Добавляем область для виджетов if(function_exists("register_sidebar")){ register_sidebar(array("before_widget" => "", "after_widget" => "", "before_title" => "", "after_title" => "",)); }
Активация поддержки произвольного менюРегистрирует область (место) для меню и включает поддержку меню. После установки этого кода в админ-панели появится возможность создавать произвольные меню и прикреплять их в созданные этим кодом области. В шаблоне меню выводиться функцией wp_nav_menu() .
## Add custom menus register_nav_menus(array("main" => "Главное меню", "in_footer" => "Меню в подвале",));
Добавляем ссылки на RSS фид записей и фид комментариев вНастраиваемая фоновая картинка или фон ## Включает возможность устанавливать фоновую картинку из админки add_theme_support("custom-background");
В результате код выведет:
body.custom-background { background-color: #bdd96e; }
Включение шорткодов в виджет «Текст»Многие плагины используют шотркоды, но не у всех есть виджеты. В таком случае было бы удобно использовать шорткод плагина в виджете «Текст».
## Шорткоды в виджете "Текст" if(! is_admin()){ add_filter("widget_text", "do_shortcode", 11); }
Случайный текст по умолчанию в поле контента в админкеПри создании новой записи (поста или страницы) иногда удобно, чтобы там были какие-то заметки, пояснения как и что нужно писать. Для этого можно вставлять в контент дефолный текст:
## Случайный дефолтный текст для редактора add_filter("default_content", "writing_encouragement_func"); function writing_encouragement_func($content) { global $post_type; // Тексты для редактора, тип записи post if($post_type == "post"){ $array = array("Какое-то сообщение", "Какое-то сообщение",); return $array[ array_rand($array) ]; } // Тексты для редактора, тип записи page else { $array = array("Какое-то сообщение", "Какое-то сообщение",); return $array[ array_rand($array) ]; } }
Изменение количество записей на странице поискаПо умолчанию на странице поиска показывается столько же записей на странице сколько и везде, сколько выставлено в настройках.
Этот пример показывает как вывести 100 записей на странице.
## change amount of posts on the search page - set here to 100 add_action("pre_get_posts", "search_results_per_page_func"); function search_results_per_page_func($query) { // запрос на странице поиска if(! is_admin() && $query->is_main_query() && $query->is_search()){ $query->set("posts_per_page", 100); } return $query; }
Определяет сколько слов должно быть в цитате, которая обычно выводится на архивных страницах записей (рубрики, метки). Цитату выводит функция the_excerpt() .
## Изменение длины цитаты add_filter("excerpt_length", "custom_excerpt_length_func"); function custom_excerpt_length_func($length) { return 20; // кол-во слов }
Удаление полей из профиля в админке: AIM, Yahoo IM, Jabber ## удаляет из профиля поля: AIM, Yahoo IM, Jabber / Google Talk add_filter("user_contactmethods", "remove_contactmethod"); function remove_contactmethod($contactmethods) { unset($contactmethods["aim"]); unset($contactmethods["jabber"]); unset($contactmethods["yim"]); return $contactmethods; } Добавление полей в профиль в админке: facebook, twitter ## Добавляет в профиль поля: AIM, Yahoo IM, Jabber / Google Talk add_filter("user_contactmethods", "add_contactmethod"); function add_contactmethod($contactmethods) { $contactmethods["twitter"] = "Twitter"; $contactmethods["facebook"] = "Facebook"; return $contactmethods; } Добавление класса has_sidebar к тегу , если есть сайдбарДля того чтобы этот хак работал, нужно чтобы в теме в теге использовался, как принято, тег шаблона body_class() .
## Добавление класса `has_sidebar` к тегу ``, если есть сайдбар add_filter("body_class", "has_sidebar_func"); function has_sidebar_func($classes){ if(is_active_sidebar("sidebar")){ // добавляем класс $classes = "has_sidebar"; } return $classes; }
Добавление виджета в консольИногда может пригодится добавить виджет в консоль админ-панели, чтобы в нем разместить важную информацию касательно текущей темы.
## Произвольный виджет в консоли в админ-панели add_action("wp_dashboard_setup", "my_custom_dashboard_widgets"); function my_custom_dashboard_widgets() { wp_add_dashboard_widget("custom_help_widget", "Заметки темы", "custom_dashboard_help"); } function custom_dashboard_help() { echo "
Добро пожаловать в тему "Моя тема"! Тут некоторые заметки по теме."; }
Получим такой виджет:
Включение скрипта ответа на комментарийЭтот скрипт передвигает форму комментариев при нажатии на кнопку "Ответить".
## Подключение скрипта ответа на комментарий add_action("wp_footer", "enable_threaded_comments"); function enable_threaded_comments(){ if(is_singular() && comments_open() && get_option("thread_comments")) wp_enqueue_script("comment-reply"); }
Картинки Включение миниатюр записиПо умолчанию для записей нет блока где можно установить миниатюру записи. Чтобы такой блок появился, его нужно включить. Нужно включить поддержку миниатюр. Делается это очень просто:
## Включение миниатюр записи add_theme_support("post-thumbnails"); set_post_thumbnail_size(200, 200, true); // Normal post thumbnails
Создание дополнительных промежуточных размеров миниатюрПри загрузке изображения для нее создаются дополнительные размеры - миниатюры. К базовым размерам можно легко добавить свои - произвольные.
## Создание промежуточных размеров миниатюр if(function_exists("add_image_size")){ add_image_size("mysize-horizont", 300, 200, true); add_image_size("mysize-vertical", 400, 500, true); }
Чтобы получить зарегистрированный размер, используйте функцию:
Добавление миниатюры в RSS фид
Этот код добавляет миниатюру записи в начало RSS фида.
## Добавление миниатюры в RSS фид add_filter("the_excerpt_rss", "add_thumbnail_to_feed"); //add_filter("the_content_feed", "add_thumbnail_to_feed"); // обычно этот хук не используется, но тоже может быть... function add_thumbnail_to_feed($content){ $img = get_the_post_thumbnail(null, array(100, 80), array("align" => "left", "style" => "margin-right:15px;")); $content = $img . $content; return $content; }
Отменяем обертку картинок в тегВ контенте
При выводе контента в теме с помощью the_content() , срабатывает функция wpautop() и в результате если находится на отдельной строке, он оборачивается в
Т.е. было стало .
Этот пример показывает как убрать такое странное поведение.
## Отменяем обертку картинок в тег `
` в контенте add_filter("the_content", "remove_img_ptags_func"); function remove_img_ptags_func($content){ return preg_replace("/
\s*((?:]+>)?\s*]+>\s*(?:)?)\s*/i", "\1", $content);
}
// Подключение скрипта html5 для IE с cdn
add_action("wp_head", "IEhtml5_shim_func");
function IEhtml5_shim_func(){
echo "";
// или если нужна еще и поддержка при печати
// echo "";
}
По умолчанию кол-во ревизий записи неограниченно и это может излишне захламлять базу данных. Совсем отключать ревизии тоже не самое лучшее решение, потому что бывает что при редактировании записи что-то идет не так и внесенные данные теряются - работа коту под хвост...
Идеально - ограничить кол-во ревизий, например до 5:
If(! defined("WP_POST_REVISIONS")) define("WP_POST_REVISIONS", 5);
Определять константу надо в плагине или раньше.
Защита Удаление версии WPНужно это для того, чтобы хакеры не знали версию WP и не могли определить слабые места. Вместе с этим кодом нужно также удалить файл readme.html в корне сайта, потому что в нем тоже указывается текущая версия.
## Полное Удаление версии WP ## Также нужно удалить файл readme.html в корне сайта remove_action("wp_head", "wp_generator"); // из заголовка add_filter("the_generator", "__return_empty_string"); // из фидов и URL
Отключим выводи ошибок на странице авторизацииВ случае ошибки, при вводе логина или пароля, WP сообщает что именно было введен неправильно: логин или пароль. Это дает дополнительную информацию для «подборщиков» паролей.
Отключим возможность править файлы в админке для тем и плагиновВозможность редактировать файлы прямо из админки может стать большой дырой в защите. Давайте её закроем.
## Отключим возможность редактировать файлы в админке для тем, плагинов define("DISALLOW_FILE_EDIT", true);
Закроем публикацию через xmlrpc.phpПо умолчанию включена возможность публикации записей через файл xmlrpc.php .
Это такая возможность пубилковать записи из вне, например с почты... Чаще всего этот функционал не нужен и в нем могут быть потенциальные дыры. Поэтому его чаще всего желаетльно отключить. Кстати, в ранних версиях WordPress этот функционал был отключен по умолчанию и его нужно было включить чтобы им пользоваться.
## закроем возможность публикации через xmlrpc.php add_filter("xmlrpc_enabled", "__return_false");
(PHP 4, PHP 5, PHP 7)
htmlspecialchars — Преобразует специальные символы в HTML-сущности
ОписаниеString htmlspecialchars (string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]])
В HTML некоторые символы имеют особый смысл и должны быть представлены в виде HTML сущностей, чтобы сохранить их значение. Эта функция возвращает строку, над которой проведены эти преобразования. Если вам нужно преобразовать все возможные сущности, используйте htmlentities() .
Если входная строка переданная в эту функцию и результирующий документ используют одинаковую кодировку символов, то этой функции достаточно, чтобы подготовить данные для вставки в большинство частей HTML документа. Однако, если данные содержат символы, не определенные в кодировке символов результирующего документа и вы ожидаете сохранения этих символов (как числовые или именованные сущности), то вам недостаточно будет этой и htmlentities() функций (которые только преобразуют подстроки с соответствующими сущностями). Необходимо использовать функцию mb_encode_numericentity() .
Производятся следующие преобразования:
- "&" (амперсанд) преобразуется в "&"
- """ (двойная кавычка) преобразуется в """ в режиме ENT_NOQUOTES is not set.
- """ (одиночная кавычка) преобразуется в """ (или ") только в режиме ENT_QUOTES .
- "" (знак "больше чем") преобразуется в ">"
Конвертируемая строка (string ).
Битовая маска из нижеуказанных флагов, определяющих режим обработки кавычек, некорректных кодовых последовательностей и используемый тип документа. По умолчанию используется ENT_COMPAT | ENT_HTML401 .
ENT_COMPAT | Преобразует двойные кавычки, одинарные кавычки не изменяются. |
ENT_QUOTES | Преобразует как двойные, так и одинарные кавычки. |
ENT_NOQUOTES | Оставляет без изменения как двойные, так и одинарные кавычки. |
ENT_IGNORE | Без всяких уведомительных сообщений отбрасывает некорректные кодовые последовательности вместо возврата пустой строки. Использование этого флага не рекомендуется, так как это может привести к » негативным последствиям, связанным с безопасностью . |
ENT_SUBSTITUTE | Заменяет некорреткные кодовые последовательности символом замены Юникода U+FFFD в случае использования UTF-8 и FFFD; при использовании другой кодировки, вместо возврата пустой строки. |
ENT_DISALLOWED | Заменяет неверные коды символов для заданного типа документа символом замены юникода U+FFFD (UTF-8) или FFFD; (при использовании другой кодировки) вместо того, чтобы оставлять все как есть. Это может быть полезно, например, для того, чтобы убедиться в формальной правильности XML-документов со встроенным внешним контентом. |
ENT_HTML401 | Обработка кода в соответствии с HTML 4.01. |
ENT_XML1 | Обработка кода в соответствии с XML 1. |
ENT_XHTML | Обработка кода в соответствии с XHTML. |
ENT_HTML5 | Обработка кода в соответствии с HTML 5. |
Необязательный аргумент определяющий кодировку, используемую при конвертации симоволов.
Если не указан, то значением по умолчанию для encoding зависит от используемой версии PHP. В PHP 5.6 и старше, для значения по умолчанию используется конфигурационная опция default_charset . В PHP 5.4 и 5.5 используется UTF-8 по умолчанию. Более ранние версии PHP используют ISO-8859-1 .
Хотя этот аргумент является технически необязательным, настоятельно рекомендуется указать правильное значение для вашего кода, если вы используете PHP 5.5 или выше, или если ваша опция конфигурации default_charset может быть задана неверно для входных данных.
Для целей этой функции кодировки ISO-8859-1 , ISO-8859-15 , UTF-8 , cp866 , cp1251 , cp1252 и KOI8-R являются практически эквивалентными, предполагая то, что сама строка string содержит корректные символы в указанной кодировке, то символы, изменяемые htmlspecialchars() , останутся на тех же местах во всех этих кодировках.
Поддерживаются следующие кодировки:
ISO-8859-1 | ISO8859-1 | Западно-европейская Latin-1. |
ISO-8859-5 | ISO8859-5 | Редко используемая кириллическая кодировка (Latin/Cyrillic). |
ISO-8859-15 | ISO8859-15 | Западно-европейская Latin-9. Добавляет знак евро, французские и финские буквы к кодировке Latin-1(ISO-8859-1). |
UTF-8 | 8-битная Unicode, совместимая с ASCII. | |
cp866 | ibm866, 866 | Кириллическая кодировка, применяемая в DOS. |
cp1251 | Windows-1251, win-1251, 1251 | Кириллическая кодировка, применяемая в Windows. |
cp1252 | Windows-1252, 1252 | Западно-европейская кодировка, применяемая в Windows. |
KOI8-R | koi8-ru, koi8r | Русская кодировка. |
BIG5 | 950 | Традиционный китайский, применяется в основном на Тайване. |
GB2312 | 936 | Упрощенный китайский, стандартная национальная кодировка. |
BIG5-HKSCS | Расширенная Big5, применяемая в Гонг-Конге. | |
Shift_JIS | SJIS, SJIS-win, cp932, 932 | Японская кодировка. |
EUC-JP | EUCJP, eucJP-win | Японская кодировка. |
MacRoman | Кодировка, используемая в Mac OS. | |
"" | Пустая строка активирует режим определения кодировки из файла скрипта (Zend multibyte), default_charset и текущей локали (см. nl_langinfo() и setlocale() ), в указанном порядке. Не рекомендуется к использованию. |
Замечание : Остальные кодировки не поддерживаются, вместо них будет применена кодировка по умолчанию и сгенерировано предупреждение.
double_encodeЕсли параметр double_encode выключен, то PHP не будет преобразовывать существующие html-сущности. По умолчанию преобразуется все без ограничений.
20.6KPHP — это встраиваемый серверный язык программирования. Большая часть его синтаксиса заимствована из C , Java и Perl . А также добавлена пара уникальных характерных только для PHP функций . Основная цель этого языка — создание динамически генерируемых PHP HTML страниц .
PHP в HTMLПри создании сложных веб-страниц вы столкнетесь с необходимостью объединить PHP и HTML для реализации конкретных задач. На первый взгляд это может показаться сложным, так как PHP и HTML являются двумя независимыми дисциплинами, но это не так. PHP предназначен для взаимодействия с HTML , и его код может быть включен в разметку страницы.
В HTML-страницы PHP-код включается с помощью специальных тегов. Когда пользователь открывает страницу, сервер обрабатывает PHP-код , а затем отправляет результат обработки (не сам PHP-код ) в браузер.
HTML и PHP довольно просто объединить. Любая часть PHP-скрипта за пределами тегов игнорируется PHP-компилятором и передается непосредственно в браузер. Если посмотреть на пример, приведенный ниже, то можно увидеть, что полный PHP-скрипт может выглядеть следующим образом:
Привет, сегодня .
Приведенный выше код — это обычный HTML с небольшим фрагментом PHP , который выводит текущую дату, используя встроенную функцию date . При этом весь HTML будет игнорироваться PHP-компилятором и передаваться в браузер без изменений.
Интегрировать PHP в HTML действительно очень легко. Помните, что скрипт — это HTML-страница с включением определенного PHP кода . Можно создать скрипт, который будет содержать только HTML (без тегов ), и он будет нормально работать.
Более продвинутые методы:
- Menu Item
и результат:
PHP в HTML с помощью short_open_tagЕсли нужно максимально сократить код, перед тем, как в PHP вставить HTML , вы можете использовать short_tags . В результате не нужно будет вводить .
Имейте в виду, что если нужно создать сайт, совместимый с максимальным количеством платформ, при вставке PHP в HTML не стоит полагаться на short_tags .
HTML в PHP с использованием echoЕще один способ интеграции HTML в PHP-файл — команда echo: .
Это повлияет на подсветку разметки в большинстве редакторов. Поэтому необходимо выделять все двойные кавычки внутри HTML-кода с помощью обратной косой черты.
PHP в HTML — расширения файловДля стандартно настроенного веб-сервера :
AddHandler cgi-script .html .htm
Для веб-сервера с запущенным FastCGI :
AddHandler fcgid-script .html .htm
HTML в PHPТакже можно использовать HTML-код в PHP-скриптах . Все, что нужно сделать, это при открытии страницы с помощью PHP изменить порядок открывающихся тегов HTML и PHP .
I can’t use PHP in my HTML pages. For example, index.html . I’ve tried using both:
Neither of these work. My server offers PHP, and when I use a the .php extension, it works properly. Is this a problem or do I have to change the preferences in php.ini ?
You can’t run PHP in .html files because the server does not recognize that as a valid PHP extension unless you tell it to. To do this you need to create a .htaccess file in your root web directory and add this line to it:
AddType application/x-httpd-php .htm .html
This will tell Apache to process files with a .htm or .html file extension as PHP files.
I think writing PHP into an .html file is confusing and anti-natural. Why would you do that??
Anyway, if what you want is to execute PHP files and show them as .html in the address bar, an easiest solution would be using .php as normal, and write a rule in your .htaccess like this:
RewriteRule ^([^.]+)\.html$ $1.php [L]
In order to use php in .html files, you must associate them with your PHP processor in your HTTP server’s config file. In Apache, that looks like this:
AddHandler application/x-httpd-php .html
You can modify .htaccess like others said, but the fastest solution is to rename the file extension to .php
For having .html files parsed as well, you need to set the appropriate handler in your server config.
For Apache httpd 2.X this is the following line
AddHandler application/x-httpd-php .html