Des fonctions WordPress… qui vous économiseront beaucoup de plugins

Cela faisait déjà un ptit bout de temps que je souhaitais partager ces tweaks WordPress disséminé sur mes différents site et qui à chaque fois m’ont permit d’intégrer dans les thèmes des fonctionnalités essentielles. Mais sans vouloir prendre la paternité de ces dernières, j’ai aussi tâché de retrouver leurs auteurs originaux de ces fonctions.

Functions.php et la garantie d’un thème complet?

Il y a 2 écoles (d’ailleurs où n’y a t-il pas deux camps ?), celle du tout-plugin et celle du tout codé. Honnêtement et pour changer des réponses habituelles, je vais dire que les 2 ont tort (ça c’est fait!). Je vais pas vous rappeler les arguments de chaque camp (à lire sur ce sujet un bon post WPTuts), les uns préfère la globale du site, les autres la flexibilité et la rapidité, ça se vaut.

Malgré tout et c’est encore mon avis, il y a des fonctionnalités – aussi basiques que le fil d’Ariane par exemple – qui mériteraient d’être intégrées au thème non? Et bien là aussi on se repose la question lorsqu’un plugin dédié au SEO pour WP vous est publié et propose un flopée de fine-tuning juste sur le fil d’Ariane, pas facile alors de décider code/plugin!

Alors faites votre choix.

Afficher les vignettes Featured Image dans votre liste d’article

[php]

// Display Featured image in WP backoffice
add_image_size( ‘admin-list-thumb’, 100, 70, true );
add_filter(‘manage_posts_columns’, ‘new_add_post_thumbnail_column’, 5);

function new_add_post_thumbnail_column($cols){
$cols[‘new_post_thumb’] = __(‘Featured’);
return $cols;
}
add_action(‘manage_posts_custom_column’, ‘new_display_post_thumbnail_column’, 5, 2);

function new_display_post_thumbnail_column($col, $id){
switch($col){
case ‘new_post_thumb’:
if( function_exists(‘the_post_thumbnail’) ) {
echo the_post_thumbnail( ‘admin-list-thumb’ );

}
else
echo ‘Not supported in theme’;
break;
}
}

[/php]

Créer un sommaire automatique

Pour le suivant, un grand merci à Daniel Roch du blog SEOMix qui m’a permit de dégotter la semaine passé un sommaire clés en mains pour votre sidebar articles. On aime bien le Made in France, alors on partage! Et n’hésitez pas à visiter régulièrement ce blog, très riche en articles sur WP.

[php]

<code>/** Fonction de table des matières – Modifié par Daniel Roch – Original par Scott Yang*/
// Classe pour la table des matières
class YLSY_TableOfContents {
function add_toc($level, $tocid, $text) {
$this->toc[] = array($this->pagenum, $level, $tocid, $text);
$this->minlevel = min($this->minlevel, $level);}
function get_tocid($text) {
$search = explode(",","ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u");
$replace = explode(",","c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u");
$chaine = str_replace($search, $replace, $text);
$tocid = sanitize_title_with_dashes($chaine);$count = 0;
while (isset($this->tocmap[$tocid]))$tocid = $text.strval(++ $count);
$this->tocmap[$tocid] = true;return "$tocid";}
function get_toc() {
global $wp_rewrite;
if (isset($this->toccache))return $this->toccache;if (!isset($this->toc))return ”;
$permalink = get_permalink($this->postid);
for ($i = 0; $i < sizeof($this->toc); $i ++) {
list($pagenum, $level, $tocid, $text) = $this->toc[$i];
$link = $permalink;
if ($pagenum > 1) {
if ($wp_rewrite->using_permalinks()) $link = trailingslashit($link)."$pagenum/";
else $link .= "&page=$pagenum";}
$link = "<a class=’toclink’ href="$link#$tocid">$text</a>";
if ($i == 0) {
$level = min($level, $this->minlevel);
$stack = array($level);
$html .= "<div id=’dat3’>Au sommaire</div><ol id=’toclist’><li class=’toc$level’>$link";
} else {
$prev = $stack[sizeof($stack)-1];
if ( $level < 4){
if ($level == $prev) {
$html .= "</li>n<li class=’toc$level’>$link";
} elseif ($level < $prev) {
while (sizeof($stack) > 1) {
array_pop($stack);
$html .= "</li>";
$prev = $stack[sizeof($stack)-1];
if ($level >= $prev)break;}
$html .= "</li>n<li class=’toc$level’>$link";
} else {
$stack[] = $level;
$html .= "n<li class=’toc$level’>$link";
}
}}
}
while (sizeof($stack) > 0) {
array_pop($stack);$html .= "</li>";
}
$html .= "</ol>";
return $html;}
function replace_heading($match) {
if ($match[0] == ‘<!–nextpage–>’) {error_log(‘next’);$this->pagenum ++;return $match[0];}
$tocid = $this->get_tocid($match[3]);
$this->add_toc(intval($match[1]), $tocid, $match[3]);
return "<h$match[1] id="$tocid"$match[2]>$match[3]</h$match[1]>";}
function the_content($content) {
$this->toc = array();$this->tocmap = array();$this->toccache = null;$this->minlevel = 6;$this->pagenum = 1;
$regex = ‘#<h([1-6])(.*?)>(.*?)</h1>|<!–nextpage–>#’;
$content = preg_replace_callback($regex,
array(&$this, ‘replace_heading’), $content);
return preg_replace(‘|(<p>)?<!–TOC–>(</p>)?|’, $this->get_toc(),
$content);}
function the_posts($posts) {
for ($i = 0; $i < sizeof($posts); $i ++) {
$post = &$posts[$i];$this->postid = $post->ID;
$post->post_content = $this->the_content($post->post_content);
$post->post_toc = $this->get_toc();}
return $posts;}};
add_filter(‘the_posts’, array(new YLSY_TableOfContents, ‘the_posts’));</code>

