Voici quelques lignes de code pour modifier et améliorer WordPress. C’est un peu en vrac mais ça peut servir.
Besoin d’un spécialiste WordPress pour votre projet ? Contactez-moi
Afficher un contenu WordPress différent si l’article est dans une catégorie spécifique
1 – Si vous connaissez l’ID de la catégorie :
if ( in_category( '1' ) ){ /* votre code */ }
2 – Pour récupérer l’ID de la catégorie grâce à son adresse (slug) :
$catslug = 'ma-categorie'; if ( in_category( get_category_by_slug($catslug)->term_id ) ){ /* votre code */ }
Récupérer l’ID d’un article WordPress grâce à son adresse (slug)
function get_ID_by_slug($post_slug) { $post = get_post_by_path($post_slug); if ($post) { return $post->ID; } else { return null; } }
Pour récupérer l’ID d’une page WordPress grâce à son adresse (slug)
function get_id_by_slug($page_slug) { $page = get_page_by_path($page_slug); if ($page) { return $page->ID; } else { return null; } }
Récupérer le Slug (adresse) d’un article wordpress grâce à son ID
function get_the_slug( $id=null ){ if( empty($id) ): global $post; if( empty($post) ) return ''; // No global $post var available. $id = $post->ID; endif; $slug = basename( get_permalink($id) ); return $slug; } function the_slug( $id=null ){ echo apply_filters( 'the_slug', get_the_slug($id) ); }
Fonction WordPress pour récupérer le lien d’une catégorie à partir de son url (slug)
function mrsize_cat_link_by_slug($slug = NULL, $class = NULL, $text = NULL){ $cat_slug = $slug; $cat_id = get_category_by_slug($cat_slug); $cat_url = get_category_link($cat_id); $cat_name = $cat_id->name; return ''. $text .' ' . $cat_name . ''; }
Récupérer uniquement le contenu d’un article wordpress à partir de son ID
function content_by_id($id){ $content_post = get_post($id); $content = $content_post->post_content; $content = apply_filters('the_content', $content); $content = str_replace(']]>', ']]>', $content); return $content; }
Modifier le lien « lire la suite » de WordPress
// Modify The Read More Link Text add_filter( 'the_content_more_link', 'modify_read_more_link' ); function modify_read_more_link() { return ''; }
Pré-définir le type de permalien de WordPress
function reset_permalinks() { global $wp_rewrite; $wp_rewrite->set_permalink_structure( '/%postname%/' ); } add_action( 'init', 'reset_permalinks' );
Ajouter une class CSS à la balise body de WordPress
Pratique pour indiquer que la page n’est pas la page d’accueil :
add_filter( 'body_class','not_home_body_classes' ); function not_home_body_classes( $classes ) { global $post; if(is_home() || is_front_page()){ $homeClass = 'home'; } else { $homeClass = 'nothome'; } $classes[] = $homeClass; return $classes; }
Pratique pour customiser une page spécifique
Ici, on ajoute le slug de la page aux classes du body :
add_filter( 'body_class', 'tomorrow_pagename' ); if( ! function_exists('tomorrow_pagename')){ function tomorrow_pagename($pagename) { if( ! isset($post)) global $post; $search_query = get_search_query(); if( ! isset( $pagename )){ if( $search_query != '' ){ $pagename = 'search-results'; } else { $pagename = $post->post_name; } } return $pagename; } } // end - if function not exist
Ajouter une colonne avec l’image à la une dans l’administration wordpress
/* --- Start : Post Thumbnail in admin --- */ // Add the posts and pages columns filter. They can both use the same function. add_filter('manage_posts_columns', 'tcb_add_post_thumbnail_column', 1); add_filter('manage_pages_columns', 'tcb_add_post_thumbnail_column', 1); // Add the column function tcb_add_post_thumbnail_column($cols){ $cols['tcb_post_thumb'] = __('Image','sensa'); return $cols; } // Hook into the posts an pages column managing. Sharing function callback again. add_action('manage_posts_custom_column', 'tcb_display_post_thumbnail_column', 1, 2); add_action('manage_pages_custom_column', 'tcb_display_post_thumbnail_column', 1, 2); // Grab featured-thumbnail size post thumbnail and display it. function tcb_display_post_thumbnail_column($col, $id){ switch($col){ case 'tcb_post_thumb': if( function_exists('the_post_thumbnail') ) echo the_post_thumbnail( 'thumb' ); else echo __( 'Not supported in theme','sensa' ); break; } } /* --- End : Post Thumbnail in admin --- */
Sécurité : Bloquer l’admin de wordpress
// redirect non admin but allow ajax access // source : https://codex.wordpress.org/Plugin_API/Action_Reference/admin_init function restrict_admin() { if ( ! current_user_can( 'publish_posts' ) && ( ! defined( 'DOING_AJAX' ) || ! DOING_AJAX ) ) { wp_redirect( site_url() ); exit; } } add_action( 'admin_init', 'restrict_admin', 1 );
Sécurité : se proteger des requetes d’url malfaisantes
// Protect wordpress against malicious URL requests // source : http://wp-snippet.com/protect-wordpress-against-malicious-url-requests/ global $user_ID; if($user_ID) { if(!current_user_can('administrator')) { if (strlen($_SERVER['REQUEST_URI']) > 255 || stripos($_SERVER['REQUEST_URI'], "eval(") || stripos($_SERVER['REQUEST_URI'], "CONCAT") || stripos($_SERVER['REQUEST_URI'], "UNION+SELECT") || stripos($_SERVER['REQUEST_URI'], "base64")) { @header("HTTP/1.1 414 Request-URI Too Long"); @header("Status: 414 Request-URI Too Long"); @header("Connection: Close"); @exit; } } }
Optimisation : Booster la rapidité de son site wordpress en préchargeant les pages avec HTML5
add_action('wp_head', 'gkp_prefetch'); function gkp_prefetch() { ?> <link rel="prefetch" href="" /> <link rel="prerender" href="" /> <link rel="prefetch" href="/css-minify.php" /> <link rel="prerender" href="/css-minify.php" /> <?php }
Optimisation : Compressez le html de WordPress pour un rendu plus rapide
// Enable GZIP output compression if(extension_loaded("zlib") && (ini_get("output_handler") != "ob_gzhandler")) add_action('wp', create_function('', '@ob_end_clean();@ini_set("zlib.output_compression", 1);')); // ob_start = mise en tampon add_action('get_header', 'gkp_html_minify_start'); function gkp_html_minify_start() { ob_start( 'gkp_html_minyfy_finish' ); } // Minifier les fichiers HTML d'un site WordPress sans plugin if (!current_user_can('update_plugins')) { function gkp_html_minyfy_finish( $html ) { // Suppression des commentaires HTML, // sauf les commentaires conditionnels pour IE $html = preg_replace('/).)*-->/s', '', $html); // Suppression des espaces vides $html = str_replace(array("\r\n", "\r", "\n", "\t"), '', $html); while ( stristr($html, ' ')) $html = str_replace(' ', ' ', $html); return $html; } }
Sécuriser les adresses e-mails de WordPress
// How to automatically hide email adresses from spambots on your WordPress blog function security_remove_emails($content) { $pattern = '/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})/i'; $fix = preg_replace_callback($pattern,"security_remove_emails_logic", $content); return $fix; } function security_remove_emails_logic($result) { return antispambot($result[1]); } add_filter( 'the_content', 'security_remove_emails', 20 ); add_filter( 'widget_text', 'security_remove_emails', 20 );
Masquer les e-mails avec du javascript
// masque emails function encodeEmail($email, $name = null) { $email = preg_replace("/\"/","\\\"",$email); if($name == null) $name = $email; $old = "document.write('$name')"; $output = ""; for ($i=0; $i < strlen($old); $i++) { $output = $output . '%' . bin2hex(substr($old,$i,1)); } $output = 'eval(unescape(\''.$output.'\'))'; $output .= 'Il faut javascript activé pour voir l\'email'; return $output; }
Retirer les balises Meta de WordPress
// Remove meta generator remove_action('wp_head', 'wp_generator');
Site mobile (responsive), ajouter les balises meta
function tomorrow_add_responsive_meta_header() { ?> <meta name="apple-mobile-web-app-title" content=""> <?php } add_action( 'wp_head', 'tomorrow_add_responsive_meta_header' );
Ajouter une classe CSS à the_tags()
// Ajouter une classe html à chaque tag add_filter('the_tags', 'add_class_get_the_tag_list'); function add_class_get_the_tag_list($list) { $list = str_replace('rel="tag">', 'rel="tag" class="tag">', $list); $list = str_replace('', '', $list); return $list; }
Ajouter une Classe CSS au menu wordpress
// add class to menu function special_nav_class($classes, $item){ $classes[] = "w menu-item fl fadeInDown wow animated"; return $classes; } add_filter('nav_menu_css_class' , 'special_nav_class' , 10 , 2);
Ajouter un meta canonical
// canonical // A copy of rel_canonical but to allow an override on a custom tag function rel_canonical_with_custom_tag_override() { if( !is_singular() ) return; global $wp_the_query; if( !$id = $wp_the_query->get_queried_object_id() ) return; // check whether the current post has content in the "canonical_url" custom field $canonical_url = get_post_meta( $id, 'canonical_url', true ); if( '' != $canonical_url ) { // trailing slash functions copied from http://core.trac.wordpress.org/attachment/ticket/18660/canonical.6.patch $link = user_trailingslashit( trailingslashit( $canonical_url ) ); } else { $link = get_permalink( $id ); } echo "\n"; } // remove the default WordPress canonical URL function if( function_exists( 'rel_canonical' ) ) { remove_action( 'wp_head', 'rel_canonical' ); } // replace the default WordPress canonical URL function with your own add_action( 'wp_head', 'rel_canonical_with_custom_tag_override' );
Savoir si c’est une sous-page « if(is_subpage()){} »
// subpage function is_subpage( $page = null ) { global $post; // is this even a page? if ( ! is_page() ) return false; // does it have a parent? if ( ! isset( $post->post_parent ) OR $post->post_parent post_parent == $page ) return true; } else if ( is_string( $page ) ) { // get ancestors $parent = get_ancestors( $post->ID, 'page' ); // does it have ancestors? if ( empty( $parent ) ) return false; // get the first ancestor $parent = get_post( $parent[0] ); // compare the post_name if ( $parent->post_name == $page ) return true; } return false; } }
Administration WordPress
Afficher plus de pages dans votre administration
// display number of pages in admin
add_filter( 'get_user_metadata', 'pages_per_page_wpse_23503', 10, 4 );
function pages_per_page_wpse_23503( $check, $object_id, $meta_key, $single )
{
if( 'edit_page_per_page' == $meta_key )
return 2000;
return $check;
}
Masquer la barre d’administration sauf pour les administrateurs
// Disable Admin Bar for All Users Except for Administrators
add_action('after_setup_theme', 'remove_admin_bar');
function remove_admin_bar() {
if (!current_user_can('administrator') && !is_admin()) {
show_admin_bar(false);
}
}
Modifier le texte dans le footer de l’admin
// custom footer text
function remove_footer_admin () {
echo 'Une question, besoin d\'aide ? Contactez thomas';
}
add_filter('admin_footer_text', 'remove_footer_admin');
Supprimer le lien vers les commentaires dans la barre d’administration WordPress
// Disable support for comments and trackbacks in post types
function remove_admin_bar_links() {
global $wp_admin_bar;
$wp_admin_bar->remove_menu('comments');
}
add_action( 'wp_before_admin_bar_render', 'remove_admin_bar_links' );
Ajouter un lien vers dans la barre d’administration WordPress
function my_admin_bar_menu() {
global $wp_admin_bar;
if ( !is_super_admin() || !is_admin_bar_showing() )
return;
$wp_admin_bar->add_menu( array(
'id' => 'custom_menu',
'title' => __( 'Page title'),
'href' => FALSE ));
$wp_admin_bar->add_menu( array(
'parent' => 'custom_menu',
'title' => __( 'Theme Options'),
'href' => admin_url( 'themes.php?page=options-framework' )) );
}
add_action('admin_bar_menu', 'my_admin_bar_menu');
Forcer l’affichage en une colonne dans l’administration
// force 1 column on dashboard
function so_screen_layout_columns( $columns ) {
$columns['dashboard'] = 1;
return $columns;
}
add_filter( 'screen_layout_columns', 'so_screen_layout_columns' );
function so_screen_layout_dashboard() {
return 1;
}
add_filter( 'get_user_option_screen_layout_dashboard', 'so_screen_layout_dashboard' );
Désactiver les notifications de mise à jour
// remove upgrade notification
function my_remove_update_notifications() {
global $current_user;
get_currentuserinfo();
if($current_user->user_login != 'admin'){
add_action( 'admin_notices', 'update_nag', 3 );
add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
}
}
Definir la couleur par défaut de l’admin WordPress
function set_default_admin_color($user_id) {
$args = array(
'ID' => $user_id,
'admin_color' => 'sunrise'
);
wp_update_user( $args );
}
add_action('user_register', 'set_default_admin_color');
Changer l’ordre du menu dans l’administration
// Move Pages above Media
function mrsize_change_menu_order( $menu_order ) {
return array(
'index.php',
'edit.php',
'edit.php?post_type=page',
'edit.php?post_type=mini_slide',
'edit.php?post_type=home_blocs',
'upload.php',
);
}
add_filter( 'custom_menu_order', '__return_true' );
add_filter( 'menu_order', 'mrsize_change_menu_order' );
Retirer des menus ou enlever des sous-menus dans l’administration WordPress
function mrsize_remove_admin_menus(){
// Check that the built-in WordPress function remove_menu_page() exists in the current installation
if ( function_exists('remove_menu_page') ) {
remove_submenu_page( 'themes.php', 'widgets.php' );
remove_submenu_page( 'themes.php', 'customize.php' );
remove_submenu_page( 'themes.php', 'theme-editor.php' );
remove_menu_page( 'theme-editor.php' );
remove_submenu_page( 'plugins.php', 'plugin-editor.php' );
}
}
// Add our function to the admin_menu action
add_action('admin_menu', 'mrsize_remove_admin_menus');
Recupérer la liste des tags utilisés dans une categorie
function get_tags_in_use($category_ID, $type = 'name'){
// Set up the query for our posts
$my_posts = new WP_Query(array(
'cat' => $category_ID, // Your category id
'posts_per_page' => -1 // All posts from that category
));
// Initialize our tag arrays
$tags_by_id = array();
$tags_by_name = array();
$tags_by_slug = array();
// If there are posts in this category, loop through them
if ($my_posts->have_posts()): while ($my_posts->have_posts()): $my_posts->the_post();
// Get all tags of current post
$post_tags = wp_get_post_tags($my_posts->post->ID);
// Loop through each tag
foreach ($post_tags as $tag):
// Set up our tags by id, name, and/or slug
$tag_id = $tag->term_id;
$tag_name = $tag->name;
$tag_slug = $tag->slug;
// Push each tag into our main array if not already in it
if (!in_array($tag_id, $tags_by_id))
array_push($tags_by_id, $tag_id);
if (!in_array($tag_name, $tags_by_name))
array_push($tags_by_name, $tag_name);
if (!in_array($tag_slug, $tags_by_slug))
array_push($tags_by_slug, $tag_slug);
endforeach;
endwhile; endif;
// Return value specified
if ($type == 'id')
return $tags_by_id;
if ($type == 'name')
return $tags_by_name;
if ($type == 'slug')
return $tags_by_slug;
}
Créer un nuage de tags, à partir des tags utilisés dans une categorie
function tag_cloud_by_category($category_ID){
// Get our tag array
$tags = get_tags_in_use($category_ID, 'id');
// Start our output variable
echo '';
// Cycle through each tag and set it up
foreach ($tags as $tag):
// Get our count
$term = get_term_by('id', $tag, 'post_tag');
$count = $term->count;
// Get tag name
$tag_info = get_tag($tag);
$tag_name = $tag_info->name;
// Get tag link
$tag_link = get_tag_link($tag);
// Set up our font size based on count
$size = 8 + $count;
echo '';
echo ''.$tag_name.'';
echo ' ';
endforeach;
echo '';
}
Ajouter une classe CSS au Excerpt
add_filter( "the_excerpt", "add_class_to_excerpt" );
function add_class_to_excerpt( $excerpt ) {
return str_replace('<p', '<p class="excerpt"', $excerpt);
}
Un excerpt personnalisé
// custom excerpt
function excerpt($limit) {
$excerpt = explode(' ', get_the_excerpt(), $limit);
if (count($excerpt)>=$limit) {
array_pop($excerpt);
$excerpt = implode(" ",$excerpt).'...';
} else {
$excerpt = implode(" ",$excerpt);
}
$excerpt = preg_replace('`\[[^\]]*\]`','',$excerpt);
return '' . $excerpt . '
';
}
function content($limit) {
$content = explode(' ', get_the_content(), $limit);
if (count($content)>=$limit) {
array_pop($content);
$content = implode(" ",$content).'...';
} else {
$content = implode(" ",$content);
}
$content = preg_replace('/\[.+\]/','', $content);
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
return $content;
}
Fonction de base WordPress : ajouter un textdomain
';
// Cycle through each tag and set it up
foreach ($tags as $tag):
// Get our count
$term = get_term_by('id', $tag, 'post_tag');
$count = $term->count;
// Get tag name
$tag_info = get_tag($tag);
$tag_name = $tag_info->name;
// Get tag link
$tag_link = get_tag_link($tag);
// Set up our font size based on count
$size = 8 + $count;
echo '';
echo ''.$tag_name.'';
echo ' ';
endforeach;
echo '
';
}
' . $excerpt . '
'; } function content($limit) { $content = explode(' ', get_the_content(), $limit); if (count($content)>=$limit) { array_pop($content); $content = implode(" ",$content).'...'; } else { $content = implode(" ",$content); } $content = preg_replace('/\[.+\]/','', $content); $content = apply_filters('the_content', $content); $content = str_replace(']]>', ']]>', $content); return $content; }Utile pour rendre un site traduisible
add_action('after_setup_theme', 'my_theme_setup'); function my_theme_setup(){ load_theme_textdomain('sensa', get_template_directory() . '/languages'); }
Changer le permalien des auteurs WordPress
if ( ! function_exists('change_author_permalinks')){ add_action('init','change_author_permalinks'); function change_author_permalinks() { global $wp_rewrite; $wp_rewrite->author_base = 'u'; // Change 'member' to be the base URL you wish to use $wp_rewrite->author_structure = '/' . $wp_rewrite->author_base. '/%author%'; } }
Retirer les styles par defaut de wp-caption
add_shortcode('wp_caption', 'fixed_img_caption_shortcode'); add_shortcode('caption', 'fixed_img_caption_shortcode'); function fixed_img_caption_shortcode($attr, $content = null) { if ( ! isset( $attr['caption'] ) ) { if ( preg_match( '#((?:]+>\s*)?]+>(?:\s*)?)(.*)#is', $content, $matches ) ) { $content = $matches[1]; $attr['caption'] = trim( $matches[2] ); } } $output = apply_filters('img_caption_shortcode', '', $attr, $content); if ( $output != '' ) return $output; extract(shortcode_atts(array( 'id' => '', 'align' => 'alignnone', 'width' => '', 'caption' => '' ), $attr)); if ( 1 > (int) $width || empty($caption) ) return $content; if ( $id ) $id = 'id="' . esc_attr($id) . '" '; return '' . do_shortcode( $content ) . ''; }
Ajouter automatiquement target= »_blank » aux liens externes sur WordPress
function wpi_linktarget($content) { return preg_replace_callback('/]+/', 'wpi_linktarget_callback', $content); } function wpi_linktarget_callback($matches) { $link = $matches[0]; $site_link = get_bloginfo('url'); if (strpos($link, 'target') === false) { $link = preg_replace("%(href=\S(?!$site_link))%i", 'target="_blank" $1', $link); } elseif (preg_match("%href=\S(?!$site_link)%i", $link)) { $link = preg_replace('/target=S(?!_blank)\S*/i', 'target="_blank"', $link); } return $link; } add_filter('the_content', 'wpi_linktarget');
Inscrire automatiquement un nouvel e-mail dans une liste Wysija (Mailpoet) à l’envoi d’un e-mail avec CF7 (Contact Form 7)
function wysija_contactform7_subscribe($cfdata) { $formdata = $cfdata->posted_data; /* if you use different name/id attribute for CF7 - please change 'your-name' and 'your-email'*/ $user_name = $formdata['your-name']; $user_email = $formdata['your-email']; /* change this according to your user list id you want this user to subscribe */ $listID = array( '1', '3' ); $userData=array( 'email' => $user_email, 'firstname' => $user_name, 'birth_date' => $birth_date ); $data=array( 'user' => $userData, 'user_list' => array( 'list_ids'=> $listID ) ); $userHelper=&WYSIJA::get('user','helper'); $userHelper->addSubscriber($data); } add_action('wpcf7_mail_sent', 'wysija_contactform7_subscribe', 1);