Intereting Posts
Пользовательский тип сообщения, показывающий одинаковое сообщение на всех страницах добавление URL-адреса в сообщение мета Markdown в WordPress 3.2? Масштабируемость WordPress – один экземпляр или несколько? Объедините две таксономии в иерархическом дереве Как настроить сайт для разработки / размещения, чтобы внести существенные изменения в тему, а затем обновить сайт? Blogroll – Разный макет для первого сообщения Загрузите хранимые файлы WordPress для пользовательского входа Использование pre_get_posts для фильтрации сообщений, проблема разбивки на страницы Навигация и передвижная навигационная панель для materialize.css Slug перенаправляется на 404 Измените гиперссылку на страницу регистрации пользователя вместо страницы входа в WordPress Выдержка категории на пользовательской странице незарегистрированный пользователь может писать на странице блога – возможно? как? уведомление администратора на всплывающем экране «Вставка мультимедиа»

WooCommerce – Загрузка шаблонов из плагина для всех файлов шаблонов

Я прочитал кучу статей об переопределении шаблонов по умолчанию / woocommerce / templates и попытался реализовать следующие (которые были лучшими / наиболее важными, что я мог найти все безрезультатно):

  • Сначала загрузите шаблоны WooCommerce из моей папки плагина
  • Переопределить шаблон шаблона WooCommerce внутри плагина

По сути, я хотел бы выполнить следующее: загружать все файлы шаблонов (для архивов и сообщений, а не только для частей шаблона) из ~ / wp-content / my-plugin / templates / woocommerce / * ЕСЛИ файлы находятся в моей теме (и я не нужно переопределять каждый экземпляр файла в моей функции). Например:

  • ~/wp-content/my-plugin/templates/woocommerce/single-product.php (кажется, что он просто не хочет загружаться через плагин)
  • ~/wp-content/my-plugin/templates/woocommerce/archive-products.php (кажется, что он просто не хочет загружаться через плагин)
  • ~/wp-content/my-plugin/templates/woocommerce-pdf-invoices-packing-slips/* (Я также хочу, чтобы иметь возможность переопределять другие шаблоны расширения плагинов, как я мог бы в моей дочерней теме)

РЕДАКТИРОВАТЬ:

Дружелюбные люди в SkyVerge прислали мне следующий код, который я тестировал и подтверждаю, что он работает для частей шаблона.

 // Locate the template in a plugin function myplugin_woocommerce_locate_template( $template, $template_name, $template_path ) { $_template = $template; if ( ! $template_path ) { $template_path = WC()->template_path(); } $plugin_path = myplugin_plugin_path() . '/templates/'; // Look within passed path within the theme - this is priority $template = locate_template( array( trailingslashit( $template_path ) . $template_name, $template_name ) ); // Modification: Get the template from this plugin, if it exists if ( ! $template && file_exists( $plugin_path . $template_name ) ) { $template = $plugin_path . $template_name; } // Use default template if ( ! $template ) { $template = $_template; } return $template; } add_filter( 'woocommerce_locate_template', 'myplugin_woocommerce_locate_template', 10, 3 ); // Helper to get the plugin's path on the server function myplugin_plugin_path() { // gets the absolute path to this plugin directory return untrailingslashit( plugin_dir_path( __FILE__ ) ); } 

Вышеприведенный код работает для чего-то вроде:

  • ~/myplugin/templates/single-product/product-image.php

Но НЕ работает:

  • ~/myplugin/templates/single-product.php

Где я застреваю:

  • Есть решения для переопределения битов и кусков шаблонов WC, но там я не нашел / не смог создать решение, которое делает всеобъемлющие переопределения (т. Е. Переопределяющая способность, как и детская тема)
  • Кажется, я не вижу правильной комбинации фильтрующих крючков; single-product.php и archive-product.php, похоже, контролируются функциями вне стандартных функций шаблона WC

Заранее спасибо!

Solutions Collecting From Web of "WooCommerce – Загрузка шаблонов из плагина для всех файлов шаблонов"

В этом случае вы можете использовать следующий фильтр wc_get_template_part.

Ссылка ссылки Hook: wc_get_template_part

Если вы не знаете, как использовать фильтры, прочитайте эту статью.

 function woo_template_replace( $located, $template_name, $args, $template_path, $default_path ) { if( file_exists( plugin_dir_path(__FILE__) . 'templates/' . $template_name ) ) { $located = plugin_dir_path(__FILE__) . 'templates/' . $template_name; } return $located; } function woo_get_template_part( $template , $slug , $name ) { if( empty( $name ) ) { if( file_exists( plugin_dir_path(__FILE__) . "/templates/{$slug}.php" ) ) { $template = plugin_dir_path(__FILE__) . "/templates/{$slug}.php"; } } else { if( file_exists( plugin_dir_path(__FILE__) . "/templates/{$slug}-{$name}.php" ) ) { $template = plugin_dir_path(__FILE__) . "/templates/{$slug}-{$name}.php"; } return $template; } add_filter( 'wc_get_template' , 'woo_template_replace' , 10 , 5 ); add_filter( 'wc_get_template_part' , 'woo_get_template_part' , 10 , 3 ); 

Вы можете использовать этот фрагмент в корневом файле плагина и поместить все ваши шаблоны шаблонов woocommerce в каталог шаблонов.

Структура плагина для справки

 plugins woo-template-replace (plugin root folder) woo-template-replace.php (plugin root file) templates (folder) single-content.php (woocommerce template file) searchform.php (woocommerce template file)