[/php]

Du custom CSS dans l’éditeur WordPress

Voici une méthode pour appliquer un CSS sur l’éditeur WordPress. Cette fonction est une simplification du tutoriel complet qui vous permettra de non seulement changer la feuille de style mais aussi éditer en plein écran ou à la taille de votre thème (ex : 960px)

[php]
// Backend TinyMCE Style
add_editor_style(‘style.css’);
[/php]

Appliquer automatiquement la Featured Image

Bien que beaucoup rendu plus simplifié depuis la version 3.x, l’image à la une de WordPress peut devenir selon votre workflow une étape supplémentaire. Ce code permet de rechercher le premier media image du contenu pour l’attribuer à la une. Pour ceux qui on loupé cette fonctionnalité et on oublié d’assigner une featured image, il existe aussi un plugin qui permet de faire cette méthode à tous vos articles déjà édités.

[php]

// Auto set Featured Image
function autoset_featured() {
global $post;
$already_has_thumb = has_post_thumbnail($post->ID);
if (!$already_has_thumb) {
$attached_image = get_children( "post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1" );
if ($attached_image) {
foreach ($attached_image as $attachment_id => $attachment) {
set_post_thumbnail($post->ID, $attachment_id);
}
}
}
} //end function
add_action(‘the_post’, ‘autoset_featured’);
add_action(‘save_post’, ‘autoset_featured’);
add_action(‘draft_to_publish’, ‘autoset_featured’);
add_action(‘new_to_publish’, ‘autoset_featured’);
add_action(‘pending_to_publish’, ‘autoset_featured’);
add_action(‘future_to_publish’, ‘autoset_featured’);

[/php]

Texte par défaut dans l’éditeur WordPress

Pour ceux qui ont fait de WordPress un portail de blogs, ou bien ceux qui pratiquent courrament le guest-post, voici un code pour afficher un texte par défaut dans la zone de texte. Idéal pour les consignes de rédaction. Source StackExchange

[php]
// Default Content
add_filter( ‘default_content’, ‘my_editor_content’ );
function my_editor_content( $content ) {
$content = "</pre>
<h2>Bienvenue dans la création d’un nouvel article/guest-post.</h2>
<pre>

Ci-dessous quelques règles à suivre :</pre>
<ul>
<li>Merci de toujours ajouter 1 image à la une</li>
<li>L’affiliation est autorisée, mais le ratio nombre de liens affiliés/liens total/taille du contenu sera prise en compte</li>
<li>Merci de garder un style journalistique et séparer les idées en paragraphes pour garder une clarté au contenu.</li>
<li>Les codes sources sont autorisés, vous pourrez les mettre en valeur avec les code du WP Syntax Highlight.</li>
<li>Votre profil est affiché sur le site, merci de bien vouloir remplir ce dernier avec vos réseaux sociaux.</li>
</ul>
<pre>
Merci pour votre collaboration!";
return $content;
}
[/php]

3 Comments

  1. Merci Patrice pour ce site que je ne connaissais pas.
    Les codes sont intéressants (c’est la méthode que je préféré aussi, malgré le fait que je ne soit pas codeur) mais c’est aussi la méthode la plus contraignante puisque qu’aucune mise à jour n’est ensuite possible sans revenir à la normal.
    Une solution à cela ??
    @+

Leave a Reply