특정 WP 버전 번호를 충족하지 않으면 활성화하고 싶지 않은 플러그인이 있는데 admin_notices 작업 후크에 오류 메시지가 표시됩니다. 내가 연구 한 한 아래 코드는이 목표를 달성 할 수있는 최선입니다.
$wp_version = get_bloginfo('version');
if ( $wp_version < 4.5 ) {
add_action( 'admin_init', 'deactivate_plugin_now' );
add_action( 'admin_notices', 'errormsg' ) );
}
public function deactivate_plugin_now() {
if ( is_plugin_active('myplugin/myplugin.php') ) {
deactivate_plugins('myplugin/myplugin.php');
}
}
public function errormsg () {
$class = 'notice notice-error';
$message = __( 'Error you did not meet the WP minimum version', 'text-domain' );
printf( '<div class="%1$s"><p>%2$s</p></div>', $class, $message );
}
그러나 할당 된 오류 알림과 함께 플러그인 활성화 메시지가 동시에 표시되어 여전히 잘못하고 있다고 생각합니다.
플러그인 활성화 프로세스를 올바르게 중지하는 적절한 조치 후크 / 필터는 무엇입니까? 그래서 오류 메시지 만 표시됩니까?
답변
나는이 파티에 늦을 수도 있지만 플러그인 활성화를 중지하고 관리자가 통지하는 곳에서 WordPress에 오류 메시지를 표시하도록하려면 단순히 오류 메시지를 출력하고 실행을 종료합니다. 이것은 wp-cli로 멋지게 플레이 할 수 있다는 이점이 있습니다 .
예:
class testPlugin() {
...
static function activate() {
//[do some stuff here]
if ($error) {
die('Plugin NOT activated: ' . $error);
}
}
register_activation_hook( __FILE__, array( 'testPlugin', 'activate' ));
답변
본질적으로 원하는 방식으로 할 수 없습니다. 모든 워드 프레스 양식은 프로세스가 완료된 후 리디렉션되며 자체 출력을 생성하지 않으므로 다른 페이지 요청에서 오류 메시지가 생성됩니다. 이 시점에서 플러그인이 활성화되지 않으면 메시지가 표시되지 않습니다. 더 복잡한 문제는 플러그인이 Ajax에 의해 활성화 될 수 있다는 것입니다.
추악하지만 작동하는 방법은 PHP 오류 또는 IIRC에서 출력이 발생하여 활성화에 실패하는 것이므로 플러그인 활성화 후크에서 “버전 불일치”와 같은 것을 출력하면 오류 출력 상자에 표시됩니다. 활성화에 실패하면가 표시됩니다.
고려해야 할 사항 : 사람들이 플러그인 파일을 포함하거나 UI를 우회하거나 wp-cli를 사용하여 강제로 활성화 할 수 있습니다. 정품 인증에 실패하려는 이유에 따라 정품 인증에 실패하는 것보다 오류 메시지가있는 것이 좋습니다.
답변
제목을 업데이트 했으므로 다른 답변을 제공해야합니다. 이전 답변은이 답변보다 훨씬 단순하므로 무시하지 마십시오.
add_action( 'admin_notices', 'my_plugin_admin_notices' );
function my_plugin_admin_notices() {
if ( ! is_plugin_active( 'hello.php' ) && isset( $_GET['customhello'] ) ) {
echo '<div class="error"><p>WordPress need to be at least 8.5 to activate this plugin</p></div>';
}
}
add_action( 'activate_plugin', '_20170113_superess_activate', 10, 2 );
function _20170113_superess_activate( $plugin, $network_wide ) {
global $wp_version;
if ( $wp_version < 8.5 && 'hello.php' == $plugin ) {
$redirect = self_admin_url( 'plugins.php?customhello=1' );
wp_redirect( $redirect );
exit;
}
}
플러그인을 활성화하려고하면 plugins.php 파일과 상호 작용합니다. 거기에 당신은 당신이 실행할 수있는 행동의 큰 전환이 있습니다.
$_GET['error']
미리 정의 된 오류 메시지가있는 순간 오류가 설정 되어 있는 경우 사용자 정의 메시지를 작성할 수 없습니다. 이것이 내가 당신에게 이와 같은 해결책을 제안한 이유입니다.
플러그인이 일부 요구 사항을 충족하지 않는 경우 WordPress 코어에 대한 관리자 통지로 사용자 정의 메시지를 제안 할 수 있습니다.
답변
WP <8.5 인 경우 hello.php (Hello Dolly)를 억제하는이 코드는 어떻습니까?
add_action( 'activate_plugin', '_20170113_superess_activate' , 10, 2);
function _20170113_superess_activate($plugin, $network_wide){
global $wp_version;
if ( $wp_version < 8.5 && 'hello.php' == $plugin ) {
error_log( 'WordPress need to be at least 8.5' );
$args = var_export( func_get_args(), true );
error_log( $args );
wp_die( 'WordPress need to be at least 8.5 to activate this plugin' );
}
}
관리자 알림을 강제로 만들지 않기 때문에 이것이 좋습니다. 플러그인 설치 중단 이유에 대한 피드백을 얻을 수 있습니다.
HelloDolly에이 코드를 추가했지만 조정해야합니다.