Wordpress Как изменить настройки плагина в Theme function.php
Я новичок в Wordpress и работаю над своей первой темой. Тема будет сильно сочетаться с одним плагином. Мне интересно, как я мог изменить некоторые настройки плагина в теме function.php, не касаясь самого плагина.
Я попытался найти его в Интернете, но не нашел конкретных ответов на мою проблему.
Что я использую:
Wordpress 4.2, плагин Justimmo API
Эта проблема:
Я пытаюсь понять, как я мог в моей теме function.php
перенаправить / заменить файлы шаблонов плагинов на те, что есть в моей теме.
В данный момент в папке плагина находятся файлы шаблонов и способы их рендеринга на сайте. Я бы написал свой собственный файл шаблона, убедившись, что он похож на мою тему, и заменил его файлом шаблона плагина.
Если бы я должен был редактировать файлы шаблона непосредственно в папке плагина, всякий раз, когда могло произойти обновление, они были бы перезаписаны. Я не чувствую, что это правильно.
Посмотрев в интернете, я чувствую, что могу добиться этого с add_filter
, но не совсем уверен, как.
Плагин
На Github: https://github.com/justimmo/wordpress-plugin/blob/master/justimmo.php
В оригинальном плагине есть строки (строка 240 для indexPage()
и строка 328 для getIndexUrl()
):
class JiApiWpPlugin
{
function indexPage()
{
include(JI_API_WP_PLUGIN_DIR . '/templates/index.php');
}
function getIndexUrl()
{
return $this->getUrlPrefix().'ji_plugin=search';
}
}
Он определяет, где можно найти один из файлов шаблонов, а также дает постоянную ссылку на плагин.
Что я хочу
Я хотел бы добавить фильтр, чтобы взять файл шаблона из моей темы и переписать путь к файлу шаблона.
Если есть простой способ добавить хук, он перезаписывает его, отлично. Также я обнаружил, что я мог бы сделать некоторые замены шаблона с add_filter
,
Пытался:
add_filter( 'template_include', 'gulz_justimmo_page_template' );
function gulz_justimmo_page_template( $page_template )
{
if ( is_page( 'ji_plugin' ) ) {
$page_template = dirname( __FILE__ ) . '/justimmotemp/justimmo-index.php';
}
return $page_template;
}
Но я не совсем уверен, как проверить, активирована ли страница постоянных ссылок плагина.
Я чувствую, что это должно быть простой вещью для пользователей, перезаписывающих или перенаправляющих файлы шаблонов плагинов с теми, которые находятся в их теме, но я не могу понять это.
Буду благодарен за любую помощь и совет.
1 ответ
К сожалению функция indexPage()
вызывается другой функцией, которая затем перехватывается по ссылке.....
add_action('template_redirect', array(&$this, 'templateRedirect'));
Что вам нужно сделать, это удалить эту функцию и заменить ее собственной пользовательской функцией (скопируйте код из плагина и измените, чтобы вызвать пользовательскую функцию для этой страницы). Проблема в том, что вы не можете использовать remove_action, потому что имя не было передано с add_action
поэтому wp создает тот, который меняется с каждой загрузкой.
Итак, нам нужна функция, чтобы найти добавленную функцию:
function remove_anonymous_action( $name, $class, $method ){
$actions = $GLOBALS['wp_filter'][ $name];
if ( empty ( $actions ) ){
return;
}
foreach ( $actions as $prity => $action ){
foreach ( $action as $identifier => $function ){
if ( is_array( $function) && is_a( $function['function'][0], $class ) && $method === $function['function'][1]){
remove_action($tag, array ( $function['function'][0], $method ), $prity);
}
}
}
}
Что вы можете сделать - это вызвать это после того, как действие было добавлено выше, используя аргумент priority (это удаляет функцию для всех страниц внутри функции btw)
// the action adding the action is added in parse_query filter...use this as the point to remove the added action
add_action('parse_query', 'remove_plug_action', 50);
function remove_plug_action(){
// call our function with the name of the hook, classname and function name
remove_anonymous_action('template_redirect','JiApiWpPlugin','templateRedirect');
//add a custom function to replace the one we removed.
add_action('template_redirect', 'customtemplateRedirect');
}
Измените функцию ниже, чтобы вызвать файл на основе вашей темы.
function customtemplateRedirect(){
global $wp;
global $wp_query;
if (get_query_var('ji_plugin') !== '') {
switch (get_query_var('ji_plugin'))
{
case 'property':
$this->propertyPage();
exit;
break;
case 'expose':
$this->exposeDownload();
exit;
break;
default:
$this->indexPage();
exit;
break;
}
}
}
Также вы можете проверить, был ли удален крюк, используя
$hook_name = 'template_redirect';
global $wp_filter;
var_dump( $wp_filter[$hook_name] );
Фильтры Anon будут иметь длинный ключ, например, 12i90rkl2rkljeri (каждый раз случайный). Разбейте процесс, просто удалив действие add в remove_plug_action() и посмотрите, что вы получите. Действие должно быть удалено, если не var dump $_GLOBALS['wp_filter']['template_redirect'], чтобы увидеть, как оно выглядит. Это может занять немного повозиться. Вы также должны проверить свои операторы if (значения var_dump, которые передаются в него, чтобы проверить, пройдут они или нет, и т.д.)