PluginProbe
Polylang / trunk
Polylang vtrunk
3.8.9 3.8.8 3.8.7 3.8.6 3.8.5 3.8.4 3.8.3 2.7 2.7.0.1 2.7.1 2.7.2 2.7.3 2.7.4 2.8 2.8.1 2.8.2 2.8.3 2.8.4 2.9 2.9.1 2.9.2 3.0 3.0.1 3.0.2 3.0.3 All 233 releases
← All changes | polylang.php +81 -51 2.7.0.1 → trunk View file →
@@ -1,20 +1,27 @@
1 1 <?php
2 -
3 2 /**
4 -Plugin Name: Polylang
5 -Plugin URI: https://polylang.pro
6 -Version: 2.7.0.1
7 -Author: WP SYNTEX
8 -Author uri: https://polylang.pro
9 -Description: Adds multilingual capability to WordPress
10 -Text Domain: polylang
11 -Domain Path: /languages
12 - */
13 -
14 -/*
3 + * Polylang
4 + *
5 + * @package Polylang
6 + * @author WP SYNTEX
7 + * @license GPL-3.0-or-later
8 + *
9 + * @wordpress-plugin
10 + * Plugin Name: Polylang
11 + * Plugin URI: https://polylang.pro
12 + * Description: Adds multilingual capability to WordPress
13 + * Version: 3.9-beta2
14 + * Requires at least: 6.8
15 + * Requires PHP: 7.4
16 + * Author: WP SYNTEX
17 + * Author URI: https://polylang.pro
18 + * Text Domain: polylang
19 + * License: GPL v3 or later
20 + * License URI: https://www.gnu.org/licenses/gpl-3.0.txt
21 + *
15 22 * Copyright 2011-2019 Frédéric Demarle
16 - * Copyright 2019-2020 WP SYNTEX
23 + * Copyright 2019-2026 WP SYNTEX
17 24 *
18 25 * This program is free software: you can redistribute it and/or modify
19 26 * it under the terms of the GNU General Public License as published by
20 27 * the Free Software Foundation, either version 3 of the License, or
@@ -28,50 +35,73 @@
28 35 * You should have received a copy of the GNU General Public License
29 36 * along with this program. If not, see <https://www.gnu.org/licenses/>.
30 37 */
31 38
32 -if ( ! defined( 'ABSPATH' ) ) {
33 - exit; // don't access directly
34 -};
39 +defined( 'ABSPATH' ) || exit;
35 40
36 -if ( defined( 'POLYLANG_BASENAME' ) ) {
37 - // The user is attempting to activate a second plugin instance, typically Polylang and Polylang Pro
41 +if ( defined( 'POLYLANG_VERSION' ) ) {
42 + // The user is attempting to activate a second plugin instance, typically Polylang and Polylang Pro.
38 43 require_once ABSPATH . 'wp-admin/includes/plugin.php';
39 - if ( defined( 'POLYLANG_PRO' ) ) {
40 - // Polylang Pro is already activated
41 - if ( is_plugin_active( plugin_basename( __FILE__ ) ) ) {
42 - require_once ABSPATH . 'wp-includes/pluggable.php';
43 - deactivate_plugins( plugin_basename( __FILE__ ) ); // Deactivate this plugin
44 - // WP does not allow us to send a custom meaningful message, so just tell the plugin has been deactivated
45 - wp_safe_redirect( add_query_arg( 'deactivate', 'true', remove_query_arg( 'activate' ) ) );
46 - exit;
47 - }
48 - } else {
49 - // Polylang was activated, deactivate it to keep only what we expect to be Polylang Pro
50 - deactivate_plugins( POLYLANG_BASENAME );
44 +
45 + if ( is_plugin_active( plugin_basename( __FILE__ ) ) ) {
46 + deactivate_plugins( plugin_basename( __FILE__ ) ); // Deactivate this plugin.
47 +
48 + add_action(
49 + 'load-plugins.php',
50 + static function () {
51 + unset( $_GET['activate'] ); // Prevent WP to display its 'Plugin activated.' message.
52 + $updated_notice_args = array(
53 + 'type' => 'error',
54 + 'dismissible' => true,
55 + );
56 + wp_admin_notice( __( 'Polylang hasn\'t been activated: Polylang and Polylang Pro cannot be activated at the same time.', 'polylang' ), $updated_notice_args );
57 + }
58 + );
51 59 }
52 -} else {
53 - // Go on loading the plugin
54 - define( 'POLYLANG_VERSION', '2.7.0.1' );
55 - define( 'PLL_MIN_WP_VERSION', '4.9' );
56 - define( 'PLL_MIN_PHP_VERSION', '5.6' );
60 + return;
61 +}
57 62
58 - define( 'POLYLANG_FILE', __FILE__ ); // this file
59 - define( 'POLYLANG_BASENAME', plugin_basename( POLYLANG_FILE ) ); // plugin name as known by WP
60 - define( 'POLYLANG_DIR', dirname( POLYLANG_FILE ) ); // our directory
61 - define( 'POLYLANG', ucwords( str_replace( '-', ' ', dirname( POLYLANG_BASENAME ) ) ) );
63 +// Go on loading the plugin.
64 +define( 'POLYLANG_VERSION', '3.9-beta2' );
65 +define( 'PLL_MIN_WP_VERSION', '6.8' );
66 +define( 'PLL_MIN_PHP_VERSION', '7.4' );
62 67
63 - define( 'PLL_ADMIN_INC', POLYLANG_DIR . '/admin' );
64 - define( 'PLL_FRONT_INC', POLYLANG_DIR . '/frontend' );
65 - define( 'PLL_INC', POLYLANG_DIR . '/include' );
66 - define( 'PLL_INSTALL_INC', POLYLANG_DIR . '/install' );
67 - define( 'PLL_MODULES_INC', POLYLANG_DIR . '/modules' );
68 - define( 'PLL_SETTINGS_INC', POLYLANG_DIR . '/settings' );
69 - define( 'PLL_PREFIX', 'pll_' );
68 +define( 'POLYLANG_FILE', __FILE__ );
69 +define( 'POLYLANG_DIR', __DIR__ );
70 70
71 - if ( file_exists( PLL_MODULES_INC . '/pro.php' ) ) {
72 - define( 'POLYLANG_PRO', true );
73 - }
71 +// The filename of the plugin in use, whether it is Polylang or Polylang Pro.
72 +if ( ! defined( 'POLYLANG_ROOT_FILE' ) ) {
73 + define( 'POLYLANG_ROOT_FILE', __FILE__ );
74 +}
74 75
75 - require_once PLL_INC . '/class-polylang.php';
76 - new Polylang();
76 +// The root directory of the plugin in use, whether it is Polylang or Polylang Pro.
77 +if ( ! defined( 'POLYLANG_ROOT_DIR' ) ) {
78 + define( 'POLYLANG_ROOT_DIR', __DIR__ );
77 79 }
80 +
81 +if ( ! defined( 'POLYLANG_BASENAME' ) ) {
82 + define( 'POLYLANG_BASENAME', plugin_basename( __FILE__ ) ); // Plugin name as known by WP.
83 + require __DIR__ . '/vendor/autoload.php';
84 +}
85 +
86 +define( 'POLYLANG', ucwords( str_replace( '-', ' ', dirname( POLYLANG_BASENAME ) ) ) );
87 +
88 +if ( ! empty( $_GET['deactivate-polylang'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification
89 + return;
90 +}
91 +
92 +require POLYLANG_DIR . '/src/constant-functions.php';
93 +if ( ! PLL_Usable::can_activate() ) {
94 + // WP version or php version is too old.
95 + return;
96 +}
97 +
98 +define( 'POLYLANG_ACTIVE', true );
99 +
100 +if ( PLL_Deactivate::is_deactivation() ) {
101 + // Stopping here if we are going to deactivate the plugin (avoids breaking rewrite rules).
102 + PLL_Deactivate::add_hooks();
103 + return;
104 +}
105 +
106 +PLL_Activate::add_hooks();
107 +new Polylang();