- Statut : non résolu
- Ce sujet contient 9 réponses, 2 participants et a été mis à jour pour la dernière fois par Guy, le il y a 13 années et 2 mois.
-
AuteurMessages
-
17 août 2011 à 12 h 54 min #498688
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 si quelqu’un a ça sous la main, ça m’interresse17 août 2011 à 13 h 21 min #788350Bon 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 ). 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 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 😋
17 août 2011 à 16 h 48 min #788351je vois un <?php qui n'est jamais fermé en fin de fichier
18 août 2011 à 7 h 26 min #788352j’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 )
18 août 2011 à 8 h 03 min #788353vé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.
18 août 2011 à 8 h 32 min #788354En 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>18 août 2011 à 8 h 45 min #788355je 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?
18 août 2011 à 8 h 53 min #788356Je suis en UTF-8 comme préconisé dans cet article : http://codex.wordpress.org/Writing_a_Plugin
J’utilise le célèbre notepad++
Je vais tester.18 août 2011 à 9 h 05 min #788357J’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
18 août 2011 à 9 h 33 min #788358c’est sur, je l’avais nommé xxx sans le mettre dans un répertoire, pas exactement la même configuration 🙂
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.