Meilleure collection de code pour votre fichier functions.php [fermé]

321

Veuillez voter sur la question et sur les réponses qui vous semblent utiles en cliquant sur la flèche vers le haut située à gauche de la question ou de la réponse.

Comme beaucoup d’autres personnes qui consultent actuellement ce message, j’ai lu divers blogs, forums et groupes de discussion pour apprendre et améliorer mes compétences en wordpress. Au cours des 12 derniers mois, j'ai eu pour mission de remplacer mon utilisation des plugins par l'ajout de code à mon fichier functions.php . Bien que je sois tout à fait d’accord pour dire que les plugins sont très utiles dans de nombreuses situations, mon expérience a prouvé que dans 90% des cas d’utilisation, bien qu’un plugin puisse exister, son utilisation pourrait créer des complications inutiles et des problèmes de compatibilité. De plus, dans de nombreux cas, ces plugins ont ajouté des menus et d’autres éléments d’administration dont je n’ai ni envie ni besoin.

Plus souvent qu'autrement, j'ai découvert qu'en analysant le code des plugins, je pouvais supprimer le morceau de code que je voulais et le coder en dur dans mon functions.php . Cela m'a fourni la fonctionnalité exacte dont j'avais besoin sans avoir à inclure des éléments inutiles.

Le but de cet article est donc de tenter de vous engager, le lecteur / administrateur / développeur, pour partager avec moi et avec d'autres ici tout élément de code que vous trouvez utile et que vous avez ajouté au fichier function.php de votre thème à étendre. ou améliorer WordPress sans utiliser de plugin.

Lorsque vous soumettez une réponse ici, merci de bien vouloir attribuer un titre à chaque bit de code. Indiquez-nous si, avec quelle version de Wordpress vous savez qu'il est compatible, incluez la description que vous jugez la plus appropriée pour décrire sa fonction et (le cas échéant) un lien. au plugin ou à la source d'origine où vous avez trouvé les informations.

Je suis impatient de connaître toutes vos réponses et j'ajouterai bien sûr mes propres nouvelles découvertes chaque fois que je les trouverai.

    
posée NetConstructor.com 14.08.2012 - 12:15

108 réponses

102

Activer la fonctionnalité d'administration masquée affichant TOUS les paramètres de site

Testé le: Wordpress 3.1 RC3

Ce petit morceau de code fait quelque chose d'assez cool. Il ajoutera une option supplémentaire à votre menu de paramètres avec un lien vers "tous les paramètres" qui vous montrera une liste complète de tous les paramètres de votre base de données liés à votre site wordpress. Le code ci-dessous rendra ce lien uniquement visible pour un utilisateur administrateur et le masquera pour tous les autres utilisateurs.

// CUSTOM ADMIN MENU LINK FOR ALL SETTINGS
   function all_settings_link() {
    add_options_page(__('All Settings'), __('All Settings'), 'administrator', 'options.php');
   }
   add_action('admin_menu', 'all_settings_link');
    
réponse donnée NetConstructor.com 26.01.2011 - 16:06
85

Modifier le logo de connexion & Lien URL de l'image

Testé le: WordPress 3.0.1

Ce code vous permettra de modifier facilement le logo de la page de connexion WordPress ainsi que le lien href et le titre de ce logo.

add_filter( 'login_headerurl', 'namespace_login_headerurl' );
/**
 * Replaces the login header logo URL
 *
 * @param $url
 */
function namespace_login_headerurl( $url ) {
    $url = home_url( '/' );
    return $url;
}

add_filter( 'login_headertitle', 'namespace_login_headertitle' );
/**
 * Replaces the login header logo title
 *
 * @param $title
 */
function namespace_login_headertitle( $title ) {
    $title = get_bloginfo( 'name' );
    return $title;
}

add_action( 'login_head', 'namespace_login_style' );
/**
 * Replaces the login header logo
 */
function namespace_login_style() {
    echo '<style>.login h1 a { background-image: url( ' . get_template_directory_uri() . '/images/logo.png ) !important; }</style>';
}

MODIFIER: si vous souhaitez utiliser le logo du site pour remplacer le logo de connexion, vous pouvez utiliser les éléments suivants pour extraire dynamiquement ces informations (testé sur WP3.5 ). :

function namespace_login_style() {
    if( function_exists('get_custom_header') ){
        $width = get_custom_header()->width;
        $height = get_custom_header()->height;
    } else {
        $width = HEADER_IMAGE_WIDTH;
        $height = HEADER_IMAGE_HEIGHT;
    }
    echo '<style>'.PHP_EOL;
    echo '.login h1 a {'.PHP_EOL; 
    echo '  background-image: url( '; header_image(); echo ' ) !important; '.PHP_EOL;
    echo '  width: '.$width.'px !important;'.PHP_EOL;
    echo '  height: '.$height.'px !important;'.PHP_EOL;
    echo '  background-size: '.$width.'px '.$height.'px !important;'.PHP_EOL;
    echo '}'.PHP_EOL;
    echo '</style>'.PHP_EOL;
}
    
réponse donnée NetConstructor.com 23.01.2013 - 21:02
75

Incluez des types de publication personnalisés dans les résultats de la recherche.

// MAKE CUSTOM POST TYPES SEARCHABLE
function searchAll( $query ) {
 if ( $query->is_search ) { $query->set( 'post_type', array( 'site', 'plugin', 'theme', 'person' )); } 
 return $query;
}
add_filter( 'the_search_query', 'searchAll' );

Ajoutez vos types de publication personnalisés au flux RSS principal de votre site par défaut.

// ADD CUSTOM POST TYPES TO THE DEFAULT RSS FEED
function custom_feed_request( $vars ) {
 if (isset($vars['feed']) && !isset($vars['post_type']))
  $vars['post_type'] = array( 'post', 'site', 'plugin', 'theme', 'person' );
 return $vars;
}
add_filter( 'request', 'custom_feed_request' );

Inclure les types de publication personnalisés dans le widget du tableau de bord de l'administrateur «À l'heure actuelle»

