Переопределение плагина через functions.php

18 авг. 2011 г., 14:20:50
Просмотры: 25.1K
Голосов: 1
add_action('wp_head','add_gpp_gallery');
function add_gpp_gallery() {
    if( ( is_single() || is_page() ) && ( !is_page_template('page-blog.php') ) ){
        remove_shortcode('gallery', 'gallery_shortcode');
        add_shortcode('gallery', 'gpp_gallery_shortcode');
    }
}

Всем привет! Я взял вышеуказанную функцию из основного файла функций плагина и хотел изменить ее, чтобы заменять стандартную галерею WP только для моего пользовательского типа записей. Поэтому я изменил условие if выше на:

if (is_single() && is_post_type('post_type'){

Я изменил это и поместил в functions.php - но получаю ошибку, что нельзя повторно объявить add_gpp_gallery

Как мне переопределить функции плагина, не трогая код плагина?

спасибо

РЕДАКТИРОВАНИЕ

Я попробовал:

remove_action( 'wp_head', 'add_gpp_gallery' );
add_action('wp_head','jason_add_gpp_gallery');
function jason_add_gpp_gallery() {
    if ( is_single() && is_post_type('listings') ){
        remove_shortcode('gallery', 'gallery_shortcode');
        add_shortcode('gallery', 'gpp_gallery_shortcode');
    }
}

и получил фатальную ошибку -

Фатальная ошибка: Вызов неопределенной функции is_post_type() в /home/hostspro/public_html/movemaine.com/wp-content/themes/movemaine/functions.php на строке 269

РЕДАКТИРОВАНИЕ #2

Я перепутал свои функции и забыл заменить is_post_type. Следующий код работает, спасибо за помощь

remove_action( 'wp_head', 'add_gpp_gallery' );
add_action('wp_head','jason_add_gpp_gallery');
function jason_add_gpp_gallery() {
    if ( is_single() && 'listings' == get_post_type() ) {
        remove_shortcode('gallery', 'gallery_shortcode');
        add_shortcode('gallery', 'gpp_gallery_shortcode');
    }
}
1
Комментарии

Вы можете сократить ваше условие с is_single() && 'listings' = get_post_type() до is_singular('listings'). Фатальная ошибка возникает потому что не существует функции is_post_type.

chrisguitarguy chrisguitarguy
18 авг. 2011 г. 16:07:36
Все ответы на вопрос 1
10

Вы можете изменить название функции add_gpp_gallery как в колбэке, так и в объявлении, чтобы избежать конфликта между оригиналом и вашей копией.

Что-то вроде этого...

add_action('wp_head','jason_add_gpp_gallery');
function jason_add_gpp_gallery() {
    if ( is_single() && 'your_post_type' == get_post_type() ) ){
        remove_shortcode('gallery', 'gallery_shortcode');
        add_shortcode('gallery', 'gpp_gallery_shortcode');
    }
}

... должно сработать.

Бонус: Вы можете удалить действие оригинального плагина с помощью remove_action(), если это необходимо.

18 авг. 2011 г. 15:00:55
Комментарии

Обратите внимание, что создание уникальных имен функций при написании кода считается важной практикой, так как это предотвращает возникновение именно таких конфликтов, с которыми вы столкнулись. См. Рекомендации по разработке плагинов

Michal Mau Michal Mau
18 авг. 2011 г. 15:05:30

"Бонус" на самом деле является ответом. Вам нужно вызвать remove_action( 'wp_head', 'add_gpp_gallery' ), а затем выполнить ваш пользовательский код (с правильно пространственно именованными функциями).

Chip Bennett Chip Bennett
18 авг. 2011 г. 15:06:20

@Chip Спасибо за уточнение! Нет необходимости оставлять оба варианта.

Michal Mau Michal Mau
18 авг. 2011 г. 15:10:16

К сожалению - я получаю ошибку - см. правку.

Jason Jason
18 авг. 2011 г. 15:17:19

@Jason это ошибка, которую я скопировал из вашего примера, и она совершенно не связана с проблемой, решаемой этим ответом. Проблема в том, что в WP нет функции is_post_type. Взгляните на документацию по get_post_type()

Michal Mau Michal Mau
18 авг. 2011 г. 15:58:47

Судя по всему, ваш файл function.php выполняется до полной загрузки ядра WP, в частности до загрузки функции is_post_type()...

Dunhamzzz Dunhamzzz
18 авг. 2011 г. 16:09:19

@Dunhamzzz Ты шутишь, да?

Michal Mau Michal Mau
18 авг. 2011 г. 16:40:27

Почему еще у ТС была бы ошибка "функция не определена" для функции, которая на самом деле существует?

Dunhamzzz Dunhamzzz
18 авг. 2011 г. 16:44:05

@Dunhamzzz Устарело, см. комментарий Chip Bennet выше, где указан предыдущий вопрос автора (OP)

Michal Mau Michal Mau
18 авг. 2011 г. 16:52:19
Показать остальные 5 комментариев