Как я могу применить фильтр из другого плагина к WooCommerce? - PullRequest
1 голос
/ 15 октября 2019

Я пытался применить фильтр к WooCommerce из моего собственного пользовательского плагина, но что бы я ни делал, фильтр не срабатывает.

Часто встречающиеся решения онлайн не работают. Я пробовал:

Я также пытался прикрепить фильтр к различным точкам действия (init, plugins_loaded) и различным приоритетам (10, 20, 999).

Для тестирования я создал простой одностраничный плагин. Когда фильтр срабатывает, он должен записать в error_log. Файл находится в /wp-content/plugins/plugintest.php

<?php
/*
 * Plugin Name: Plugin TEST
 * Description: A simple plugin to test
 * Version: 1.0
**/

function my_test_get_template( $template, $template_name, $args ) {    

    error_log('working ...... FILTER ....  ');

    return $template;
}


error_log('working ... ');

add_filter( 'woocommerce_locate_template', 'my_test_get_template', 20, 3);  

Однако журнал ошибок внутри фильтра никогда не записывается, вывод просто

[15-Oct-2019 16:20:52 UTC] working ... 

Я непонять, почему код не работает. Я знаю, что WooCommerce активен и работает, как и другой код, который я написал (который расширяет класс WC_EMAIL). И я могу фильтровать "woocommerce_email_classes" без каких-либо проблем, это тоже работает. Но путь шаблона не сработает. Что-нибудь очевидно, что я делаю не так?

1 Ответ

0 голосов
/ 17 октября 2019

Итак, фильтр не заработал, но я нашел обходной путь. Вместо применения фильтра к пути, в класс электронной почты я добавил базу шаблонов, которая проверяет, есть ли файл в теме, если нет, то использует файл плагина. Это позволяет переопределить шаблон плагина через тему.

В вызове конструкции пользовательского электронного письма WooCommerce я добавил:

$this->template_base  = $this->get_template_path();

, который вызывает эту функцию:

public function get_template_path() {

// are we looking for html or plain?
$template = ($this->get_option( 'email_type' ) == 'html') ? $this->template_html : $this->template_plain;

// path to theme woocommerce file overrides 
$theme_path = get_stylesheet_directory() . '/woocommerce/'; 

//plugin path 
$plugin_path = plugin_dir_path( dirname( __FILE__ ) )  . 'templates/';

// if we have a theme file let's use it, otherwise revert to plugin file
$path = (file_exists($theme_path . $template) ) ? $theme_path : $plugin_path;

return $path;       

}

Теперь это работает. Это специфично для путей к шаблонам электронной почты, но это все, что мне нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...