Cela inclura vos types d'articles personnalisés et le nombre d'articles pour chaque type dans le widget de tableau de bord "En ce moment".

// ADD CUSTOM POST TYPES TO THE 'RIGHT NOW' DASHBOARD WIDGET
function wph_right_now_content_table_end() {
 $args = array(
  'public' => true ,
  '_builtin' => false
 );
 $output = 'object';
 $operator = 'and';
 $post_types = get_post_types( $args , $output , $operator );
 foreach( $post_types as $post_type ) {
  $num_posts = wp_count_posts( $post_type->name );
  $num = number_format_i18n( $num_posts->publish );
  $text = _n( $post_type->labels->singular_name, $post_type->labels->name , intval( $num_posts->publish ) );
  if ( current_user_can( 'edit_posts' ) ) {
   $num = "<a href='edit.php?post_type=$post_type->name'>$num</a>";
   $text = "<a href='edit.php?post_type=$post_type->name'>$text</a>";
  }
  echo '<tr><td class="first num b b-' . $post_type->name . '">' . $num . '</td>';
  echo '<td class="text t ' . $post_type->name . '">' . $text . '</td></tr>';
 }
 $taxonomies = get_taxonomies( $args , $output , $operator ); 
 foreach( $taxonomies as $taxonomy ) {
  $num_terms  = wp_count_terms( $taxonomy->name );
  $num = number_format_i18n( $num_terms );
  $text = _n( $taxonomy->labels->singular_name, $taxonomy->labels->name , intval( $num_terms ));
  if ( current_user_can( 'manage_categories' ) ) {
   $num = "<a href='edit-tags.php?taxonomy=$taxonomy->name'>$num</a>";
   $text = "<a href='edit-tags.php?taxonomy=$taxonomy->name'>$text</a>";
  }
  echo '<tr><td class="first b b-' . $taxonomy->name . '">' . $num . '</td>';
  echo '<td class="t ' . $taxonomy->name . '">' . $text . '</td></tr>';
 }
}
add_action( 'right_now_content_table_end' , 'wph_right_now_content_table_end' );
    
réponse donnée jaredwilli 09.12.2012 - 18:45
74

Supprimer la notification de mise à jour pour tous les utilisateurs sauf l'utilisateur ADMIN

Testé le: Wordpress 3.0.1

Ce code garantira qu'aucun utilisateur autre que "admin" ne soit notifié par wordpress lorsque des mises à jour sont disponibles.

// REMOVE THE WORDPRESS UPDATE NOTIFICATION FOR ALL USERS EXCEPT SYSADMIN
   global $user_login;
   get_currentuserinfo();
   if ($user_login !== "admin") { // change admin to the username that gets the updates
    add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
    add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
   }

