tutos création plugin. (Créer un compte)

  • Statut : non résolu
10 sujets de 1 à 10 (sur un total de 10)
  • Auteur
    Messages
  • #498688
    natchoum
    Membre
    Chevalier WordPress
    162 contributions

    bonjour à tous, après avoir créé un nouveau type de widget, je voulais mettre mon travail dans un plugin pour pas me faire ennuyer par les mises à jour etc…
    Mon soucis est que pour trouver un tuto véritablement complet, il faut s’accrocher…
    j’ai lu le tuto du codex : http://codex.wordpress.org/Writing_a_Plugin
    et soit c’est moi soit il ne dit pas grand chose. ( en effet mon code fonctionne dans functions.php mais dès que je suis le tuto pour en faire un plugin … ça se complique ).
    Je cherche donc un vrai tuto :D si quelqu’un a ça sous la main, ça m’interresse

    #788350
    natchoum
    Membre
    Chevalier WordPress
    162 contributions

    Bon je reviens ici parce que j’ai avancé :


    ‘My_Widget_Text’, ‘description’ => __(‘mon widget text ou HTML’));
    $control_ops = array(‘width’ => 400, ‘height’ => 350);
    parent::__construct(‘My_Widget_Text’, __(‘Mon Text’), $widget_ops, $control_ops);
    }

    function widget( $args, $instance ) {
    extract($args);

    global $wp_query;
    $pageID = $wp_query->post->ID;
    $children = wp_list_pages(« title_li=&child_of= ».$pageID. »&echo=0″);
    //Test pour savoir si le widget s’affiche ou pas ( si pas d’enfants ni de parents, ne s’affiche pas )
    global $post;
    if((!$children)&&(!$post->post_parent))
    return;

    $title = apply_filters( ‘widget_title’, empty($instance[‘title’]) ?  » : $instance[‘title’], $instance, $this->id_base);
    $text = apply_filters( ‘widget_text’, $instance[‘text’], $instance );
    echo $before_widget;
    if ( !empty( $title ) ) { echo $before_title . $title . $after_title; } ?>
    <div class="textwidget"></div>
     », ‘text’ =>  » ) );
    $title = strip_tags($instance[‘title’]);
    $text = esc_textarea($instance[‘text’]);
    ?>
    <p><label for="get_field_id(‘title’); ?> »></label>
    <input class="widefat" id="get_field_id(‘title’); ?> » name= »get_field_name(‘title’); ?> » type= »text » value= » » /></p>

    <textarea class="widefat" rows="16" cols="20" id="get_field_id(‘text’); ?> » name= »get_field_name(‘text’); ?> »></textarea>

    <p><input id="get_field_id(‘filter’); ?> » name= »get_field_name(‘filter’); ?> » type= »checkbox » /> <label for="get_field_id(‘filter’); ?> »></label></p>
    <?php
    }
    }

    function afficheMonWidget()
    {
    register_widget('My_Widget_Text');
    }
    add_action('widgets_init', 'afficheMonWidget');

    Voici la fonction qui me permet de créer un widget text avec une condition ( merci à guy :D ). J’ai rajouté les commentaires pour le plugin, je l’ai uploader dans plugins/mine/myfunc.php.
    Celà fonctionne, je vois le plugin apparaitre et quand je l’active mon widget apparait comme par magie !!!

    mais pourquoi est ce que je vous fais chier si ça marche …
    Ah ba oui, parce que ça marche mal :D en effet au moment d’activer le plugin je reçois ce message d’erreur ( qui n’est jamais apparu nul part tant que ce code était dans functions.php ) :

    L’extension a généré 3 caractères d’affichage inattendu lors de l’activation. Si vous voyez un message « Les en-têtes ont déjà été envoyés », des problèmes avec les flux de syndication ou d’autres erreurs, essayez de désactiver ou enlever cette extension.

    Je ne vois aucun message nul part mais je n’aime pas les erreurs donc si quelqu’un peut m’aider à comprendre 😋

    #788351
    Guy
    Participant
    Maître WordPress
    14817 contributions

    je vois un <?php qui n'est jamais fermé en fin de fichier

    #788352
    natchoum
    Membre
    Chevalier WordPress
    162 contributions

    j’ai corrigé mais le problème ne vient pas de là. Je pense que l’erreur vient d’un bout du script qui devrait se trouver avant toute balise html et qui vient après. sauf que je ne vois pas où :S ( vu le message d’erreur )

    #788353
    Guy
    Participant
    Maître WordPress
    14817 contributions

    vérifie bien qu’il n’y a pas d’espaces, caractères parasites en début et fin, dans l’entête, avant la version il y a plusieurs espaces, laisse un seul, c’est quelque chose de ce style.

    #788354
    natchoum
    Membre
    Chevalier WordPress
    162 contributions

    En cherchant sur le forum je suis tombé sur ça : http://www.wordpress-fr.net/support/viewtopic.php?id=46570
    Je serai étonné que ce soit un problème d’hébergement puisque l’hébergeur est la boite pour laquelle je fais le site…
    Sinon j’ai regardé, l’erreur ne peut venir que du 1er bloc de commentaire :
    En effet j’ai tester en remplaçant le code du plugin par rien du tout -> 3 erreurs. En retirant le second bloc de commentaire -> 3 erreurs. Cependant quoi que je fasse dans ce premier bloc il me laisse 3 erreurs…
    Si quelqu’un veut tester, voici le code du plugin complet :
    EDIT : Bon ba en fait je suis tout à fait paumé, même en ne laissant que la ligne Plugin Name: Menu optionnel, j’ai 3 erreurs d’en tête :S

     ‘My_Widget_Text’, ‘description’ => __(‘Widget text ou HTML qui ne s’affiche que sur une page ayant un parent ou des enfants’));
    $control_ops = array(‘width’ => 400, ‘height’ => 350);
    parent::__construct(‘My_Widget_Text’, __(‘Mon Text’), $widget_ops, $control_ops);
    }

    function widget( $args, $instance ) {
    extract($args);
    global $wp_query;
    global $post;
    $pageID = $wp_query->post->ID;
    $children = wp_list_pages(« title_li=&child_of= ».$pageID. »&echo=0″);
    //Test to know if children are print or not ( print if current page has a parent or children )
    if((!$children)&&(!$post->post_parent))
    return;
    //get the parent_title
    $parent_title = get_the_title($post->post_parent);
    //Print and put filters arround the title
    $title = apply_filters( ‘widget_title’, $parent_title, $instance, $this->id_base);
    $text = apply_filters( ‘widget_text’, $instance[‘text’], $instance );
    echo $before_widget;
    if ( !empty( $title ) ) { echo $before_title . $title . $after_title; } ?>
    <div class="textwidget"><?php echo $instance['filter'] ? wpautop($text) : $text; echo'</div>‘;
    echo $after_widget;
    }

    function update( $new_instance, $old_instance ) {
    $instance = $old_instance;
    $instance[‘title’] = strip_tags($new_instance[‘title’]);
    if ( current_user_can(‘unfiltered_html’) )
    $instance[‘text’] = $new_instance[‘text’];
    else
    $instance[‘text’] = stripslashes( wp_filter_post_kses( addslashes($new_instance[‘text’]) ) ); // wp_filter_post_kses() expects slashed
    $instance[‘filter’] = isset($new_instance[‘filter’]);
    return $instance;
    }

    function form( $instance ) {
    $instance = wp_parse_args( (array) $instance, array( ‘title’ =>  », ‘text’ =>  » ) );
    $title = strip_tags($instance[‘title’]);
    $text = esc_textarea($instance[‘text’]);
    ?>
    <p><label for="get_field_id(‘title’); ?> »></label>
    </p>

    <textarea class="widefat" rows="16" cols="20" id="get_field_id(‘text’); ?> » name= »get_field_name(‘text’); ?> »></textarea>

    <p><input id="get_field_id(‘filter’); ?> » name= »get_field_name(‘filter’); ?> » type= »checkbox » /> <label for="get_field_id(‘filter’); ?> »></label></p>

    #788355
    Guy
    Participant
    Maître WordPress
    14817 contributions

    je n’ai aucune erreur en local, essais de copier le code dans un nouveau fichier et réenregistre sous un autre nom? quel éditeur utilises tu?

    #788356
    natchoum
    Membre
    Chevalier WordPress
    162 contributions

    Je suis en UTF-8 comme préconisé dans cet article : http://codex.wordpress.org/Writing_a_Plugin
    J’utilise le célèbre notepad++ :D
    Je vais tester.

    #788357
    natchoum
    Membre
    Chevalier WordPress
    162 contributions

    J’ai trouvé, jsuis un boulet : j’ai modifié le nom du dossier pour qu’il soit le même que le fichier et j’ai trouvé un nom de fichier qui ne soit pas menu.php xD et d’un coup ça fonctionne mieux

    #788358
    Guy
    Participant
    Maître WordPress
    14817 contributions

    c’est sur, je l’avais nommé xxx sans le mettre dans un répertoire, pas exactement la même configuration 🙂

10 sujets de 1 à 10 (sur un total de 10)
  • Vous devez être connecté pour répondre à ce sujet.