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, которые передаются в него, чтобы проверить, пройдут они или нет, и т.д.)

Другие вопросы по тегам