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)