Переопределение плагина через functions.php
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');
}
}

Вы можете изменить название функции 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(), если это необходимо.

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

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

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

Хм, взгляните на ваш предыдущий вопрос, где вы спрашивали про is_post_type()
?

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

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

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