• Как не дать активироваться своему плагину, если не активен другой?

    Гугляться только вывод сообщений типа

    
    if (! is_plugin_active( 'plugin-directory/plugin-file.php' ) ) {
    	echo 'Плагин не активирован'
    }

    С проверкой понятно, а как запретить активацию своего не могу найти.
    Думаю, что надо как-то с init решать но никак не соображу как.

    Помогите разобраться.

    PS. Называл топик «Не активировать плагин если не активен другой», Но ошибка — «Заданное вами название слишком длинное». Это же никак не разрешённые 80 символов.

Просмотр 4 ответов — с 16 по 19 (всего 19)
  • Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    И что именно непонятно?

    /**
    	 * Check plugin requirements. If not met, show message and deactivate plugin.
    	 */
    	public function check_requirements() {
    		if ( ! $this->requirements_met() ) {
    			add_action( 'admin_notices', [ $this, 'show_plugin_not_found_notice' ] );
    			if ( is_plugin_active( plugin_basename( WOOF_BY_CATEGORY_FILE ) ) ) {
    				deactivate_plugins( plugin_basename( WOOF_BY_CATEGORY_FILE ) );
    				// phpcs:disable WordPress.Security.NonceVerification.Recommended
    				if ( isset( $_GET['activate'] ) ) {
    					unset( $_GET['activate'] );
    				}
    				// phpcs:enable WordPress.Security.NonceVerification.Recommended
    				add_action( 'admin_notices', [ $this, 'show_deactivate_notice' ] );
    			}
    		}
    	}

    1. Проверить, что нужный плагин активирован.
    2. Если нет, то деактивировать свой.

    И что именно непонятно?

    Почти всё. Понятны только add_action.
    Там замудрено.
    Вначале проверяется requirements_met(), в которой $this->required_plugins.
    Зачем такие путешествия в моём простом случае? Нет, я не в претензиях, просто не понимаю.

    Но и дальше — если этот плагин а не родительский активен — деактивируем его же???

    if ( is_plugin_active( plugin_basename( WOOF_BY_CATEGORY_FILE ) ) ) {
      deactivate_plugins( plugin_basename( WOOF_BY_CATEGORY_FILE ) );

    А это

    if ( isset( $_GET['activate'] ) ) {
          unset( $_GET['activate'] );
    }

    ? вообще не понятно ни как так можно ни зачем и для чего.

    1. Проверить, что нужный плагин активирован

    С этим проблем нет.

    2. Если нет, то деактивировать свой.

    Вообще-то его нужно не активировать, а потом деактивировать, а сразу не дать активироваться.
    Да, в данном случае ничего страшного не случится, если проделать и такой финт. Но в целом мне кажется это как-то неправильно. Наверняка в других случаях может вызвать ошибку.

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Зачем такие путешествия в моём простом случае? Нет, я не в претензиях, просто не понимаю.

    Вы попросили совет, я вспомнил, что видел решение в одном из используемых плагинов и привел Вам для примера. Вы можете сделать по аналогии, можете написать что-то своё, а можете поискать или подождать ещё ответов. Интернет обширен)

    Но и дальше — если этот плагин а не родительсякий активен — деактивируем его же???

    Если родительский плагин не активен, код проверяет активен ли Ваш и если активен, то выключает его.

    вообще не понятно ни как так можно ни зачем и для чего.

    Можете попробовать связаться с автором плагина и уточнить у него, мне это, увы, не известно.

    Вообще-то его нужно не активировать, а потом деактивиорвать, а сразу не дать активироваться.

    Вы вольны делать как пожелаете нужным. Я Вам просто бесплатно подкинул идею как это можно реализовать, дальше уже дело за Вами. Успехов!

    Если родительский плагин не активен,

    Неа. Он проверяет не родителя, а обязательные плагины — $this->required_pluginsforeach.

    Можете попробовать связаться с автором плагина и уточнить у него, мне это, увы, не известно.

    Вот видите, и Вы не понимаете.

    Я Вам просто бесплатно подкинул идею как это можно реализовать

    Я ценю всё что тут рассказано всеми. Правда.
    Но пока мне ничего не помогло.

Просмотр 4 ответов — с 16 по 19 (всего 19)
  • Тема «Не активировать плагин» закрыта для новых ответов.