.
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
/*
|
/*
|
||||||
Plugin Name: WP Thumbor Integration
|
Plugin Name: WP Thumbor Integration
|
||||||
Description: Intègre Thumbor dans WordPress en transformant les URLs des images présentes dans le <body> (contenu, header, backgrounds, etc.) et dans les liens preload d'image dans le <head>. L'URL de Thumbor, les filtres et la clé secrète sont configurables. Les images sont redimensionnées si une taille est spécifiée dans le nom du fichier ou dans les attributs HTML. La transformation est désactivée dans certains cas (ex. Optimize More) pour éviter des erreurs getimagesize(). Le favicon, les scripts et les images en dehors du <body> (sauf preload) ne sont pas modifiés.
|
Description: Intègre Thumbor dans WordPress en transformant les URLs des images présentes dans le <body> (contenu, header, backgrounds, etc.) et dans les liens preload d'image dans le <head>. L'URL de Thumbor, les filtres, la clé secrète et un éventuel chemin local sont configurables. Les images sont redimensionnées si une taille est spécifiée dans le nom du fichier ou dans les attributs HTML. La transformation est désactivée dans certains cas (ex. Optimize More) pour éviter des erreurs getimagesize(). Le favicon, les scripts et les images en dehors du <body> (sauf preload) ne sont pas modifiés.
|
||||||
Version: 1.6
|
Version: 1.7
|
||||||
Author: MrRaph_
|
Author: MrRaph_
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -18,6 +18,7 @@ function wp_thumbor_get_options() {
|
|||||||
'thumbor_base_url' => '',
|
'thumbor_base_url' => '',
|
||||||
'thumbor_filters' => '',
|
'thumbor_filters' => '',
|
||||||
'thumbor_secret_key' => '',
|
'thumbor_secret_key' => '',
|
||||||
|
'thumbor_local_path' => '', // nouveau paramètre pour le chemin local
|
||||||
);
|
);
|
||||||
$options = get_option('wp_thumbor_options', $defaults);
|
$options = get_option('wp_thumbor_options', $defaults);
|
||||||
return wp_parse_args($options, $defaults);
|
return wp_parse_args($options, $defaults);
|
||||||
@@ -66,6 +67,7 @@ function wp_thumbor_settings_page() {
|
|||||||
$options['thumbor_base_url'] = isset($_POST['thumbor_base_url']) ? esc_url_raw(trim($_POST['thumbor_base_url'])) : '';
|
$options['thumbor_base_url'] = isset($_POST['thumbor_base_url']) ? esc_url_raw(trim($_POST['thumbor_base_url'])) : '';
|
||||||
$options['thumbor_filters'] = isset($_POST['thumbor_filters']) ? sanitize_text_field(trim($_POST['thumbor_filters'])) : '';
|
$options['thumbor_filters'] = isset($_POST['thumbor_filters']) ? sanitize_text_field(trim($_POST['thumbor_filters'])) : '';
|
||||||
$options['thumbor_secret_key'] = isset($_POST['thumbor_secret_key']) ? sanitize_text_field(trim($_POST['thumbor_secret_key'])) : '';
|
$options['thumbor_secret_key'] = isset($_POST['thumbor_secret_key']) ? sanitize_text_field(trim($_POST['thumbor_secret_key'])) : '';
|
||||||
|
$options['thumbor_local_path'] = isset($_POST['thumbor_local_path']) ? sanitize_text_field(trim($_POST['thumbor_local_path'])) : '';
|
||||||
update_option('wp_thumbor_options', $options);
|
update_option('wp_thumbor_options', $options);
|
||||||
echo '<div class="updated"><p>Les paramètres ont été mis à jour.</p></div>';
|
echo '<div class="updated"><p>Les paramètres ont été mis à jour.</p></div>';
|
||||||
}
|
}
|
||||||
@@ -88,7 +90,7 @@ function wp_thumbor_settings_page() {
|
|||||||
<th scope="row">Filtres Thumbor</th>
|
<th scope="row">Filtres Thumbor</th>
|
||||||
<td>
|
<td>
|
||||||
<input type="text" name="thumbor_filters" value="<?php echo esc_attr($options['thumbor_filters']); ?>" class="regular-text" placeholder="ex: quality(85),contrast(10)" />
|
<input type="text" name="thumbor_filters" value="<?php echo esc_attr($options['thumbor_filters']); ?>" class="regular-text" placeholder="ex: quality(85),contrast(10)" />
|
||||||
<p class="description">Entrez la liste des filtres à appliquer, séparés par des virgules, sans le préfixe "filters:" ni le suffixe ":/".</p>
|
<p class="description">Entrez la <a href="https://thumbor.readthedocs.io/en/latest/filters.html">liste des filtres à appliquer</a>, séparés par des virgules, sans le préfixe "filters:" ni le suffixe ":/".</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr valign="top">
|
<tr valign="top">
|
||||||
@@ -98,6 +100,13 @@ function wp_thumbor_settings_page() {
|
|||||||
<p class="description">Entrez la clé secrète pour signer les URLs Thumbor. Laissez vide pour utiliser l'endpoint "unsafe".</p>
|
<p class="description">Entrez la clé secrète pour signer les URLs Thumbor. Laissez vide pour utiliser l'endpoint "unsafe".</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr valign="top">
|
||||||
|
<th scope="row">Chemin local Thumbor</th>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="thumbor_local_path" value="<?php echo esc_attr($options['thumbor_local_path']); ?>" class="regular-text" placeholder="/home" />
|
||||||
|
<p class="description">Optionnel. Si renseigné, ce chemin sera préfixé au chemin de l'image sur le filesystem local de Thumbor. Par exemple, si vous indiquez "/home", alors au lieu de transmettre l'URL publique, le plugin transmettra "home/wp-content/uploads/…".</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<?php submit_button(); ?>
|
<?php submit_button(); ?>
|
||||||
</form>
|
</form>
|
||||||
@@ -123,10 +132,13 @@ function wp_thumbor_extract_dimensions_from_url($url) {
|
|||||||
* les options de redimensionnement et les filtres configurés.
|
* les options de redimensionnement et les filtres configurés.
|
||||||
*
|
*
|
||||||
* Le format généré est :
|
* Le format généré est :
|
||||||
* {thumbor_base_url}/{endpoint}/[width]x[height]/[filters:...]/{url}
|
* {thumbor_base_url}/{endpoint}/[width]x[height]/[filters:...]/{image_path}
|
||||||
*
|
*
|
||||||
* Si aucune dimension n'est précisée, la partie redimensionnement est omise.
|
* Si aucune dimension n'est précisée, la partie redimensionnement est omise.
|
||||||
*
|
*
|
||||||
|
* Si le paramètre "Chemin local Thumbor" est renseigné, l'image est référencée par
|
||||||
|
* ce chemin suivi du chemin (PATH) de l'URL d'origine.
|
||||||
|
*
|
||||||
* @param string $url L'URL originale de l'image.
|
* @param string $url L'URL originale de l'image.
|
||||||
* @param int|null $width La largeur souhaitée.
|
* @param int|null $width La largeur souhaitée.
|
||||||
* @param int|null $height La hauteur souhaitée.
|
* @param int|null $height La hauteur souhaitée.
|
||||||
@@ -147,7 +159,6 @@ function wp_thumbor_transform_url($url, $width = null, $height = null) {
|
|||||||
|
|
||||||
$options = wp_thumbor_get_options();
|
$options = wp_thumbor_get_options();
|
||||||
$thumbor_base_url = isset($options['thumbor_base_url']) ? rtrim($options['thumbor_base_url'], '/') : '';
|
$thumbor_base_url = isset($options['thumbor_base_url']) ? rtrim($options['thumbor_base_url'], '/') : '';
|
||||||
|
|
||||||
if ( empty($thumbor_base_url) ) {
|
if ( empty($thumbor_base_url) ) {
|
||||||
return $url;
|
return $url;
|
||||||
}
|
}
|
||||||
@@ -178,14 +189,25 @@ function wp_thumbor_transform_url($url, $width = null, $height = null) {
|
|||||||
// Préparation de la partie filtres à partir des réglages
|
// Préparation de la partie filtres à partir des réglages
|
||||||
$thumbor_filters = isset($options['thumbor_filters']) ? trim($options['thumbor_filters']) : '';
|
$thumbor_filters = isset($options['thumbor_filters']) ? trim($options['thumbor_filters']) : '';
|
||||||
if ( ! empty($thumbor_filters) ) {
|
if ( ! empty($thumbor_filters) ) {
|
||||||
// Utilise "/" comme séparateur attendu par Thumbor.
|
|
||||||
$filterPart = 'filters:' . $thumbor_filters . '/';
|
$filterPart = 'filters:' . $thumbor_filters . '/';
|
||||||
} else {
|
} else {
|
||||||
$filterPart = '';
|
$filterPart = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Détermine le chemin de l'image pour Thumbor.
|
||||||
|
// Par défaut, on utilise l'URL complète.
|
||||||
|
$image_path = $url;
|
||||||
|
// Si un chemin local est configuré, on remplace la partie "https://votredomaine/wp-content/…" par
|
||||||
|
// le chemin local suivi du chemin de l'image (extrait avec parse_url).
|
||||||
|
if ( ! empty($options['thumbor_local_path']) ) {
|
||||||
|
// On retire les éventuels slash en début de chaîne
|
||||||
|
$local = ltrim($options['thumbor_local_path'], '/');
|
||||||
|
$path = parse_url($url, PHP_URL_PATH); // ex: /wp-content/uploads/...
|
||||||
|
$image_path = $local . $path; // Résultera par exemple en "home/wp-content/uploads/..."
|
||||||
|
}
|
||||||
|
|
||||||
// Construction de la chaîne d'options à signer
|
// Construction de la chaîne d'options à signer
|
||||||
$path_to_sign = $resize . $filterPart . $url;
|
$path_to_sign = $resize . $filterPart . $image_path;
|
||||||
|
|
||||||
// Détermine l'endpoint : si une clé secrète est renseignée, on signe, sinon on utilise "unsafe"
|
// Détermine l'endpoint : si une clé secrète est renseignée, on signe, sinon on utilise "unsafe"
|
||||||
if ( ! empty($options['thumbor_secret_key']) ) {
|
if ( ! empty($options['thumbor_secret_key']) ) {
|
||||||
|
|||||||
Reference in New Issue
Block a user