Безвозвратный add review php. Как написать плагин для WordPress
Однажды Вы решили создать свой сайт или блог, а для системы управления Вы выбрали WordPress…Прошло время ваш сайт становится все более и более читаемым и тут, вы поняли, что для ещё большей популярности необходимо добавить немного функционала к сайту или же просто автоматизировать какое-то действие.
Вы идете на «склад» плагинов для wordpress и обнаруживаете, что необходимого плагина для Вас нету. Что же делать? Как быть? Если вы хотя бы немного знакомы с азами программирования на php, верстке, то Вам не составит труда Самому написать плагин для WordPress .
А теперь отправимся на «кухню» для приготовления нашего плагина.
P.s. Если знаний в php и верстке нету… не расстраивайтесь, попросите кого-либо написать Вам нужный функционал 🙂
Прежде чем начать писать плагин необходимо обратится в документацию WordPress где описаны основные принципы написания плагинов и некоторые примеры кода.
Я не буду дублировать эту информацию, а сразу перейду непосредственно к написанию кода.
Напишем простенький плагин, который позволит сохранять и выводить отзывы о Вашем сайте. Конечно, такие плагины уже есть, но для примера сойдет как раз.
Первое, что мы сделаем, это придумаем уникальное название нашему плагину - «AdvUserReviews «.
Далее создадим в директории Вашего сайта «/wp-content/plugins/» новую директорию «advuserreviews». И в ней создадим файл «advuserreviews.php». Это будет основной файл, который будет отвечать за общею инициализацию. (Желательно используйте кодировку для файлов UTF-8).
В самом начале файла необходимо указать основную информацию о плагине
Теперь, если перейти в панель управления, то можно увидеть, что система нашла новый плагин и предлагает его активировать. Но пока что это делать рано.
Наш новый плагин мы будем писать в стиле ООП и вся обработка данных будет находится в одном файле. Создадим основной каркас файла.
// Stop direct call if(preg_match("#" . basename(__FILE__) . "#", $_SERVER["PHP_SELF"])) { die("You are not allowed to call this page directly."); } if (!class_exists("AdvUserReviews")) { class AdvUserReviews { // Хранение внутренних данных public $data = array(); // Конструктор объекта // Инициализация основных переменных function AdvUserReviews() { } } } global $rprice; $rprice = new AdvUserReviews();
Теперь конструктор объекта дополним следующим кодом:
Function AdvUserReviews() { global $wpdb; // Объявляем константу инициализации нашего плагина DEFINE("AdvUserReviews", true); // Название файла нашего плагина $this->plugin_name = plugin_basename(__FILE__); // URL адрес для нашего плагина $this->plugin_url = trailingslashit(WP_PLUGIN_URL."/".dirname(plugin_basename(__FILE__))); // Таблица для хранения наших отзывов // обязательно должна быть глобально объявлена перменная $wpdb $this->tbl_adv_reviews = $wpdb->prefix . "adv_reviews"; // Функция которая исполняется при активации плагина register_activation_hook($this->plugin_name, array(&$this, "activate")); // Функция которая исполняется при деактивации плагина register_deactivation_hook($this->plugin_name, array(&$this, "deactivate")); // Функция которая исполняется удалении плагина register_uninstall_hook($this->plugin_name, array(&$this, "uninstall")); }
В конструкторе объекта мы используем 3 «хука» или «зацепки» (что это?): register_activation_hook , register_deactivation_hook и register_uninstall_hook - это функции, которые выполняются при активации, деактивации плагина и его удаления соответственно.
Теперь непосредственно реализуем эти функции.
/** * Активация плагина */ function activate() { global $wpdb; require_once(ABSPATH . "wp-admin/upgrade-functions.php"); $table = $this->tbl_adv_reviews; // Определение версии mysql if (version_compare(mysql_get_server_info(), "4.1.0", ">=")) { if (! empty($wpdb->charset)) $charset_collate = "DEFAULT CHARACTER SET $wpdb->charset"; if (! empty($wpdb->collate)) $charset_collate .= " COLLATE $wpdb->collate"; } // Структура нашей таблицы для отзывов $sql_table_adv_reviews = " CREATE TABLE `".$wpdb->prefix."adv_reviews` (`ID` INT(10) UNSIGNED NULL AUTO_INCREMENT, `review_title` VARCHAR(255) NOT NULL DEFAULT "0", `review_text` TEXT NOT NULL, `review_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `review_user_name` VARCHAR(200) NULL, `review_user_email` VARCHAR(200) NULL, PRIMARY KEY (`ID`))".$charset_collate.";"; // Проверка на существование таблицы if ($wpdb->get_var("show tables like "".$table.""") != $table) { dbDelta($sql_table_adv_reviews); } } /** * Деактивация плагина */ function deactivate() { return true; } /** * Удаление плагина */ function uninstall() { global $wpdb; $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}adv_reviews"); }
Переменная $wpdb отвечает за запросы к базе Данных. Функция dbDelta анализирует текущую структуру таблицы, сравнивает ee с желаемой структурой таблицы, и либо добавляет или изменяет таблицу по мере необходимости.
Соответственно, при активации плагина создается структура таблицы для хранения отзывов. При деактивации плагина не происходит никаких действий, а вот при удалении мы удаляем нашу таблицу. Более подробно действия можно понять по исходному коду.
Основная структура нового плагина готова. Теперь необходимо приступить к написанию функциональной части. Для этого в конструктор класса нам необходимо добавить следующие строчки кода:
// Если мы в адм. интерфейсе if (is_admin()) { // Добавляем стили и скрипты add_action("wp_print_scripts", array(&$this, "admin_load_scripts")); add_action("wp_print_styles", array(&$this, "admin_load_styles")); // Добавляем меню для плагина add_action("admin_menu", array(&$this, "admin_generate_menu")); } else { // Добавляем стили и скрипты add_action("wp_print_scripts", array(&$this, "site_load_scripts")); add_action("wp_print_styles", array(&$this, "site_load_styles")); add_shortcode("show_reviews", array (&$this, "site_show_reviews")); }
Разберем подробнее данный участок кода. Начнем с панели администрирования.
Функция «is_admin
» проверяет в каком режиме сейчас мы работаем - на сайте или в панель управления.
Далее используется несколько хуков, для функций:
- wp_print_scripts - Добавляем необходимые javascript файлы
- wp_print_styles - Добавляем необходимые стили
- admin_menu - Добавляем новое меню в панели управления
Каждому хуку соответствует реализованный метод в нашем классе. В котором выполняются необходимые операции.
Рассмотрим код для подключения стилей и скриптов
/** * Загрузка необходимых скриптов для страницы управления * в панели администрирования */ function admin_load_scripts() { // Регистрируем скрипты wp_register_script("advReviewsAdminJs", $this->plugin_url . "js/admin-scripts.js"); wp_register_script("jquery", $this->plugin_url . "js/jquery-1.4.2.min.js"); // Добавляем скрипты на страницу wp_enqueue_script("advReviewsAdminJs"); wp_enqueue_script("jquery"); } /** * Загрузка необходимых стилей для страницы управления * в панели администрирования */ function admin_load_styles() { // Регистрируем стили wp_register_style("advReviewsAdminCss", $this->plugin_url . "css/admin-style.css"); // Добавляем стили wp_enqueue_style("advReviewsAdminCss"); }
Здесь используются следующие функции.
Каждое действие зависит от переданного параметра «action», соответственно «edit» -редактирование отзыва, «submit» - сохранение отредактированного отзыва и «delete» - удаление отзыва.
Обмен данными со страницами отображения происходит через свойство объекта «data». Исходный код этих страниц будет выложен в архиве с данным модулем в конце статьи. Тут я их не буду вставлять, так как топик уже оказался достаточно большим.
На этом с панелью администрирования заканчиваем и переходит к отображению и добавлению отзывов со стороны пользователей.
Что бы указать wordpress, когда вызывать наш плагин, необходимо зарегистрировать «shortcode», что и было сделано в конструкторе нашего класса. Подробнее об этом .
Add_shortcode("show_reviews", array (&$this, "site_show_reviews"));
Теперь на любой странице сайта можно разместить вот такой код и это заставит выполнить указанную нами функцию (передается вторым параметром). Ниже представлен исходный код данной функции.
/** * Список отзывов на сайте */ public function site_show_reviews($atts, $content=null) { global $wpdb; if (isset($_POST["action"]) && $_POST["action"] == "add-review") { $this->add_user_review(); } // Выбираем все отзывы из Базы Данных $this->data["reviews"] = $wpdb->get_results("SELECT * FROM `" . $this->tbl_adv_reviews . "`", ARRAY_A); ## Включаем буферизацию вывода ob_start (); include_once("site_reviews.php"); ## Получаем данные $output = ob_get_contents (); ## Отключаем буферизацию ob_end_clean (); return $output; } private function add_user_review() { global $wpdb; $inputData = array("review_title" => strip_tags($_POST["review_title"]), "review_text" => strip_tags($_POST["review_text"]), "review_user_name" => strip_tags($_POST["review_user_name"]), "review_user_email" => strip_tags($_POST["review_user_email"]),); // Добавляем новый отзыв на сайт $wpdb->insert($this->tbl_adv_reviews, $inputData); }
В принципе тут ничего сложного нету - делается SQL запрос на выборку данных, если же передан параметр «action», то сначала добавляется новый отзыв. Но стоит обратить внимание на буферизацию вывода. Она необходима для того, что бы получить данные вставляемой страницы.
Вот собственно и все. Теперь можно посмотреть, что у нас получилось. А скачать плагин и исходные коды можно вот .
Само собой это только пример создания плагина, но и сойдет как простая гостевушка, если ее немного доработать, например, добавить защиту от ботов и постраничный вывод. Удачного кодинга:)
Форма на сайте:
Панель управления плагином:
Редактирование отзыва:
Возможно также вам будет интересно:
WordPress создан для кастомизации. Он был создан таким образом, что каждую его часть можно настроить. В этом руководстве мы расскажем об одной из самых мощных возможностей WordPress, известную как пользовательские типы записей , и о том, как WordPress достиг высот с появлением этой замечательной возможности.
| Скачать исходники |
Что такое Custom Post Types?
Предположим, вы хотите сделать на вашем блоге отдельный раздел для кино-рецензий. Используя пользовательские типы записей, вы можете создать новый тип вроде Записи или Страницы , который будет содержать другой набор данных. У него будет свое меню администратора, отдельные страницы редактирования, своя таксономия и другие возможности, необходимые для полноценных публикаций.
Пользовательские типы записей - новый набор административных настроек, которые используются наряду со стандартными типами, такими как Записи , Страницы , Прикрепленные файлы и так далее. Пользовательский тип записей может хранить любой тип информации. У него есть свой редактор и медиа-загрузчик. Он использует существующую структуру таблиц WordPress для простого управления данными. Главное преимущество создания пользовательских типов записей с помощью WordPress API - это удобное использование с существующими темами и шаблонами. Пользовательские типы записей также SEO-дружественны из-за своих постоянных ссылок.
Зачем использовать пользовательские типы записей?
Пользовательские типы записей помогают хранить разные типы записей в разных корзинах. Они отделяют наши обычные записи от других. Очень просто!
Пример создания плагина Custom Post Type
Здесь мы создадим плагин для вывода записей нового типа, которые покажут наши кино-рецензии. Давайте начнем.
Шаг 1. Создаем папку WordPress плагина
Откройте свою папку с WordPress плагинами и создайте новую под названием Movie-Reviews .
Шаг 2. Создаем PHP файл
Откройте папку и создайте PHP файл под названием Movie-Reviews.php .
Шаг 3. Добавляем шапку
Откройте файл и добавьте код шапки плагина.
Перед командой закрытия PHP , введите следующую строку кода для того, чтобы выполнять пользовательскую функцию по имени create_movie_review при инициализации каждый раз, когда страница генерируется.
Add_action("init", "create_movie_review");
Шаг 5. Выполнение функции
Выполнение функции create_movie_review :
Function create_movie_review() { register_post_type("movie_reviews", array("labels" => array("name" => "Movie Reviews", "singular_name" => "Movie Review", "add_new" => "Add New", "add_new_item" => "Add New Movie Review", "edit" => "Edit", "edit_item" => "Edit Movie Review", "new_item" => "New Movie Review", "view" => "View", "view_item" => "View Movie Review", "search_items" => "Search Movie Reviews", "not_found" => "No Movie Reviews found", "not_found_in_trash" => "No Movie Reviews found in Trash", "parent" => "Parent Movie Review"), "public" => true, "menu_position" => 15, "supports" => array("title", "editor", "comments", "thumbnail", "custom-fields"), "taxonomies" => array(""), "menu_icon" => plugins_url("images/image.png", __FILE__), "has_archive" => true)); }
Функция register_post_type делает за нас большинство работы. Как только она вызывается, она готовит среду WordPress к новому пользовательскому типу записи, включая разные разделы в админ. части.
Эта функция принимает два аргумента : первый - уникальное имя пользовательского типа записей, а второй - массив, который представляет свойства нового пользовательского типа записей. Вот другой массив, который содержит разные метки, которые обозначают, какие текстовые строки будут отображаться в разных частях пользовательского типа записей, например "name " отображает название пользовательского типа записей в консоли, "edit " и "view " отображаются соответственно в кнопках Edit и View . Думаю, остальное говорит само о себе.
Аргументы :
- "public" => true - определяет видимость пользовательского типа записи и в панели администратора, и в клиентской части.
- "menu_position" => 15 - обозначает позицию меню пользовательского типа записи.
- "supports" => array("title", "editor", "comments", "thumbnail", "custom-fields" ) - определяет характеристики пользовательского типа записей, которые будут отображаться.
- "taxonomies" => array(" ") - создает пользовательские таксономии. Здесь они не определены.
- "menu_icon" => plugins_url( "images/image.png", __FILE__ ) - отображает иконку меню администратора.
- "has_archive" => true - включает архивирование пользовательского типа записи.
На странице WordPress Codex о функции register_post_type вы можете прочесть больше об аргументах, которые используются в пользовательских типах записи.
Шаг 6. Иконка для пользовательского типа записи
Сохраните иконку размером 16 x 16 px в папку вашего текущего плагина. Это необходимо для иконки пользовательского типа записи в консоли.
Шаг 7. Активируем плагин
Активируйте плагин - и готово, у вас есть новый пользовательский тип записей, у которого есть текстовый редактор, управление публикацией и изображениями, комментариями, а также редактор пользовательских полей.
Шаг 8. Добавление новой записи
Щелкните по Add New , чтобы перейти в редактор пользовательского типа записи. Напишите название фильма, рецензию и миниатюру для записи.
Шаг 9. Публикация
Опубликуйте запись и щелкните по View Movie Review , чтобы увидеть созданную кино-рецензию.
Создание полей Meta Box для пользовательских типов записей
Механизм мета-блоков использует помощь встроенной системы мета-блоков WordPress и помогает добавить поля, необходимые для пользовательских типов записей, без необходимых по умолчанию пользовательских полей в редакторе.
Шаг 1. Регистрация пользовательской функции
Откройте файл Movie-Reviews.php и добавьте следующий код перед закрывающимся PHP тегом. Это регистрирует функцию, которая будет вызвана, когда будет посещен интерфейс администратора WordPress.
Add_action("admin_init", "my_admin");
Шаг 2. Выполнение пользовательской функции
Добавьте выполнение функции my_admin , которая регистрирует мета-блоки и связывает их с пользовательским типом записей movie_reviews .
Function my_admin() { add_meta_box("movie_review_meta_box", "Movie Review Details", "display_movie_review_meta_box", "movie_reviews", "normal", "high"); }
Здесь функция add_meta_box использована для добавления мета-блоков в пользовательские типы записей.
Атрибуты :
- movie_review_meta_box - необходимый HTML атрибут id .
- Movie Review Details - текст, видимый в верхней части мета-блока.
- display_movie_review_meta_box - обратный вызов, который отображает содержимое мета-блока.
- movie_reviews - это имя пользовательского типа записей, где будет отображаться мета-блок.
- normal - определяет часть страницы, где должен быть отображен блок редактирования.
- high - определяет приоритет в контексте, в котором будут отображаться блоки.
Шаг 3. Выполнение функции display_movie_review_meta_box
ID, "movie_director", true)); $movie_rating = intval(get_post_meta($movie_review->ID, "movie_rating", true)); ?>Movie Director | |
Movie Rating |
Этот код отображает содержимое мета-блока. Здесь мы использовали объектную переменную, которая содержит информацию о каждой кино-рецензии, которая отображается в редакторе. Используя этот объект, мы получили ID записи и использовали его для запроса в базу, чтобы получить связанное имя режиссера и рейтинг, что привело к отображению полей на экране. Когда новая запись добавлена, get_post_meta возвращает пустую строку, что приводит к отображению пустых полей в мета-блоке.
Шаг 4. Регистрация функции Save Post
add_action("save_post", "add_movie_review_fields", 10, 2);Эта функция вызывается, когда записи сохраняются в базе данных.
Шаг 5. Вызов функции add_movie_review_fields
function add_movie_review_fields($movie_review_id, $movie_review) { // Check post type for movie reviews if ($movie_review->post_type == "movie_reviews") { // Store data in post meta table if present in post data if (isset($_POST["movie_review_director_name"]) && $_POST["movie_review_director_name"] != "") { update_post_meta($movie_review_id, "movie_director", $_POST["movie_review_director_name"]); } if (isset($_POST["movie_review_rating"]) && $_POST["movie_review_rating"] != "") { update_post_meta($movie_review_id, "movie_rating", $_POST["movie_review_rating"]); } } }Эта функция выполняется, когда записи сохраняются или удаляются из панели администратора. Здесь после проверки типа полученных данных записи на предмет того, является ли это пользовательским типом записи, проверяется, были ли прикреплены значения к элементам мета-блоков, и затем, наконец, сохраняются значения в эти поля.
Шаг 6. Отключение стандартных пользовательских полей
При создании пользовательского типа записи мы определили функцию create_movie_review . Удалите элемент custom-fields из массива supports , потому что это больше не нужно. Сейчас если вы сохраните файл и откроете редактор Movie Reviews , вы заметите два поля в мета-блоке под названием Movie Author и Movie Rating . Таким же образом вы можете добавить и другие элементы.
Создание пользовательского шаблона для пользовательского типа записи
Правильный способ отображения данных пользовательского типа записи - это использование пользовательских шаблонов для каждого пользовательского типа записи. Здесь мы должны создать шаблон, который отображает все кино-рецензии, добавленные с использованием пользовательского типа записи Movie Review .
Шаг 1. Регистрируем функцию для шаблона
Откройте файл Movie-Reviews.php и добавьте перед тегом закрытия PHP следующий код. Он зарегистрирует функцию для вызова, когда будет посещен интерфейс администратора WordPress.
Add_filter("template_include", "include_template_function", 1);
Шаг 2. Выполнение функции
function include_template_function($template_path) { if (get_post_type() == "movie_reviews") { if (is_single()) { // checks if the file exists in the theme first, // otherwise serve the file from the plugin if ($theme_file = locate_template(array ("single-movie_reviews.php"))) { $template_path = $theme_file; } else { $template_path = plugin_dir_path(__FILE__) . "/single-movie_reviews.php"; } } } return $template_path; }Здесь код ищет шаблон single-(post-type-name ).php в папке текущей темы. Если его там нет, он ищет в папке плагина шаблон, который мы предоставили как часть плагина. Зацепка template_include была использована для изменения стандартного поведения и применения специфического шаблона.
Шаг 3. Создание файла шаблона Single Page
После сохранения открытого файла плагина создайте другой PHP файл под названием single-movie_reviews.php и вставьте в него следующий код.
Director:
Rating: "; } else { echo ""; } } ?>
Здесь мы создали базовый шаблон страницы , используя цикл. Функция query_posts получает элементы пользовательского типа записи и отображает их, используя цикл. Конечно, это только базовый цикл, и вы можете играть с ним, как вам вздумается. Вы также можете использовать CSS стили, чтобы форматировать элементы.
Обратите внимание : вам нужно создать новую страницу из консоли, используя созданный только что шаблон.
Шаг 4. Изображения
Вам нужно сохранить два изображения иконок 32 x 32 px в папке вашего плагина. Назовите их icon.png и grey.png . Все, теперь кино-рецензии отображаются на отдельной странице, отсортированные по дате.
В дальнейшем я опишу больше возможностей собственных пользовательских типов, таких как: создание страниц архивов, создание пользовательских таксономий, пользовательских столбцов и так далее.
Get a valuable feedback from your customers by giving them the freedom to share their impressions freely. Let them rate your products and/or services straight on your website. See below the key features that come standard with our online review system.
Reviews & Ratings
Embed PHP Review Script into your website and let clients share their experience with the products and services you offer. They can rate by criteria and give both positive and negative feedback.
Multiple Languages
The PHP review system can speak not only English, but any language you may need. You can translate all titles and system messages from the admin page using unique IDs for each piece of text.
Editable Rating Criteria
Depending on the type of business, review system admins can
set different rating criteria to be shown in the front-end form.
Each of these criteria is rated with 1 to 5 stars.
Email & SMS Notifications
Set up the online review system to send Email & SMS alerts when a new review has been posted. You can easily specify which users to receive these messages from the Users menu.
Multiple User Types
Create unlimited client types depending on the industry and services used. Hotel ratings can go with following user types: Family with kids, Couple, Business trip etc. They appear as labels in the reviews.
Responsive & Attractive
The review and rating script runs on all devices, seamlessly adapting to various screen sizes. In accord with your website branding, you can pick the best matching front-end theme among 10 color options.
A quick tips box next to the review form allows you to add some witty words and draw customers out. The review system filters reviews by user type. Customers can rate other clients" ratings, too.
With a Developer Licence you get the source code and can make any custom changes to the PHP Review Script. We can also modify the customer review system upon request.
First, from a code organization standpoint, it’d be better to put all of the review logic into one or more includable files and then include it on product pages:
Include("includes/reviews.php");
This way, the product pages can remain unadulterated and the same review code can easily be used, or modified, as needed. The reviews.php script would do several things:
- Show the review form
- Handle the review form
- List the existing reviews
- Handle secondary actions, such as flagging reviews or comments as inappropriate, indicating that reviews were helpful, adding comments to reviews, indicating that comments where helpful, and so forth
Hopefully you’ve done plenty of web development already, so you know that a form for adding reviews would just be like so:
Clearly you’d want to use some CSS to make it pretty, but that’s the basic idea. The main catch is that the product ID and product type (or whatever the database must have in order to associate a review with an item) must be stored in hidden inputs. You’d have the PHP script that displays the product write these values to the inputs.
If login is required, you might add (PHP) code that only shows the form to logged-in users, or prints a comment saying the user must log in to review the product. Similarly, if you have a system in place for guaranteeing a person only ever reviews a product once, you’d have PHP check for that scenario before showing this form.
The form submission could go to a new page, but then the user would need to click the Back button to return to the product page, which isn’t ideal. I would instead submit the form back to the product page. For example, on any dynamic website, the same PHP script is used to display all the content of a specific type. In my Effortless E-Commerce with PHP and MySQL book, the first example site uses the page.php script to show any page of content. The action attribute of the form would point to the same page.php . You can accomplish this by just leaving the attribute empty, or by using PHP to dynamically set the value.
If the PHP page that lists the products requires that a value identifying the product be passed in the URL, then the form would need to store that value in a hidden input as well. (That may already be the case, with the product_id input, depending upon how the site is set up.) Secondarily, the product script would also need to be updated to allow for the product value to be received via POST .
For the reviews.php script to know when to handle a form submission, it can check how the script was accessed:
If ($_SERVER["REQUEST_METHOD"] == "POST") { // Handle the form.
When the review form is submitted, the form data should be validated. You should also apply strip_tags() to the data to prevent Cross-Site Scripting (XSS) attacks or other bad behavior. And non-numeric values would be run through an escaping function, such as mysqli_real_escape_string() . Or you could just use prepared statements or stored procedures for better security and performance.
If you add an anchor to the form’s action attribute action="page.php#reviews "the user will be taken to the reviews section of the page upon the submission, which is a nice touch.
If the reviews.php script is also handling some of the other actionsinappropriate reviews or comments, helpful indicators, etc.the script would need to watch for those submissions, too. I would use hidden inputs named “task” to indicate which action is being taken.
In a separate article, I demonstrate how to use Ajax for a simple rating system. Similar Ajax code could be used for the review system, too.
Шаблоны файлов WooCommerce содержат разметку и структуру шаблона интерфейса (и HTML сообщения электронной почты) вашего магазина. Если Вы откроете эти файлы, то Вы заметите, что все они содержат много хуков (hooks), которые позволят Вам добавлять / перемещать контент без необходимости редактирования самих файлов шаблона. Такой подход защищает от любых проблем с обновлениями, так как файлы шаблона могут оставаться полностью нетронутыми.
Кроме того, вы можете редактировать эти файлы безопасным способом с помощью подмены. Просто скопируйте их в Ваш шаблон в папку с именем /woocommerce , сохраняя ту же иерархическую структуру вложенных файлов и папок. Скопированные файлы шаблонов переопределят файлы шаблонов WooCommerce, используемые по умолчанию. Не редактируйте файлы шаблонов в ядре самого плагина, так как они будут перезаписаны в процессе обновления и все внесенные в них изменения будут потеряны, поскольку обновленные файлы шаблонов затрут старые файлы шаблонов.
Если Вы хотите внести изменения в один из шаблонов , то нет необходимости копировать все файл шаблонов, расположенные в папке templates, а достаточно скопировать только файл шаблона, в который Вы хотите внести изменения . Для этого с директории в вашей темой создайте папку woocommerce и перенесите в нее шаблон, соблюдая вложенность папок.
Пример: для внесения изменений в шаблон корзины, скопируйте woocommerce/templates/cart/cart.php в . После этого Вы можете вносить любые изменения в файл шаблона cart.php , расположенный в папке с вашей темой (т.е. в файл cart.php, расположенный по адресу ваша_тема/woocommerce/cart/cart.php ), и внесенные вами изменения сохранятся даже после обновления WooCommerce.
В директории /woocommerce/templates/ можно найти следующие файлы шаблонов
Спойлер: Список файлов
(данный список файлов шаблонов актуален для версии WooCommerce 2.0+):
· archive-product.php
· cart/
· cart-empty.php
· cross-sells.php
· mini-cart.php
· shipping-calculator.php
· shipping-methods.php
· totals.php
· checkout/
· cart-errors.php
· form-billing.php
· form-checkout.php
· form-coupon.php
· form-login.php
· form-pay.php
· form-shipping.php
· review-order.php
· thankyou.php
· content-product_cat.php
· content-product.php
· content-single-product.php
· emails/
· admin-new-order.php
· customer-completed-order.php
· customer-invoice.php
· customer-new_account.php
· customer-note.php
· customer-processing-order.php
· customer-reset-password.php
· email-addresses.php
· email-footer.php
· email-header.php
· email-order-items.php
· loop/
· add-to-cart.php
· loop-end.php
· loop-start.php
· no-products-found.php
· pagination.php
· result-count.php
· sale-flash.php
· myaccount/
· form-change-password.php
· form-edit-address.php
· form-login.php
· form-lost-password.php
· my-account.php
· my-address.php
· my-downloads.php
· my-orders.php
· order/
· form-tracking.php
· order-details.php
· tracking.php
· shop/
· breadcrumb.php
· form-login.php
· messages.php
· wrapper-end.php