Bonjour,
J'ai une question très technique.
Est-il possible de modifier une valeur dans un tableau qui a été créé au sein d'une fonction d'un plugin WP ?
Le plugin est Mailpoet.
Dans une de ses fonctions il ajoute automatiquement un padding à un élément d'un formulaire qui a un effet très moche dans mon site.
Ce padding n'est pas réglage côté admin, dans la création des formulaires.
Je vois où les informations sont accessibles.
Variable "$styles" dans "mailpoet/lib/Form/Block/Text.php"
Ci-dessous jusqu'à la variable en question :
"$styles" est fabriqué dans "mailpoet/lib/Form/Block/BlockStylesRenderer.php"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73 <?php namespace MailPoet\Form\Block; if (!defined('ABSPATH')) exit; use MailPoet\Form\BlockStylesRenderer; use MailPoet\Form\BlockWrapperRenderer; use MailPoet\WP\Functions as WPFunctions; class Text { /** @var BlockRendererHelper */ private $rendererHelper; /** @var BlockStylesRenderer */ private $inputStylesRenderer; /** @var BlockWrapperRenderer */ private $wrapper; /** @var WPFunctions */ private $wp; public function __construct( BlockRendererHelper $rendererHelper, BlockStylesRenderer $inputStylesRenderer, BlockWrapperRenderer $wrapper, WPFunctions $wp ) { $this->rendererHelper = $rendererHelper; $this->inputStylesRenderer = $inputStylesRenderer; $this->wrapper = $wrapper; $this->wp = $wp; } public function render(array $block, array $formSettings): string { $type = 'text'; $automationId = ' '; if ($block['id'] === 'email') { $type = 'email'; } if (in_array($block['id'], ['email', 'last_name', 'first_name'], true)) { $automationId = 'data-automation-id="form_' . $this->wp->escAttr($block['id']) . '" '; } $styles = $this->inputStylesRenderer->renderForTextInput($block['styles'] ?? [], $formSettings); if (in_array($block['id'], ['email', 'last_name', 'first_name'], true)) { $automationId = 'data-automation-id="form_' . $block['id'] . '" '; } $name = $this->rendererHelper->getFieldName($block); $html = ''; $html .= $this->inputStylesRenderer->renderPlaceholderStyles($block, 'input[name="data[' . $name . ']"]'); $html .= $this->rendererHelper->renderLabel($block, $formSettings); $html .= '<input type="' . $type . '" class="mailpoet_text" '; $html .= 'name="data[' . $name . ']" '; $html .= 'title="' . $this->rendererHelper->getFieldLabel($block) . '" '; $html .= 'value="' . $this->rendererHelper->getFieldValue($block) . '" '; if ($styles) { $html .= 'style="' . $this->wp->escAttr($styles) . '" '; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< var_dump($styles);die(); } ETC...
Mon idée serait de faire comme ce que l'on fait avec "add_filter" sur les hook de WP, et de retourner sur $styles ou $rules :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 <?php namespace MailPoet\Form; if (!defined('ABSPATH')) exit; use MailPoet\WP\Functions as WPFunctions; class BlockStylesRenderer { /** @var WPFunctions */ private $wp; public function __construct(WPFunctions $wp) { $this->wp = $wp; } public function renderForTextInput(array $styles, array $formSettings = []): string { $rules = []; if (isset($styles['full_width']) && intval($styles['full_width'])) { $rules[] = 'width:100%;'; } if (isset($styles['background_color']) && empty($styles['gradient'])) { $rules[] = "background-color:{$styles['background_color']};"; } if (isset($styles['border_size']) || isset($styles['border_radius']) || isset($styles['border_color'])) { $rules[] = "border-style:solid;"; } if (isset($styles['border_radius'])) { $rules[] = "border-radius:" . intval($styles['border_radius']) . "px !important;"; } if (isset($styles['border_size'])) { $rules[] = "border-width:" . intval($styles['border_size']) . "px;"; } if (isset($styles['border_color'])) { $rules[] = "border-color:{$styles['border_color']};"; } // if (isset($styles['padding'])) { // $rules[] = "padding:{$styles['padding']}px;"; // } elseif (isset($formSettings['input_padding'])) { // $rules[] = "padding:{$formSettings['input_padding']}px;"; <<<<<<<<<<<<<<<<<<< j'ai tout mis en commentaire // } ETC...
Je voudrais totalement me débarrasser de ce truc/padding affreux qui intervient sur un "input" d'adresse e-mail.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 unset($styles['padding']);
En mettant en commentaire la partie "padding" dans le fichier "BlockStylesRenderer.php" j'obtiens mon résultat mais ce n'est évidemment pas la bonne manière.
Je voudrais ne pas bidouiller les fichiers du plugin.
Je travaille sur un thème enfant.
Je vois plein de "namespace", "use as", "Class", "__construct" au début des fichiers php de mailpoet, je n'y comprends rien.
Je souhaiterais placer le code ad hoc, s'il existe, dans le "functions.php" de mon thème enfant.
Autre précision : côté admin de WP, mailpoet permet d'ajouter une class à la partie du formulaire contenant ce padding généré automatiquement mais le CSS ne corrige pas le point.
S'il y avait un moyen de gérer cela en CSS ce serait parfait également.
Merci pour votre aide
Partager