Version modifiée pour afficher uniquement la notification de mise à jour pour les utilisateurs admin (par opposition à l'utilisateur 'admin'):

// REMOVE THE WORDPRESS UPDATE NOTIFICATION FOR ALL USERS EXCEPT SYSADMIN
       global $user_login;
       get_currentuserinfo();
       if (!current_user_can('update_plugins')) { // checks to see if current user can update plugins 
        add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
        add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
       }
    
réponse donnée NetConstructor.com 26.01.2011 - 15:33
69

Chargement de jQuery à partir du CDN Google

Testé le: Wordpress 3.0.1

// even more smart jquery inclusion :)
add_action( 'init', 'jquery_register' );

// register from google and for footer
function jquery_register() {

if ( !is_admin() ) {

    wp_deregister_script( 'jquery' );
    wp_register_script( 'jquery', ( 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js' ), false, null, true );
    wp_enqueue_script( 'jquery' );
}
}

Supprimer les informations de version de WordPress pour la sécurité

Testé le: Wordpress 3.0.1

// remove version info from head and feeds
function complete_version_removal() {
    return '';
}
add_filter('the_generator', 'complete_version_removal');

Ajouter Spam & Supprimer les liens vers les commentaires sur Front End

Testé le: Wordpress 3.0.1

Cela facilite beaucoup la gestion des commentaires du début à la fin en ajoutant du spam et en supprimant des liens. **

// spam & delete links for all versions of wordpress
function delete_comment_link($id) {
    if (current_user_can('edit_post')) {
        echo '| <a href="'.get_bloginfo('wpurl').'/wp-admin/comment.php?action=cdc&c='.$id.'">del</a> ';
        echo '| <a href="'.get_bloginfo('wpurl').'/wp-admin/comment.php?action=cdc&dt=spam&c='.$id.'">spam</a>';
    }
}

Reporter l'affichage public au flux RSS

Testé le: Wordpress 3.0.1

Enfin, j'aime retarder la publication sur mes flux RSS de 10 à 15 minutes car je trouve toujours au moins quelques erreurs dans mon texte. Si vous souhaitez que le contenu soit exclusif sur votre site pendant une journée ou une semaine avant de le diffuser vers vos lecteurs RSS, vous pouvez également l'utiliser.

// delay feed update
function publish_later_on_feed($where) {
    global $wpdb;

    if (is_feed()) {
        // timestamp in WP-format
        $now = gmdate('Y-m-d H:i:s');

        // value for wait; + device
        $wait = '10'; // integer

        // http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timestampdiff
        $device = 'MINUTE'; // MINUTE, HOUR, DAY, WEEK, MONTH, YEAR

        // add SQL-sytax to default $where
        $where .= " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$now') > $wait ";
    }
    return $where;
}
add_filter('posts_where', 'publish_later_on_feed');
    
réponse donnée Derek Perkins 31.01.2012 - 11:48
54

Outils de profilage Wordpress

J'aime ajouter des outils de profilage dans un fichier séparé, que j'inclus ensuite à partir de functions.php si nécessaire:

<?php
if ( !defined('SAVEQUERIES') && isset($_GET['debug']) && $_GET['debug'] == 'sql' )
    define('SAVEQUERIES', true);
if ( !function_exists('dump') ) :
/**
 * dump()
 *
 * @param mixed $in
 * @return mixed $in
 **/

function dump($in = null) {
    echo '<pre style="margin-left: 0px; margin-right: 0px; padding: 10px; border: solid 1px black; background-color: ghostwhite; color: black; text-align: left;">';
    foreach ( func_get_args() as $var ) {
        echo "\n";
        if ( is_string($var) ) {
            echo "$var\n";
        } else {
            var_dump($var);
        }
    }
    echo '</pre>' . "\n";
    return $in;
} # dump()
endif;

/**
 * add_stop()
 *
 * @param mixed $in
 * @param string $where
 * @return mixed $in
 **/

function add_stop($in = null, $where = null) {
    global $sem_stops;
    global $wp_object_cache;
    $queries = get_num_queries();
    $milliseconds = timer_stop() * 1000;
    $out =  "$queries queries - {$milliseconds}ms";
    if ( function_exists('memory_get_usage') ) {
        $memory = number_format(memory_get_usage() / ( 1024 * 1024 ), 1);
        $out .= " - {$memory}MB";
    }
    $out .= " - $wp_object_cache->cache_hits cache hits / " . ( $wp_object_cache->cache_hits + $wp_object_cache->cache_misses );
    if ( $where ) {
        $sem_stops[$where] = $out;
    } else {
        dump($out);
    }
    return $in;
} # add_stop()


/**
 * dump_stops()
 *
 * @param mixed $in
 * @return mixed $in
 **/

function dump_stops($in = null) {
    if ( $_POST )
        return $in;
    global $sem_stops;
    global $wp_object_cache;
    $stops = '';
    foreach ( $sem_stops as $where => $stop )
        $stops .= "$where: $stop\n";
    dump("\n" . trim($stops) . "\n");
    if ( defined('SAVEQUERIES') && $_GET['debug'] == 'sql' ) {
        global $wpdb;
        foreach ( $wpdb->queries as $key => $data ) {
            $query = rtrim($data[0]);
            $duration = number_format($data[1] * 1000, 1) . 'ms';
            $loc = trim($data[2]);
            $loc = preg_replace("/(require|include)(_once)?,\s*/ix", '', $loc);
            $loc = "\n" . preg_replace("/,\s*/", ",\n", $loc) . "\n";
            dump($query, $duration, $loc);
        }
    }
    if ( $_GET['debug'] == 'cache' )
        dump($wp_object_cache->cache);
    if ( $_GET['debug'] == 'cron' ) {
        $crons = get_option('cron');
        foreach ( $crons as $time => $_crons ) {
            if ( !is_array($_crons) )
                continue;
            foreach ( $_crons as $event => $_cron ) {
                foreach ( $_cron as $details ) {
                    $date = date('Y-m-d H:m:i', $time);
                    $schedule = isset($details['schedule']) ? "({$details['schedule']})" : '';
                    if ( $details['args'] )
                        dump("$date: $event $schedule", $details['args']);
                    else
                        dump("$date: $event $schedule");
                }
            }
        }
    }
    return $in;
} # dump_stops()
add_action('init', create_function('$in', '
    return add_stop($in, "Load");
    '), 10000000);
add_action('template_redirect', create_function('$in', '
    return add_stop($in, "Query");
    '), -10000000);
add_action('wp_footer', create_function('$in', '
    return add_stop($in, "Display");
    '), 10000000);
add_action('admin_footer', create_function('$in', '
    return add_stop($in, "Display");
    '), 10000000);

/**
 * init_dump()
 *
 * @return void
 **/

function init_dump() {
    global $hook_suffix;
    if ( !is_admin() || empty($hook_suffix) ) {
        add_action('wp_footer', 'dump_stops', 10000000);
        add_action('admin_footer', 'dump_stops', 10000000);
    } else {
        add_action('wp_footer', 'dump_stops', 10000000);
        add_action("admin_footer-$hook_suffix", 'dump_stops', 10000000);
    }
} # init_dump()
add_action('wp_print_scripts', 'init_dump');


/**
 * dump_phpinfo()
 *
 * @return void
 **/

function dump_phpinfo() {
    if ( isset($_GET['debug']) && $_GET['debug'] == 'phpinfo' ) {
        phpinfo();
        die;
    }
} # dump_phpinfo()
add_action('init', 'dump_phpinfo');


/**
 * dump_http()
 *
 * @param array $args
 * @param string $url
 * @return array $args
 **/

function dump_http($args, $url) {
    dump(preg_replace("|/[0-9a-f]{32}/?$|", '', $url));
    return $args;
} # dump_http()


/**
 * dump_trace()
 *
 * @return void
 **/

function dump_trace() {
    $backtrace = debug_backtrace();
    foreach ( $backtrace as $trace )
        dump(
            'File/Line: ' . $trace['file'] . ', ' . $trace['line'],
            'Function / Class: ' . $trace['function'] . ', ' . $trace['class']
            );
} # dump_trace()
if ( $_GET['debug'] == 'http' )
    add_filter('http_request_args', 'dump_http', 0, 2);
?>
    
réponse donnée Denis 26.01.2011 - 15:14
53

Définissez un nombre maximal de révisions après afin d'éviter un gonflement de la base de données.

Testé le: Wordpress 3.0.1

La valeur par défaut est infinie, cela le configurera pour ne mémoriser que les 5 dernières modifications:

/**
 * Set the post revisions unless the constant was set in wp-config.php
 */
if (!defined('WP_POST_REVISIONS')) define('WP_POST_REVISIONS', 5);

FWIW, il y a une tonne d'excellentes idées pour CONSTANTES qui peuvent être définies sur la page Codex Édition de wp-config.php .

    
réponse donnée Jeremy Clarke 26.01.2011 - 15:33
48

Accentuer les images redimensionnées (jpg seulement)

Cette fonction accentue les images jpg redimensionnées. Un exemple de différence:

function ajx_sharpen_resized_files( $resized_file ) {

    $image = wp_load_image( $resized_file );
    if ( !is_resource( $image ) )
        return new WP_Error( 'error_loading_image', $image, $file );

    $size = @getimagesize( $resized_file );
    if ( !$size )
        return new WP_Error('invalid_image', __('Could not read image size'), $file);
    list($orig_w, $orig_h, $orig_type) = $size;

    switch ( $orig_type ) {
        case IMAGETYPE_JPEG:
            $matrix = array(
                array(-1, -1, -1),
                array(-1, 16, -1),
                array(-1, -1, -1),
            );

            $divisor = array_sum(array_map('array_sum', $matrix));
            $offset = 0; 
            imageconvolution($image, $matrix, $divisor, $offset);
            imagejpeg($image, $resized_file,apply_filters( 'jpeg_quality', 90, 'edit_image' ));
            break;
        case IMAGETYPE_PNG:
            return $resized_file;
        case IMAGETYPE_GIF:
            return $resized_file;
    }

    return $resized_file;
}   

add_filter('image_make_intermediate_size', 'ajx_sharpen_resized_files',900);
    
réponse donnée Ünsal Korkmaz 04.12.2011 - 22:33
47

Supprimer les méta-boîtes Wordpress par défaut

Testé le: Wordpress 3.0.1

Ce code vous permettra de supprimer des méta-boîtes spécifiques que wordpress ajoute par défaut aux écrans par défaut Ajouter / Modifier une publication et Ajouter / Modifier une page.

// REMOVE META BOXES FROM DEFAULT POSTS SCREEN
   function remove_default_post_screen_metaboxes() {
 remove_meta_box( 'postcustom','post','normal' ); // Custom Fields Metabox
 remove_meta_box( 'postexcerpt','post','normal' ); // Excerpt Metabox
 remove_meta_box( 'commentstatusdiv','post','normal' ); // Comments Metabox
 remove_meta_box( 'trackbacksdiv','post','normal' ); // Talkback Metabox
 remove_meta_box( 'slugdiv','post','normal' ); // Slug Metabox
 remove_meta_box( 'authordiv','post','normal' ); // Author Metabox
 }
   add_action('admin_menu','remove_default_post_screen_metaboxes');


// REMOVE META BOXES FROM DEFAULT PAGES SCREEN
   function remove_default_page_screen_metaboxes() {
 remove_meta_box( 'postcustom','page','normal' ); // Custom Fields Metabox
 remove_meta_box( 'postexcerpt','page','normal' ); // Excerpt Metabox
 remove_meta_box( 'commentstatusdiv','page','normal' ); // Comments Metabox
 remove_meta_box( 'trackbacksdiv','page','normal' ); // Talkback Metabox
 remove_meta_box( 'slugdiv','page','normal' ); // Slug Metabox
 remove_meta_box( 'authordiv','page','normal' ); // Author Metabox
 }
   add_action('admin_menu','remove_default_page_screen_metaboxes');
    
réponse donnée NetConstructor.com 19.02.2012 - 14:27
44

Supprimer le filtre "Wordpress" en "WordPress"

Testé le: Wordpress 3.0.1

Un filtre ajouté à WordPress version 3.0 convertissait automatiquement toutes les instances de "Wordpress" (sans majuscule) en "WordPress" (avec un majuscule) dans le contenu de la publication, les titres et le texte de commentaires. Certaines personnes voient cela comme une intrusion, j’ai juste besoin de détourner de temps en temps WordPress et j’ai trouvé le filtre un peu agaçant.

// Remove annoying P filter
if(function_exists('capital_P_dangit')) {
    foreach ( array( 'the_content', 'the_title' ) as $filter ) 
        remove_filter( $filter, 'capital_P_dangit', 11 ); 

    remove_filter('comment_text', 'capital_P_dangit', 31 );
}
    
réponse donnée EAMann 26.02.2011 - 00:15
42

Personnaliser le tableau de bord

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
   global $wp_meta_boxes;

Supprimer ces widgets de tableau de bord ...

   unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);
   unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
   unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);

Ajouter un widget personnalisé appelé "Aide et support"

   wp_add_dashboard_widget('custom_help_widget', 'Help and Support', 'custom_dashboard_help');
}

Ceci est le contenu de votre widget personnalisé

 function custom_dashboard_help() {
    echo '<p>Lorum ipsum delor sit amet et nunc</p>';
}
    
réponse donnée George Wiscombe 21.10.2010 - 16:52
41

Ajouter des champs de profil utilisateur personnalisés

Placez le code ci-dessous dans votre fichier functions.php pour ajouter des champs de profil utilisateur personnalisés. Modifiez ou ajoutez des lignes à votre guise.

N'oubliez pas de ne pas supprimer la ligne: return $ contactmethods; sinon cela ne fonctionnera pas.

// CUSTOM USER PROFILE FIELDS
   function my_custom_userfields( $contactmethods ) {

    // ADD CONTACT CUSTOM FIELDS
    $contactmethods['contact_phone_office']     = 'Office Phone';
    $contactmethods['contact_phone_mobile']     = 'Mobile Phone';
    $contactmethods['contact_office_fax']       = 'Office Fax';

    // ADD ADDRESS CUSTOM FIELDS
    $contactmethods['address_line_1']       = 'Address Line 1';
    $contactmethods['address_line_2']       = 'Address Line 2 (optional)';
    $contactmethods['address_city']         = 'City';
    $contactmethods['address_state']        = 'State';
    $contactmethods['address_zipcode']      = 'Zipcode';
    return $contactmethods;
   }
   add_filter('user_contactmethods','my_custom_userfields',10,1);

Pour afficher les champs personnalisés, vous pouvez utiliser l'une des deux méthodes énumérées ci-dessous.

Option 1:

the_author_meta('facebook', $current_author->ID)

Option 2:

<?php $current_author = get_userdata(get_query_var('author')); ?>
<p><a href="<?php echo esc_url($current_author->contact_phone_office);?>" title="office_phone"> Office Phone</a></p>
    
réponse donnée NetConstructor.com 26.01.2011 - 15:15
38

Personnaliser l'ordre du menu administrateur

testé sur: Wordpress 3.0.1

Ce code vous permettra de réorganiser l’ordre des éléments dans le menu admin. Tout ce que vous avez à faire est de cliquer sur un lien existant dans le menu administrateur et de tout copier avant l’URL / wp-admin /. L'ordre ci-dessous représente l'ordre qu'aura le nouveau menu administrateur.

// CUSTOMIZE ADMIN MENU ORDER
   function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array(
        'index.php', // this represents the dashboard link
        'edit.php?post_type=events', // this is a custom post type menu
        'edit.php?post_type=news', 
        'edit.php?post_type=articles', 
        'edit.php?post_type=faqs', 
        'edit.php?post_type=mentors',
        'edit.php?post_type=testimonials',
        'edit.php?post_type=services',
        'edit.php?post_type=page', // this is the default page menu
        'edit.php', // this is the default POST admin menu 
    );
   }
   add_filter('custom_menu_order', 'custom_menu_order');
   add_filter('menu_order', 'custom_menu_order');
    
réponse donnée NetConstructor.com 10.10.2010 - 12:29
37

Ajouter des vignettes dans la liste de gestion / publication

Vous pouvez l'ajouter à vos fonctions pour l'afficher dans la liste Gérer / Modifier les publications et les pages, ainsi qu'une nouvelle colonne avec l'aperçu miniature.

/****** Add Thumbnails in Manage Posts/Pages List ******/
if ( !function_exists('AddThumbColumn') && function_exists('add_theme_support') ) {

    // for post and page
    add_theme_support('post-thumbnails', array( 'post', 'page' ) );

    function AddThumbColumn($cols) {

        $cols['thumbnail'] = __('Thumbnail');

        return $cols;
    }

    function AddThumbValue($column_name, $post_id) {

            $width = (int) 35;
            $height = (int) 35;

            if ( 'thumbnail' == $column_name ) {
                // thumbnail of WP 2.9
                $thumbnail_id = get_post_meta( $post_id, '_thumbnail_id', true );
                // image from gallery
                $attachments = get_children( array('post_parent' => $post_id, 'post_type' => 'attachment', 'post_mime_type' => 'image') );
                if ($thumbnail_id)
                    $thumb = wp_get_attachment_image( $thumbnail_id, array($width, $height), true );
                elseif ($attachments) {
                    foreach ( $attachments as $attachment_id => $attachment ) {
                        $thumb = wp_get_attachment_image( $attachment_id, array($width, $height), true );
                    }
                }
                    if ( isset($thumb) && $thumb ) {
                        echo $thumb;
                    } else {
                        echo __('None');
                    }
            }
    }

    // for posts
    add_filter( 'manage_posts_columns', 'AddThumbColumn' );
    add_action( 'manage_posts_custom_column', 'AddThumbValue', 10, 2 );

    // for pages
    add_filter( 'manage_pages_columns', 'AddThumbColumn' );
    add_action( 'manage_pages_custom_column', 'AddThumbValue', 10, 2 );
}
    
réponse donnée Philip 26.01.2011 - 15:03
37

Fonction pour changer la longueur de l'extrait

Testé le: Wordpress 3.0.1

Par défaut, tous les extraits sont limités à 55 mots. En utilisant le code ci-dessous, vous pouvez remplacer ces paramètres par défaut:

function new_excerpt_length($length) { 
    return 100;
}

add_filter('excerpt_length', 'new_excerpt_length');

Cet exemple modifie la longueur de l'extrait en 100 mots, mais vous pouvez utiliser la même méthode pour la remplacer par une valeur.

    
réponse donnée Name-AK 26.01.2011 - 15:37
37

Supprimer les pings de votre propre blog

Testé le: Wordpress 3.0.1

//remove pings to self
function no_self_ping( &$links ) {
    $home = get_option( 'home' );
    foreach ( $links as $l => $link )
        if ( 0 === strpos( $link, $home ) )
            unset($links[$l]);
}
add_action( 'pre_ping', 'no_self_ping' );
    
réponse donnée Dan Gayle 26.01.2011 - 15:38
33

Activer la compression de sortie GZIP

Normalement, le serveur doit être configuré pour le faire automatiquement, mais de nombreux hôtes partagés ne t faire ceci (probablement pour augmenter l’utilisation de la bande passante du client)

 if(extension_loaded("zlib") && (ini_get("output_handler") != "ob_gzhandler"))
   add_action('wp', create_function('', '@ob_end_clean();@ini_set("zlib.output_compression", 1);'));
    
réponse donnée onetrickpony 23.12.2010 - 13:13
31

Afficher les requêtes dans la base de données, le temps passé et la consommation de mémoire

Testé le: Wordpress 3.0.1

function performance( $visible = false ) {

    $stat = sprintf(  '%d queries in %.3f seconds, using %.2fMB memory',
        get_num_queries(),
        timer_stop( 0, 3 ),
        memory_get_peak_usage() / 1024 / 1024
        );

    echo $visible ? $stat : "<!-- {$stat} -->" ;
}

Ensuite, ce code, situé sous le code ci-dessus, sera automatiquement inséré dans le pied de page de votre site Web public (assurez-vous que votre thème appelle wp_footer):

add_action( 'wp_footer', 'performance', 20 );

Peut être appelé plusieurs fois.

    
réponse donnée Rarst 26.01.2011 - 15:38
31

Annuler l'inscription des widgets par défaut de WP

Testé le: WordPress 3.0.1

// unregister all default WP Widgets
function unregister_default_wp_widgets() {
    unregister_widget('WP_Widget_Pages');
    unregister_widget('WP_Widget_Calendar');
    unregister_widget('WP_Widget_Archives');
    unregister_widget('WP_Widget_Links');
    unregister_widget('WP_Widget_Meta');
    unregister_widget('WP_Widget_Search');
    unregister_widget('WP_Widget_Text');
    unregister_widget('WP_Widget_Categories');
    unregister_widget('WP_Widget_Recent_Posts');
    unregister_widget('WP_Widget_Recent_Comments');
    unregister_widget('WP_Widget_RSS');
    unregister_widget('WP_Widget_Tag_Cloud');
}
add_action('widgets_init', 'unregister_default_wp_widgets', 1);
    
réponse donnée bueltge 19.04.2016 - 08:41
30

Extraire automatiquement la première image du contenu du post

Testé le: Wordpress 3.0.1

Ce code extraira automatiquement la première image associée à un message et vous permettra de l'afficher / de l'utiliser en appelant la fonction getImage.

// AUTOMATICALLY EXTRACT THE FIRST IMAGE FROM THE POST 
function getImage($num) {
    global $more;
    $more = 1;
    $link = get_permalink();
    $content = get_the_content();
    $count = substr_count($content, '<img');
    $start = 0;
    for($i=1;$i<=$count;$i++) {
        $imgBeg = strpos($content, '<img', $start);
        $post = substr($content, $imgBeg);
        $imgEnd = strpos($post, '>');
        $postOutput = substr($post, 0, $imgEnd+1);
        $postOutput = preg_replace('/width="([0-9]*)" height="([0-9]*)"/', '',$postOutput);;
        $image[$i] = $postOutput;
        $start=$imgEnd+1;
    }
    if(stristr($image[$num],'<img')) { echo '<a href="'.$link.'">'.$image[$num]."</a>"; }
    $more = 0;
}
    
réponse donnée NetConstructor.com 26.01.2011 - 15:34
27

Indiquez dans l'en-tête le fichier de modèle de thème utilisé par un article / une page

add_action('wp_head', 'show_template');
function show_template() {
    global $template;
    print_r($template);
}

Raccourcissez la sortie DIV par défaut si votre thème utilise post_class.

si votre thème utilise quelque chose comme

<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

Vous pouvez avoir de longs divs fous dans votre source qui pourraient ressembler à ceci ou même plus longtemps:

<div id="post-4" class="post-4 post type-post hentry category-uncategorized category-test category-test-1-billion category-test2 category-test3 category-testing"> 

Cela peut vraiment commencer à encombrer votre source et sembler plutôt inutile dans la plupart des cas, une profondeur de 3 à 4 est suffisant.

Pour l'exemple ci-dessus, nous pouvons découper la sortie comme suit:

// slice crazy long div outputs
    function category_id_class($classes) {
        global $post;
        foreach((get_the_category($post->ID)) as $category)
            $classes[] = $category->category_nicename;
            return array_slice($classes, 0,5);
    }
    add_filter('post_class', 'category_id_class');

cela coupe la sortie pour n'inclure que les 5 premières valeurs, ainsi l'exemple ci-dessus devient:

<div id="post-4" class="post-4 post type-post hentry category-uncategorized"> 

Permet aux archives de la catégorie d’afficher toutes les publications, quel que soit leur type: convient aux types de publication personnalisés

function any_ptype_on_cat($request) {
 if ( isset($request['category_name']) )
  $request['post_type'] = 'any';

 return $request;
}
add_filter('request', 'any_ptype_on_cat');

Supprimer les éléments indésirables du tableau de bord

Ceci était déjà publié mais il ne contenait pas la liste complète des éléments. Surtout ces ennuyeux "liens entrants!"

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
global $wp_meta_boxes;
 //Right Now - Comments, Posts, Pages at a glance
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
//Recent Comments
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']);
//Incoming Links
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);
//Plugins - Popular, New and Recently updated Wordpress Plugins
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);

//Wordpress Development Blog Feed
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
//Other Wordpress News Feed
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);
//Quick Press Form
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']);
//Recent Drafts List
unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_recent_drafts']);
}

Supprimer les sauts de page "En savoir plus" **

à la place, revenez en haut de la page. Tu sais comment quand tu cliquez sur "lire la suite", il sautera à la place de la page, ce qui peut être gênant; il suffit donc de charger la page normalement, sans sauter!

function remove_more_jump_link($link) { 
$offset = strpos($link, '#more-');
if ($offset) {
$end = strpos($link, '"',$offset);
}
if ($end) {
$link = substr_replace($link, '', $offset, $end-$offset);
}
return $link;
}
add_filter('the_content_more_link', 'remove_more_jump_link');

Limitez les éléments de menu ADMIN en fonction du nom d'utilisateur , remplacez le nom d'utilisateur par un nom d'utilisateur réel.

function remove_menus()
{
    global $menu;
    global $current_user;
    get_currentuserinfo();

    if($current_user->user_login == 'username')
    {
        $restricted = array(__('Posts'),
                            __('Media'),
                            __('Links'),
                            __('Pages'),
                            __('Comments'),
                            __('Appearance'),
                            __('Plugins'),
                            __('Users'),
                            __('Tools'),
                            __('Settings')
        );
        end ($menu);
        while (prev($menu)){
            $value = explode(' ',$menu[key($menu)][0]);
            if(in_array($value[0] != NULL?$value[0]:"" , $restricted)){unset($menu[key($menu)]);}
        }// end while

    }// end if
}
add_action('admin_menu', 'remove_menus');

// vous pouvez également utiliser if ($ current_user- > user_login! = 'admin') à la place, probablement plus utile

Donnez un style au nuage de tags

//tag cloud custom
add_filter('widget_tag_cloud_args','style_tags');
function style_tags($args) {
$args = array(
     'largest'    => '10',
     'smallest'   => '10',
     'format'     => 'list',
     );
return $args;
}

Référence complète des options ici (il y en a beaucoup!) enlace

Modifier le minuteur de mise à jour du widget RSS par défaut

(par défaut, 6 ou 12 heures, j'oublie (1800 = 30 min).

add_filter( 'wp_feed_cache_transient_lifetime', create_function('$fixrss', 'return 1800;') );
    
réponse donnée Wyck 05.09.2011 - 19:48
25

Supprimer la notification de mise à jour du plug-in UNIQUEMENT pour les plug-in INACTIF

function update_active_plugins($value = '') {
    /*
    The $value array passed in contains the list of plugins with time
    marks when the last time the groups was checked for version match
    The $value->reponse node contains an array of the items that are
    out of date. This response node is use by the 'Plugins' menu
    for example to indicate there are updates. Also on the actual
    plugins listing to provide the yellow box below a given plugin
    to indicate action is needed by the user.
    */
    if ((isset($value->response)) && (count($value->response))) {

        // Get the list cut current active plugins
        $active_plugins = get_option('active_plugins');    
        if ($active_plugins) {

            //  Here we start to compare the $value->response
            //  items checking each against the active plugins list.
            foreach($value->response as $plugin_idx => $plugin_item) {

                // If the response item is not an active plugin then remove it.
                // This will prevent WordPress from indicating the plugin needs update actions.
                if (!in_array($plugin_idx, $active_plugins))
                    unset($value->response[$plugin_idx]);
            }
        }
        else {
             // If no active plugins then ignore the inactive out of date ones.
            foreach($value->response as $plugin_idx => $plugin_item) {
                unset($value->response);
            }          
        }
    }  
    return $value;
}
add_filter('transient_update_plugins', 'update_active_plugins');    // Hook for 2.8.+
//add_filter( 'option_update_plugins', 'update_active_plugins');    // Hook for 2.7.x
    
réponse donnée NetConstructor.com 26.01.2011 - 15:08
25

Supprimer les informations superflues et le HTML dans la balise <head>

// remove unnecessary header info
add_action( 'init', 'remove_header_info' );
function remove_header_info() {
    remove_action( 'wp_head', 'rsd_link' );
    remove_action( 'wp_head', 'wlwmanifest_link' );
    remove_action( 'wp_head', 'wp_generator' );
    remove_action( 'wp_head', 'start_post_rel_link' );
    remove_action( 'wp_head', 'index_rel_link' );
    remove_action( 'wp_head', 'adjacent_posts_rel_link' );         // for WordPress < 3.0
    remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head' ); // for WordPress >= 3.0
}

// remove extra CSS that 'Recent Comments' widget injects
add_action( 'widgets_init', 'remove_recent_comments_style' );
function remove_recent_comments_style() {
    global $wp_widget_factory;
    remove_action( 'wp_head', array(
        $wp_widget_factory->widgets['WP_Widget_Recent_Comments'],
        'recent_comments_style'
    ) );
}
    
réponse donnée 4 revs, 4 users 63%Andrew Ryno 12.02.2015 - 18:54
22

Activer le débogage d'erreur et la journalisation à utiliser sur les sites en direct

C’est une partie du code que j’ai écrit pour utiliser les constantes WP_DEBUG qui sont normalement désactivées par défaut. Eh bien, j’ai créé un moyen d’activer WP_DEBUG pour que vous puissiez l’utiliser sur un site actif, sans effets secondaires négatifs, mais j’ai également utilisé les autres constantes de débogage pour forcer l’affichage des erreurs et pour créer un fichier journal de les erreurs et les avis dans le répertoire / wp-content.

Déposez ce code dans votre fichier wp-config.php (APRÈS UNE SAUVEGARDE DE SAUVEGARDE EN CAS DE SAUVEGARDE), puis vous pourrez passer les paramètres? debug = 1, 2 ou 3 à la fin de l’URL de votre site.

? debug = 1 = affiche toutes les erreurs / notifications ? debug = 2 = les force à s'afficher ? debug = 3 = crée un fichier debug.log de toutes les erreurs dans le répertoire / wp-content.

/**
* Written by Jared Williams - http://new2wp.com
* @wp-config.php replace WP_DEBUG constant with this code
* Enable WP debugging for usage on a live site
* http://core.trac.wordpress.org/browser/trunk/wp-includes/load.php#L230
* Pass the '?debug=#' parameter at the end of any url on site
*
* http://example.com/?debug=1, /?debug=2, /?debug=3
*/
if ( isset($_GET['debug']) && $_GET['debug'] == '1' ) {
    // enable the reporting of notices during development - E_ALL
    define('WP_DEBUG', true);
} elseif ( isset($_GET['debug']) && $_GET['debug'] == '2' ) {
    // must be true for WP_DEBUG_DISPLAY to work
    define('WP_DEBUG', true);
    // force the display of errors
    define('WP_DEBUG_DISPLAY', true);
} elseif ( isset($_GET['debug']) && $_GET['debug'] == '3' ) {
    // must be true for WP_DEBUG_LOG to work
    define('WP_DEBUG', true);
    // log errors to debug.log in the wp-content directory
    define('WP_DEBUG_LOG', true);
}

Je vais plus en détail dans l'article que j'ai écrit pour Comluv si cela vous intéresse, ici: enlace

Je travaille toujours sur un moyen de le protéger soit par un mot de passe, soit de le faire fonctionner de préférence si (current_user_can ('manage_themes') et is_logged_in ().

Mais c'est là que ça devient beaucoup plus compliqué.

    
réponse donnée jaredwilli 13.11.2010 - 11:26
20

Nouveaux rôles et fonctionnalités: ne s'exécutez qu'une fois!

Je les garde à portée de main, c’est la bonne façon de les faire sans plugin. Ils définissent un seul champ (prefix_user_roles) dans la base de données des options, et vous n'avez pas besoin d'un plugin pour les définir. Reportez-vous à la page Codex pour obtenir une liste des fonctionnalités disponibles et une description de leurs activités. Il suffit de supprimer l'un de ces blocs, de charger une page, puis de les commenter à nouveau! Ici, je crée un rôle doté des fonctionnalités dont j'ai besoin:

/* Capabilities */

// To add the new role, using 'international' as the short name and
// 'International Blogger' as the displayed name in the User list and edit page:
/*
add_role('international', 'International Blogger', array(
    'read' => true, // True allows that capability, False specifically removes it.
    'edit_posts' => true,
    'delete_posts' => true,
    'edit_published_posts' => true,
    'publish_posts' => true,
    'edit_files' => true,
    'import' => true,
    'upload_files' => true //last in array needs no comma!
));
*/


// To remove one outright or remove one of the defaults:
/* 
remove_role('international');
*/

Il est parfois pratique d’ajouter / supprimer un rôle existant plutôt que de le supprimer et de le ré-ajouter. Encore une fois, il vous suffit de supprimer le commentaire, de recharger une page, puis de la commenter à nouveau. Ceci stockera le rôle / la fonctionnalité correctement dans le tableau des options. (Cela vous permet, au développeur, de les contrôler et supprime la surcharge des plugins volumineux qui font la même chose.) Ici, je modifie le rôle d’auteur pour supprimer ses publications (par défaut), tout en lui permettant d’éditer leurs publications (qui n'est pas possible pour ce rôle par défaut) - en utilisant * add_cap * ou * remove_cap *.

/*
$edit_role = get_role('author');
   $edit_role->add_cap('edit_published_posts');
   $edit_role->remove_cap('delete_published_posts');
*/

Je garde une feuille de calcul avec la grille de la page Codex pour les sites qui modifient cette méthode afin de pouvoir me rappeler comment les choses sont définies, tout en laissant le code mis en commentaire dans votre fichier functions.php. Ne laissez pas ces exemples sans commentaires, sinon vous écrivez dans la base de données à chaque chargement de page!

    
réponse donnée tomcat23 12.03.2011 - 00:44
19

Ajouter automatiquement des titres dynamiques aux pages publiques

Testé le: Wordpress 3.0.1

L’utilisation du code ci-dessous créera automatiquement des titres de page dynamiques basés sur les pages / publications affichées en public.

/* Dynamic Titles **/
// This sets your <title> depending on what page you're on, for better formatting and for SEO
// You need to set the variable $longd to some custom text at the beginning of the function
function dynamictitles() {
$longd = __('Enter your longdescription here.', 'texdomainstring');
    if ( is_single() ) {
      wp_title('');
      echo ' | '.get_bloginfo('name');

} else if ( is_page() || is_paged() ) {
      bloginfo('name');
      wp_title('|');

} else if ( is_author() ) {
      bloginfo('name');
      wp_title(' | '.__('Author', 'texdomainstring'));

} else if ( is_category() ) {
      bloginfo('name');
      wp_title(' | '.__('Archive for', 'texdomainstring'));

} else if ( is_tag() ) {
      echo get_bloginfo('name').' | '.__('Tag archive for', 'texdomainstring');
      wp_title('');

} else if ( is_archive() ) {
      echo get_bloginfo('name').' | '.__('Archive for', 'texdomainstring');
      wp_title('');

} else if ( is_search() ) {
      echo get_bloginfo('name').' | '.__('Search Results', 'texdomainstring');
} else if ( is_404() ) {
      echo get_bloginfo('name').' | '.__('404 Error (Page Not Found)', 'texdomainstring');

} else if ( is_home() ) {
      echo get_bloginfo('name').' | '.get_bloginfo('description');

} else {
      echo get_bloginfo('name').' | '.($blog_longd);
}
}
    
réponse donnée Chris_O 01.03.2011 - 17:52
18

Pied de page Admin Wordpress personnalisé

// customize admin footer text
function custom_admin_footer() {
        echo 'add your custom footer text and html here';
} 
add_filter('admin_footer_text', 'custom_admin_footer');

Je l'utilise pour les sites clients comme simple point de référence pour me contacter en tant que développeur.

    
réponse donnée chuck reynolds 28.12.2010 - 01:45
18

Activer les codes de fonction dans les widgets

// shortcode in widgets
if ( !is_admin() ){
    add_filter('widget_text', 'do_shortcode', 11);
}
    
réponse donnée CommentLuv 26.01.2011 - 15:09
17

Fonction permettant de désactiver les flux RSS

Testé le: Wordpress 3.0.1

Vous pouvez désactiver les flux RSS si vous souhaitez conserver votre site Web basé sur Wordpress en tant que statique.

Vous pouvez utiliser cette fonction:

function fb_disable_feed() {
wp_die( __('No feed available,please visit our <a href="'. get_bloginfo('url') .'">homepage</a>!') );
}

add_action('do_feed', 'fb_disable_feed', 1);
add_action('do_feed_rdf', 'fb_disable_feed', 1);
add_action('do_feed_rss', 'fb_disable_feed', 1);
add_action('do_feed_rss2', 'fb_disable_feed', 1);
add_action('do_feed_atom', 'fb_disable_feed', 1);
    
réponse donnée Name-AK 26.01.2011 - 15:33
14

Modifiez le message "Howdy" en "Bienvenue"

Cette fonction vous permet de personnaliser le message "Howdy" en haut à droite de votre zone d'administration.
Cette fonction utilise JQuery pour changer le message "Howdy" en "Welcome".

/****** Customize admin message "Howdy" to "Welcome" ******/
$nohowdy = "Welcome";

if (is_admin()) {
    add_action('init', 'artdev_nohowdy_h');
    add_action('admin_footer', 'artdev_nohowdy_f');
}
// Load jQuery
function artdev_nohowdy_h() {
    wp_enqueue_script('jquery');
}
// Modify
function artdev_nohowdy_f() {
global $nohowdy;
echo <<<JS
<script type="text/javascript">
//<![CDATA[
var nohowdy = "$nohowdy";
jQuery('#user_info p')
    .html(
    jQuery('#user_info p')
        .html()
        .replace(/Howdy/,nohowdy)
    );
//]]>
JS;
}

Version PHP, en utilisant gettext filter:

add_filter('gettext', 'change_howdy', 10, 3);

function change_howdy($translated, $text, $domain) {

    if (!is_admin() || 'default' != $domain)
        return $translated;

    if (false !== strpos($translated, 'Howdy'))
        return str_replace('Howdy', 'Welcome', $translated);

    return $translated;
}
    
réponse donnée Philip 26.02.2011 - 00:47

Lire d'autres questions sur les étiquettes