WordPress et shortcodes : comment les lister

Si jamais vous commencez à découvrir la chose super pratique qu’est un shortcode alors voici une petite astuce, si vous êtes sur Linux : comment lister les shortcodes présents.

Il suffit dans le shell, d’aller dans votre répertoire WordPress et de taper cette ligne de commande :

find . -type f -print0 | grep -z php$ | xargs -0 grep 'add_shortcode' | more

Et vous aurez le listing de tous les endroits où on appelle cette fonction. Il ne vous reste plus qu’à regarder ce qu’ont fait les personnes ! Il existe même des shortcodes cachés dans certains thèmes, que les auteurs ont dû faire pour eux, mais qu’ils n’ont pas documenté ! Très pratique !

Exemple :

...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-title', 'hybrid_entry_title_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-author', 'hybrid_entry_author_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-terms', 'hybrid_entry_terms_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-comments-link', 'hybrid_entry_comments_link_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-published', 'hybrid_entry_published_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-edit-link', 'hybrid_entry_edit_link_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-shortlink', 'hybrid_entry_shortlink_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'entry-permalink', 'hybrid_entry_permalink_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'post-format-link', 'hybrid_post_format_link_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'comment-published', 'hybrid_comment_published_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'comment-author', 'hybrid_comment_author_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'comment-edit-link', 'hybrid_comment_edit_link_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'comment-reply-link', 'hybrid_comment_reply_link_shortcode' );
...ygen/library/functions/shortcodes.php: add_shortcode( 'comment-permalink', 'hybrid_comment_permalink_shortcode' );
...gelines/includes/class.shortcodes.php: add_shortcode( $shortcode, array( &$this, $data['function']) );
...b/library/shortcodes.php:add_shortcode('gallery', 'gallery_shortcode_tbs');
...b/library/shortcodes.php:add_shortcode('button', 'buttons');
...b/library/shortcodes.php:add_shortcode('alert', 'alerts');
...b/library/shortcodes.php:add_shortcode('block-message', 'block_messages');
...b/library/shortcodes.php:add_shortcode('blockquote', 'blockquotes');
...ean-retina/library/shortcodes/cleanretina-shortcodes.php: * Creates new shortcodes for use in any shortcode-ready area. This function uses the add_shortcode()
...ean-retina/library/shortcodes/cleanretina-shortcodes.php: * @uses add_shortcode() to create new shortcodes.
...ean-retina/library/shortcodes/cleanretina-shortcodes.php: add_shortcode( 'the-year', 'cleanretina_the_year_shortcode' );
...ean-retina/library/shortcodes/cleanretina-shortcodes.php: add_shortcode( 'site-link', 'cleanretina_site_link_shortcode' );
...ean-retina/library/shortcodes/cleanretina-shortcodes.php: add_shortcode( 'wp-link', 'cleanretina_wp_link_shortcode' );
...ean-retina/library/shortcodes/cleanretina-shortcodes.php: add_shortcode( 'th-link', 'cleanretina_themehorse_link_shortcode' );
...ntra/includes/theme-shortcodes.php:add_shortcode('mantra-site', 'mantra_site_link_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('mantra-author', 'mantra_the_author_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('mantra-tag-cloud', 'mantra_tag_cloud_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('mantra-multi', 'mantra_multi_column_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('mantra-column', 'mantra_column_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode( 'mantra-pullquote', 'mantra_pullquote_fn' );
...ntra/includes/theme-shortcodes.php:add_shortcode( 'mantra-button-light', 'mantra_button_light_fn' );
...ntra/includes/theme-shortcodes.php:add_shortcode( 'mantra-button-dark', 'mantra_button_dark_fn' );
...ntra/includes/theme-shortcodes.php:add_shortcode( 'mantra-button-color', 'mantra_button_color_fn' );
...ntra/includes/theme-shortcodes.php:add_shortcode('cryout-site', 'mantra_site_link_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('cryout-author', 'mantra_the_author_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('cryout-tag-cloud', 'mantra_tag_cloud_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('cryout-multi', 'mantra_multi_column_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode('cryout-column', 'mantra_column_fn');
...ntra/includes/theme-shortcodes.php:add_shortcode( 'cryout-pullquote', 'mantra_pullquote_fn' );
...ntra/includes/theme-shortcodes.php:add_shortcode( 'cryout-button-light', 'mantra_button_light_fn' );
...ntra/includes/theme-shortcodes.php:add_shortcode( 'cryout-button-dark', 'mantra_button_dark_fn' );
...ntra/includes/theme-shortcodes.php:add_shortcode( 'cryout-button-color', 'mantra_button_color_fn' );
...artupwp/functions.php:add_shortcode('wp_caption', 'fixed_img_caption_shortcode');
...artupwp/functions.php:add_shortcode('caption', 'fixed_img_caption_shortcode');
...p:add_shortcode('wp_caption', 'img_caption_shortcode');
...p:add_shortcode('caption', 'img_caption_shortcode');
...p:add_shortcode('gallery', 'gallery_shortcode');
...p:add_shortcode( 'audio', 'wp_audio_shortcode' );
...p:add_shortcode( 'video', 'wp_video_shortcode' );
...-embed.php: add_shortcode( 'embed', '__return_false' );
...-embed.php: * @uses add_shortcode()
...-embed.php: add_shortcode( 'embed', array( $this, 'shortcode' ) );
...es.php: * add_shortcode('footag', 'footag_func');
...es.php: * add_shortcode('bartag', 'bartag_func');
...es.php: * add_shortcode('baztag', 'baztag_func');
...es.php:function add_shortcode($tag, $func) {

La ville de Munich achève avec succès sa migration de 14000 PCs vers l’Open Source

Article copié collé ici :

Dix ans après avoir amorcé la migration de l’ensemble de son parc informatique vers Linux, la ville de Munich dans un communiqué affirme avoir finalisé avec succès l’adoption des solutions open source.

Désormais, la grande majorité du personnel de l’administration publique utilise une version personnalisée de Linux. Baptisée LiMux, la distribution Linux de la ville de Munich fonctionne sous 14 800 postes de travail, sur 15 500 PC de l’administration. Le but initial était de faire migrer 12 000 postes de travail de Windows vers LiMux.

LiMux intègre une infrastructure de bureau entièrement open source. Le format ODF (Open Document Format) a également été adopté par la ville de Munich en tant que norme pour les documents bureautiques (texte, tableurs, présentations, diagrammes, etc.).

Malgré la migration d’un nombre important de PC, la ville de Munich affirme que l’administration est toujours restée opérationnelle et réactive. Les administrateurs et les utilisateurs ont pu, avec le temps, se familiariser avec le système d’exploitation et les outils open source.

Cette adoption de l’open source aurait permis à la ville de Munich d’économiser près de 11,7 millions d’euros en novembre de l’année dernière. En plus des réductions de couts, cette opération permettrait également à la localité d’être moins dépendante des fabricants et des systèmes d’exploitation propriétaires.

Toujours dans son élan en faveur de l’open source, la ville de Munich encourage ses citoyens à s’orienter vers Linux. Pour résoudre l’équation de la fin du support de Windows XP en avril 2014, le comité administratif de la localité avait procédé à la distribution de 2 000 CD de la version LTS (long-term support) d’Ubuntu 12.04.

WordPress et JavaScript : mettre du code en dur dans vos articles

Si jamais un jour, comme moi, vous essayez de mettre du code JavaScript directement à l’intérieur de votre article – ou de votre page – alors irez dans l’onglet à droite ainsi :

Wordpress edition d'un article - onglet texte.jpg

Et vous taperez sûrement quelques lignes basiques comme celles-ci :

<script>
alert('bonjour');
</script>

Cela ne fonctionnera pas !

J’ai posé la question ici, et la réponse était : le code généré dans la page n’est pas correct, il faut le corriger… ce qui est vrai ! La seule solution que j’aie trouvé : écrire un fichier JavaScript externe, et l’embarquer dans la page. Malheureusement, j’ai codé la chose en dur, et je cherche actuellement parmi ces possibilités :

  • Soit pouvoir écrire du code qui ne sera pas retravaillé dans les articles / et / ou / pages ;
  • Soit pouvoir inclure des fichiers uniquement en fonction des pages.

Ce que je n’ai pas fait. Mais ma solution fonctionne, même si elle n’est pas la meilleure.

Solution 1

Je suis allé dans mon thème, et j’ai fait un include « générique » dans et j’y ai rajouté l’inclusion de mon script :

wp_enqueue_script( 'olivierpons', get_template_directory_uri() . '/js/op.js' );

C’était ici :
Wordpress description de l'inclusion de javascript dans un theme

Et là, j’ai pu écrire mon script, entièrement en JavaScript, qui n’est pas modifié par WordPress.

Pour information, ce script crée un formulaire complet afin de générer une requête SQL pour créer une base de données SQL avec un utilisateur et un mot de passe afin de copier coller le code pour créer la totale. Cela est si souvent fait que ça m’a lassé un peu et j’ai écrit ce code.

Vous pouvez retrouver ce formulaire dans cet article et dans cette page.

Solution 2

Les shortcode. Vous écrivez une function Php qui renvoie une chaine qui ne sera pas modifiée. Donc cette chaine peut tout à fait être du code dans une balise Javascript : <script>alert('bonjour');</script>. Seul problème : elle doit être codée en dur.

J’ai essayé de le contourner pour rendre le code entièrement dynamique.
Essayez ce code dans le fichier functions.php de votre thème :

if (!function_exists( 'foobar_func' )):
function foobar_func( $atts, $content, $tag ){
  echo $atts['script'];
  return (isset($content) ? $content : '');
}
add_shortcode( 'foobar', 'foobar_func' );
endif;

Puis essayez d’appeler la fonction ainsi dans un article :

[f oobar script="<script>
  jQuery(document).ready(function() {
    var j=jQuery('<div />');
  });
</script>"]

Et vous verrez que malgré tout, les paramètres sont retravaillés par WordPress et malmenés !

Au final, deux solutions

  • Ecrire un fichier JS externe, et l’inclure soit de manière générique dans toutes les pages, soit de manière dynamique (à vous de le paramétrer) :
  • La seconde qui consiste à écrire un shortcode et que ce shortcode renvoie le code Javascript au complet, sachant que le gros inconvénient, c’est que le code que vous renverrez sera difficilement lisible : en effet, ce sera une chaine de caractères « simple » dans votre fichier Php, il n’y aura aucune coloration syntaxique.

Symfony 2 Embedded Forms: Catchable Fatal Error: Argument 1 passed to Entity::addProperty must be an instance of XX\MyClass, array given

Encore une abstraction qui fuit.

Si jamais vous avec un problème avec un ManyToMany et que vous rencontrez une erreur du type : Symfony 2 Embedded Forms: Catchable Fatal Error: Argument 1 passed to Entity::addProperty must be an instance of XX\MyClass, array given, c’est que vous avez peut-être le même problème que moi, à savoir : une mauvaise déclaration de votre type de formulaire.

Enfin… mauvaise… disons qu’il manque des choses, et que logiquement, tant qu’on n’a pas une connaissance parfaite des rouages de Symfony, on ne comprend pas pourquoi ça ne fonctionne pas.

Je vais donc vous dire ce qu’il me manquait : j’avais une table personne et une table adresse.
Ces deux tables étaient reliées par une relation ManyToMany : une personne peut avoir une ou plusieurs adresses, et à une même adresse, plusieurs personnes peuvent habiter (heureusement ! 😉 ).

Dans la déclaration du type d’adresse, tout semblait cohérent, il n’y avait aucune erreur, mais il manquait une seule chose : la fonction setDefaultOption(). Je vous la fais courte : le code qui suit fonctionne.

Même si cette astuce ne fonctionne pas pour vous, essayez de suivre mon raisonnement : j’ai refait complètement un projet en partant de zéro, en suivant les instructions ici (Symfony 2 : Comment imbriquer une Collection de Formulaires) : et ensuite j’ai comparé pas à pas avec mon code. Pour en arriver aux six petites lignes qui manquaient : la fonction setDefaultOption().

<?php

namespace MaSociete\Bundle\MyBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver;
use Symfony\Component\Form\FormBuilderInterface;

class AdresseType extends AbstractType
{
   /**
    * Builds the form.
    *
    * This method is called for each type in the hierarchy
    * starting form the top most type. Type extensions can
    * further modify the form.
    *
    * @see FormTypeExtensionInterface::buildForm()
    *
    * @param FormBuilderInterface $builder The form builder
    * @param array                $options The options
    */
    public function buildForm(
        FormBuilderInterface $builder,
        array $options
    ) {
        $builder->add('adresse1', 'text')
            ->add('adresse2', 'text')
            ->add('cp', 'text')
            ->add('ville', 'text');
        }
    public function setDefaultOptions(
        \Symfony\Component\OptionsResolver\OptionsResolverInterface $resolver
    ) {
        $resolver->setDefaults(array(
            'data_class' => 'MaSociete\Bundle\MyBundle\Entity\Adresse',
        ));
    }
    public function getDefaultOptions(array $options)
    {
        return array(
            'data_class' => 'MaSociete\Bundle\MyBundle\Entity\Adresse',
        );
    }
    public function getName()
    {
        return 'adresse';
    }
}

Linux équipe plus de 95 % des 500 supercalculateurs les plus puissants au monde

Je cite, citation prise ici :

Pour résumer 493 supercalculateurs sont Linux + Unix. Il y en a 6 sous Windows !
Soit 1,2 %.
Aucun Apple. Ah si ! Le système d’origine d’apple, BSD : 1 sur 500, soit 0.2 %.

Que dire de plus ? Les chiffres parlent d’eux-même.

Si Linux a du mal à s’imposer dans le monde des ordinateurs de bureau, l’OS open source se taille une part de lion dans l’embarqué (notamment avec Androïd pour les smartphones) et dans le monde des superordinateurs.

La dernière liste du top 500 des supercalculateurs les plus puissants du monde montre que Linux équipe plus de 95 % des appareils présents dans la liste.

Au total 482 supercalculateurs du top 500 fonctionnent sous Linux.
Ce qui fait une part de marché de près de 96,4 % pour l’OS. Il est suivi par Unix, qui fonctionne sur onze appareils. Quatre systèmes fonctionnent sur une combinaison de systèmes d’exploitation. Windows équipe juste deux appareils de la liste et BSD un seul superordinateur.

Coding game : les résultats : olivier pons

Je suis content, je suis 92ème sur 1167 :

Coding Game résultat pour Olivier Pons 92ème sur 1167

Dans les faits, si on enlève ceux qui sont à 0% (on ne sait pas s’ils ont participé ou pas), je suis 92ème sur 871. Ce qui n’est pas trop mal.
Si j’avais réussi à résoudre le second challenge en entier, j’aurais été dans les 40 premiers…

Vous pouvez avoir accès à mes codes sources ainsi qu’aux résultats ici.

J’étais content pour le premier, réalisé assez rapidement (32 minutes) :
Coding Game 2013 11 22 analyse 1

Alors que pour le second, j’ai galéré comme un fou (sachant que je suis allé chercher une pizzas et que je l’ai mangé en famille pendant le concours) :

Coding Game 2013 11 22 analyse 2

Ce qu’il y a de marrant, c’est qu’en travaillant en local, je me suis ressorti le fichier décompressé au format texte et c’était amusant à voir :

Coding Game 2013 11 22 notes de musiques fichier décompressé au format texte

Développement : Coding contest !

Nouveau challenge de codeurs !

C’est pour le fun, essayez vous aussi 

Le principe est simple

Vous aurez deux puzzles de programmation à résoudre.

Pour ce faire, vous pourrez choisir votre langage favori parmi ceux-ci : Java, C, C++, C#, Javascript, PHP, Python, Ruby, Objective-C, Haskell and Go.
La durée moyenne d’un challenge est de 2 heures et 30 minutes.

J’y serai, le 23 novembre !

Inscrivez vous !
Si jamais plus de trois personnes se sont inscrites via le lien précédent, et ont dépassé un score de 0% (= y sont allées), j’aurais un t-shirt codingame 😉

IUT informatique : script Shell pour injecter la base de données WordPress

Dumper la base de données

mysqldump -u root -pmysql wordpresslocal > 2013.12.19.wordpresslocal.sql

Réinjecter la base de données

mysql -u root -pmysql -e "DROP DATABASE IF EXISTS wordpresslocal;"
mysql -u root -pmysql -e "CREATE DATABASE wordpresslocal DEFAULT CHARACTER SET utf8;"
mysql -u root -pmysql -e "USE wordpresslocal ; GRANT ALL PRIVILEGES ON wordpresslocal   TO 'v69a6YK614454xA'@'localhost' IDENTIFIED BY 'nQ1e7NfDRXG2q6H';"
mysql -u root -pmysql -e "USE wordpresslocal ; GRANT ALL PRIVILEGES ON wordpresslocal.* TO 'v69a6YK614454xA'@'localhost' IDENTIFIED BY 'nQ1e7NfDRXG2q6H';"
mysql -u root -pmysql wordpresslocal < 2013.12.19.wordpresslocal.sql

IUT : comment faire fonctionner WordPress en local

Solution trouvée ici

Créer un fichier .htaccess à la racine de ce que vous avez décompressé. Ce fichier doit contenir :

DirectoryIndex index.php index.html
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress