Вопрос или проблема
У меня есть плагин, который имеет то же имя, что и другой плагин, загруженный на wordpress.org.
Как я могу сделать его уникальным, чтобы он не делил ссылку “Просмотреть детали” и автоматическое обновление с другим плагином, загруженным на wordpress.org? Учитывая, что название моего плагина должно быть точно таким же, как у него уже есть, и не может быть изменено.
Я уже пробовал добавить этот код в myplugin.php:
add_filter( 'site_transient_update_plugins', 'filter_plugin_updates' );
function filter_plugin_updates( $value ) {
if (!empty($value)) {
unset( $value->response['myplugin/myplugin.php'] );
return $value;
}
}
И это убирает уведомление об обновлении для этого плагина но только тогда, когда он активен, а мне нужно убрать его полностью с ссылкой “Просмотреть детали”.
Также мой плагин является частным и никогда не будет в репозитории WordPress и не будет нуждаться в автоматическом обновлении.
Есть какие-либо предложения? Спасибо
Вам нужна ссылка “Просмотреть детали”? Она не должна появляться, если это не хостинг-плагин WP. Вы можете просто назвать плагин как угодно, но изменить его с помощью JS в админке.
function my_enqueue($hook) {
if ( 'plugins.php' != $hook ) {
return;
}
wp_enqueue_script( 'my_custom_script', plugin_dir_url( __FILE__ ) . 'changeName.js', array( 'jquery' ), '1', true );
}
add_action( 'admin_enqueue_scripts', 'my_enqueue' );
Ваш changeName.js может выглядеть так:
jQuery("#pluginId").html("Название плагина, которое нравится PM");
Если ваш плагин не находится в официальном репозитории плагинов wp, добавьте небольшую функцию в ваш плагин, которая исключает его из процедуры обновления. Неполезно, чтобы WordPress искал обновление для этого плагина.
Ниже приведен источник, который поможет вам. Включите его в ваш плагин, чтобы деактивировать проверку обновлений для вашего пользовательского плагина, в вопросах производительности и избыточности по сравнению с другими плагинами.
add_filter( 'site_transient_update_plugins', 'fb_remove_update_notifications' );
// Удалить уведомление об обновлении для форкнутых плагинов.
function fb_remove_update_notifications($value) {
if ( isset( $value ) && is_object( $value ) ) {
unset( $value->response[ plugin_basename( __FILE__ ) ] );
}
return $value;
}
Но вы правы, это работает только, если источник активен. Для неактивных плагинов вы не можете помочь через источник. Единственный способ – это строка для имени плагина и имени файла, там с префиксом, там очень редко, как сейчас, так и в будущем. Если вы не можете включить источник, тогда изменить основную функциональность невозможно.
Имя плагина и плагин “wp-content/plugins/directory-name” не одно и то же и не требуют совпадения. Не меняйте имя плагина, просто измените ваш плагин “directory-name” на что-то другое. Или, например, замените “directory-name” на “directory_name” или на “directoryname”. WP проверяет обновления по “slug” плагина, который фактически является плагином “directory-name”.
Ответ или решение
Когда вы разрабатываете плагин для WordPress и сталкиваетесь с проблемой конфликта имен с уже существующим плагином, важно учесть несколько аспектов, чтобы избежать ситуации, когда ваш плагин будет автоматически обновляться или отображаться с одинаковой информацией. Ваша ситуация осложняется тем, что имя плагина необходимо оставить неизменным. Поэтому, в этой статье мы рассмотрим несколько стратегий для решения этой проблемы.
1. Изменение имени каталога вашего плагина
Одним из самых простых и эффективных способов избежать конфликтов с плагинами, которые имеют одинаковые названия, является изменение имени каталога вашего плагина. Имя каталога играет ключевую роль в уникальности плагина, так как сама система WordPress использует его для идентификации плагина, определяя «slug» для обновлений.
Пример:
Предположим, ваш плагин называется myplugin, но его каталог называется myplugin
. Поменяйте имя каталога на что-то более уникальное, например, myplugin_custom
, myplugin_additional
или myplugin_unique
. Это изменение не затронет отображаемое имя, но позволит вашему плагину избежать конфликтов на уровне обновлений.
2. Отключение проверки обновлений
Еще одним важным шагом является отключение уведомлений об обновлениях для вашего плагина. Даже если вы измените имя каталога, рекомендуется включить следующий код в ваш плагин. Этот код предотвращает появление уведомлений об обновлениях и ссылок на «View Details».
add_filter( 'site_transient_update_plugins', 'remove_update_notifications' );
function remove_update_notifications( $value ) {
if ( isset( $value ) && is_object( $value ) ) {
unset( $value->response[ plugin_basename( __FILE__ ) ] );
}
return $value;
}
Этот код необходимо вставить в основной файл вашего плагина. Он отключает уведомления, когда плагин активен. Однако, если плагин не активен, уведомления могут продолжать появляться, поэтому это решение будет частично эффективным.
3. Использование JavaScript для кастомизации имени плагина в интерфейсе
Чтобы избежать путаницы для пользователей, вы можете использовать JavaScript для изменения отображаемого имени плагина в разделе администрирования. Вы можете добавить следующий код, чтобы заменить имя, отображаемое на странице плагинов:
function my_enqueue($hook) {
if ( 'plugins.php' != $hook ) {
return;
}
wp_enqueue_script( 'my_custom_script', plugin_dir_url( __FILE__ ) . 'changeName.js', array( 'jquery' ), '1', true );
}
add_action( 'admin_enqueue_scripts', 'my_enqueue' );
А в changeName.js
вы можете прописать следующее:
jQuery("#pluginId").html("Уникальное имя вашего плагина");
4. Включите уникальные префиксы или суффиксы
Если смена каталога невозможна, постарайтесь использовать уникальные префиксы или суффиксы в именах функций и классов в коде плагина. Это поможет избежать конфликтов с другими плагинами, которые могут использовать аналогичные названия функций.
5. Объяснение пользователям
Если ваш плагин приватный и будет использоваться ограниченным числом пользователей, стоит описать в документации по установке и настройке особые моменты, касающиеся конфликтов с другими плагинами. Это может помочь в избежании недопонимания и нежелательных конфликтов.
Заключение
Конфликты имен с другими плагинами в WordPress могут быть сложной задачей, особенно когда имя плагина невозможно изменить. Используя предложенные методы, такие как изменение имени каталога, отключение проверки обновлений и умелая кастомизация интерфейса, можно решить эту проблему эффективно. Убедитесь, что во время разработки вы принимаете во внимание уникальность вашего плагина — это поможет избежать множества проблем в будущем.