IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WordPress PHP Discussion :

Modifier une valeur de style automatiquement produite par un plugin


Sujet :

WordPress PHP

  1. #1
    Membre régulier
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 142
    Points : 108
    Points
    108
    Par défaut Modifier une valeur de style automatiquement produite par un plugin
    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 :

    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...
    "$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
     
    <?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...
    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
     
        unset($styles['padding']);
    Je voudrais totalement me débarrasser de ce truc/padding affreux qui intervient sur un "input" d'adresse e-mail.

    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

  2. #2
    Membre régulier
    Homme Profil pro
    autre
    Inscrit en
    Janvier 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Janvier 2015
    Messages : 142
    Points : 108
    Points
    108
    Par défaut
    Bon, je fatigue.

    Ce n'était qu'un pauv' problème de sac de nœuds CSS.

    Madame ou Monsieur le modérateur, on pourrait avantageusement (pour moi) supprimer cette discussion.
    S'il vous plaît, pitié.

    En choisissant la bonne class et en surchargeant par "!important" le truc était bâché.
    Désolé pour la tartine.
    Je mets quand même "résolu" ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Modifier une valeur dans un fichier par interaction utilisateur
    Par Sperafico dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 09/06/2010, 12h33
  2. Réponses: 5
    Dernier message: 24/08/2007, 15h42
  3. [XAML]Modifier une valeur dans un storyBoard par code C#
    Par Benaz dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 19/08/2007, 21h30
  4. Modifier une valeur dans un fichier sans passer par l'éditeur
    Par elkhy dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 09/06/2006, 00h15
  5. Réponses: 9
    Dernier message: 22/05/2006, 09h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo