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

332

Veuillez voter sur la question et sur les réponses que vous jugez utiles en cliquant sur la flèche 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 de plugins par l'ajout de code à mon functions.phpfichier. 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 l’intérêt ni le besoin.

Le plus souvent, 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 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, lecteur / administrateur / développeur, à partager avec moi et avec d'autres personnes tous les éléments de code que vous jugez utiles et que vous avez ajoutés au function.phpfichier de votre thème pour étendre ou améliorer WordPress sans utiliser de fichier. brancher.

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 si elle est compatible, incluez la description que vous jugez la plus appropriée pour décrire sa fonction et (le cas échéant) un lien vers l'original. plugin ou source où vous avez trouvé l'information.

J'attends vos réponses avec impatience et j'ajouterai bien sûr de nouvelles découvertes chaque fois que je les trouverai.

NetConstructor.com
la source
13
Étant donné que les cinq premières réponses ont été fournies par le PO et que la question semble plus adaptée à la collecte d'un ensemble de réponses plutôt qu'à une seule réponse définitive, il devrait s'agir d'un wiki de la communauté.
EAMann
17
Toutes les réponses non liées à un thème doivent être supprimées. Ce fil est un bon exemple de mauvaises pratiques de codage.
fuxia
17
Je pense qu'il serait préférable d'encourager les gens à créer un plugin de fonctionnalité personnalisée au lieu d'utiliser les fonctions de leur thème.php
Ian Dunn
3
@ NetConstructor.com Le nombre de pages vues ne constitue pas un indicateur de qualité. Nous devrions encourager des questions spécifiques avec des réponses spécifiques et de bonnes pratiques de codage. Ce fil est le contraire.
fuxia
6
@ NetConstructor.com Discutez-en sur Meta où les gens pourront mieux voir vos arguments. :)
fuxia

Réponses:

107

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

Testé sur: 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');
NetConstructor.com
la source
Fantastique pour le développement! J'utilise fréquemment le tableau des options pour stocker les versions de base de données de mes plug-ins ... utiliser phpMyAdmin pour restaurer une ancienne version de la base de données afin de tester un script de mise à niveau est une douleur ... cela rendra les choses beaucoup plus faciles !!!
EAMann
3
Vous pouvez également accéder à la même page d’options (une fois connecté) en accédant à votre site / wp-admin /
options.php
89

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

Testé sur: 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 texte du 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>';
}

ÉDITER: 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;
}
NetConstructor.com
la source
79

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 des types de publication personnalisés dans le widget de tableau de bord d'administration "Right Now"

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' );
Jaredwilli
la source
En ce qui concerne le dernier extrait de cette réponse. C'est un excellent ajout car je les ajoutais manuellement pour chaque type de message. Le seul problème que j'ai avec ceci est qu'il ajoute les données après l'entrée par défaut "category" et "tag". Pourriez-vous mettre à jour votre réponse pour déplacer les "catégories" ou "balises" par défaut vers le bas ou les supprimer pour pouvoir les ajouter manuellement?
NetConstructor.com
@ NetConstructor.com Je ne pense pas avoir compris votre demande. Si je le fais, alors je pense que ce serait un peu plus difficile à faire et je n’ai pas vraiment le temps de décider comment le faire.
jaredwilli
Inclure les types de postes personnalisés dans les résultats de recherche - je suppose, vous pouvez le faire avec exclude_from_searchPARAM register_post_type...
Krzysiek Dróżdż
78

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

Testé sur: 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 administrateurs (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;" ) );
       }
NetConstructor.com
la source
8
C'est loin d'être idéal. Cela ne fonctionnera que si le login de l'administrateur est toujours "admin" par défaut, ce qui n'est pas le cas pour des raisons de sécurité. Au lieu de cela, vous devez rechercher une fonctionnalité spécifique que vous souhaitez que les utilisateurs voient les messages.
jerclarke
1
C'est-à-dire si (! Current_user_can ('manage_options')) {... add_filter ...} - Désolé pour le double commentaire, j'ai oublié que, en appuyant sur enter, envoie des commentaires)
jerclarke le
C'est pourquoi j'ai ajouté le commentaire au code où vous pouvez changer le nom d'utilisateur admin. Comment l'amélioreriez-vous / récririez-vous?
NetConstructor.com
Le meilleur moyen consiste à supprimer les $ global_login et get_currentuserinfo () globaux et à utiliser plutôt current_user_can dans votre clause if. C'est seulement 1 ligne au lieu de 3 et c'est la manière standard. Vous pouvez vérifier la capacité spécifique qui serait nécessaire pour agir sur les messages. Dans ce cas, il existe 'update_core' et 'update_plugins'.
jerclarke
2
so: if (! current_user_can ('update_plugins')) {/ * SUPPRIMER
LES
72

Chargement de jQuery à partir du CDN Google

Testé sur: 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 WordPress pour la sécurité

Testé sur: Wordpress 3.0.1

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

Ajouter des spams et supprimer des liens aux commentaires sur Front End

Testé sur: Wordpress 3.0.1

Cela facilite grandement 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 fil RSS

Testé sur: 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. Vous pouvez également utiliser le contenu exclusif de votre site pendant un jour ou une semaine avant de le diffuser vers vos lecteurs RSS.

// 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');
Derek Perkins
la source
source sur mon post: wpengineer.com/320/publish-the-feed-later avec plus d'informations
bueltge
1
Vous pouvez également simplement supprimer le filtre du générateur:remove_action('wp_head', 'wp_generator');
Gipetto le
25
ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js expire au bout d'une heure. Utilisez toujours les informations de version complètes, telles que ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js , qui expire après un an.
fuxia
5
Le code "Supprimer les informations de version de WordPress pour la sécurité" ne contribue pas réellement à accroître la sécurité de votre site. Cela n'arrête même pas l'exposition de la version WP utilisée sur votre site.
Joseph Scott
1
Ce n'est pas vrai Joseph. Si votre version de WordPress est exposée, les utilisateurs peuvent voir si vous utilisez une version antérieure, exposant ainsi vos vulnérabilités. C'est toujours une bonne décision de supprimer cela de toutes les installations WordPress. Personnellement, je ne sais même pas pourquoi ils l’ont mentionnée en premier lieu car c’EST un problème de sécurité.
Jeremy
58

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

Testé sur: 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 existe une tonne d'excellentes idées pour CONSTANTES qui peuvent être définies sur la page Codex Modification wp-config.php .

Jeremy Clarke
la source
Cela peut-il être défini par type de message?
NetConstructor.com
En examinant son utilisation dans wp_save_post_revision (), il ne semble pas y avoir de moyen de faire la distinction entre les types de publication. Il n'y a pas de filtre ou quoi que ce soit sur la valeur, même si cela devrait probablement l'être.
jerclarke
merci Jeremy - À quelqu'un d'autre, si vous savez comment faire cela, merci de le poster ici.
NetConstructor.com
1
Personnellement, je préfère 10. Je sais que c'est double, mais toujours quand j'ai besoin d'une révision, c'est toujours plus vieux que 5
janw
56

Outils de profilage Wordpress

J'aime ajouter des outils de profilage dans un fichier séparé, que j'inclus ensuite à partir de functions.php lorsque cela est 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);
?>
Denis
la source
existe-t-il un moyen rapide de modifier cela pour que le script ne soit appelé que lorsque votre administrateur ET ajoute quelque chose à l'URL pour afficher les informations de débogage?
NetConstructor.com
1
C’est ce qui se passe dans mon thème: semiologic.com/software/sem-reloaded - le /inc/debug.php est inclus dans /functions.php ou /inc/init.php (je ne peux pas me souvenir du début de ma tête).
Denis de Bernardy
52

Accentuer les images redimensionnées (jpg seulement)

Cette fonction accentue les images jpg redimensionnées. Un exemple de différence:http://dl.dropbox.com/u/1652601/forrst/gdsharpen.png

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);
Ünsal Korkmaz
la source
bien mieux jpegs, merci beaucoup! testé sur 3.4-alpha
brasofilo
2
si vous le voulez comme plugin: wordpress.org/extend/plugins/sharpen-resized-images
Ünsal Korkmaz le
Où va cette fonction?
StevieD
@StevieD - comme le titre le suggère, il se place dans functions.php, dans votre modèle. Je ferais attention cependant, cette fonction a presque 8 ans.
timofey.com
51

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

Testé sur: 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');
NetConstructor.com
la source
4
Selon ce wordpress.stackexchange.com/questions/34030/… je ne voudrais pas cacher le slugdiv de cette façon, mais utilisez ce gist.github.com/1863830 à la place
@CorvanNoorloos Votre lien github est cassé.
user7003859
48

Supprimer "Wordpress" à "WordPress" filtre

Testé sur: 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, les titres et le texte des commentaires. Certaines personnes y voient une intrusion, j’ai juste besoin de détourner de temps en temps WordPress et j’ai trouvé le filtre quelque 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 );
}
EAMann
la source
super petite trouvaille. Une de ces choses qui supprime tout simplement un autre morceau de code inutile
NetConstructor.com
5
Dans WordPress 3.0.1, ce filtre est ajouté avec la priorité 11 , vous devez donc l'ajouter en 11tant que troisième paramètre pour le supprimer.
Jan Fabry
46

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>';
}
George Wiscombe
la source
44

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 comme bon vous semble.

Rappelez-vous 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 des champs personnalisés, vous pouvez utiliser l'une des deux méthodes répertorié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>
NetConstructor.com
la source
41

Personnaliser l'ordre du menu admin

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');
NetConstructor.com
la source
Existe-t-il vraiment un filtre de base nommé custom_menu_order? Je ne pouvais pas trouver un ...
kaiser
4
@kaiser documenté ici codex.wordpress.org/Plugin_API/Filter_Reference/…
Manny Fleurmond
40

Fonction pour changer la longueur de l'extrait

Testé sur: 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 à 100 mots, mais vous pouvez utiliser la même méthode pour la remplacer par n'importe quelle valeur.

Name-AK
la source
@ user402 ... cette casquette est-elle par mots ou par caractères? Pourriez-vous poster comment faire les deux?
NetConstructor.com
3
@ NetConstructor.com Cette fonction (et le excerpt_lengthcrochet) est condensée par des mots .
EAMann
Il h. J'ai ce filtre ajouté au noyau. :)
Dougal Campbell
38

Ajouter des vignettes dans Gérer les articles / la liste des pages

Vous pouvez ajouter cela à vos fonctions pour afficher dans la liste Gérer / Modifier la publication et les pages 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 );
}
Philip
la source
Comment déplacer la colonne à l'extrême gauche?
Rich
38

Supprimer des pings sur votre propre blog

Testé sur: 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' );
Dan Gayle
la source
combien de fois et quand wordpress ping lui-même?
NetConstructor.com
J'ai en fait ce problème assez souvent. Si je référence un lien interne à un autre message de mon blog WP, je reçois un rétrolien ou un pingback (je ne me rappelle plus lequel) de moi-même. C'est ennuyant.
Sahas Katta
Pareil ici. J'ai un blog de nouvelles / magazine et un lien vers d'autres articles assez souvent.
Steven
35

Activer la compression de sortie GZIP

Normalement, le serveur doit être configuré pour le faire automatiquement, mais de nombreux hôtes partagés ne le font pas (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);'));
onetrickpony
la source
32

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

Testé sur: 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} -->" ;
}

Puis ce code ci-dessous le code ci-dessus qui insérera automatiquement le code ci-dessus 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.

Rarst
la source
pour php <5.2 utilisationmemory_get_usage()
onetrickpony
31

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

Testé sur: 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éduction
la source
Je l'ai utilisé sur la version 3.1.4. Mais les widgets sont toujours là. Quelqu'un a-t-il une idée?
user391
Travaille toujours sur WP 4.5 :)
Tim Malone
30

Extraire automatiquement la première image du contenu du post

Testé sur: Wordpress 3.0.1

Ce code extraira automatiquement la première image associée à une publication 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;
}
NetConstructor.com
la source
6
Bien, mais get_the_image fait du très bon travail avec ça aussi. wordpress.org/extend/plugins/get-the-image
artlung
correct mais celui-ci fonctionne différemment et corrige divers problèmes que get_the_image ne prend pas en compte
NetConstructor.com
3
Que fait-il différemment du script get_the_image?
Mat
1
@matt - Dans wordpress, des images peuvent être ajoutées à des messages de différentes manières et je pense que le script get_the_image se contente de regarder l'un de ceux-ci. Cela vérifie s'il y a une image en vedette et l'utilise en premier si elle est disponible, ensuite je pense qu'elle vérifie la première image ajoutée au contenu du message et si elle n'est pas trouvée, elle vérifie la galerie multimédia pour l'image avec le tri le plus élevé. ordre (du moins c'est comme ça que je me souviens de l'ordre).
NetConstructor.com
Je suggère wordpress.org/extend/plugins/auto-post-thumbnail Générer automatiquement la miniature du message (sélectionnée) à partir de la première image du message ou de tout type de message personnalisé uniquement si la miniature du message n'est pas définie
Ünsal Korkmaz
27

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

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 peuvent 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 suffisante.

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"> 

Faire en sorte que les archives de catégorie affichent tous les articles, quel que soit leur type: convient aux types d'articles 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

Cela a déjà été publié, mais il ne contient 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']);
}

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

retourne plutôt en haut de la page. Vous savez comment, lorsque vous cliquez sur "Lire la suite", vous accédez directement à la page, ce qui peut être gênant. Cela permet simplement 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 du 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');

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

Style le nuage de mots

//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!) Http://codex.wordpress.org/Function_Reference/wp_tag_cloud

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

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

add_filter( 'wp_feed_cache_transient_lifetime', create_function('$fixrss', 'return 1800;') );
Wyck
la source
Pourriez-vous, s'il vous plaît, scinder chacune de ces réponses en réponses séparées dans les prochaines semaines. J'allais le faire pour vous, mais je ne voulais pas donner l'impression que je prenais crédit pour vos réponses. En tout cas, j'essaie de garder cela organisé afin que les utilisateurs puissent facilement trouver les informations qu'ils recherchent. Merci d'avance
NetConstructor.com
J'utilisais simplement le code "Restreindre les éléments du menu ADMIN en fonction du nom d'utilisateur, remplacer le nom d'utilisateur par un nom d'utilisateur réel", ce qui est très bien, mais pourriez-vous mettre à jour le code afin d'indiquer également comment cela peut être fait pour un "rôle d'utilisateur" spécifique. Je pense que cela serait très utile!
NetConstructor.com
Désolé, NetConstructor, je viens de voir votre commentaire maintenant. Pour le rôle d'utilisateur, j'utiliserais "current_user_can". Je n'ai pas le temps de le tester mais quand je le ferai, je l'ajouterai.
Wyck
La valeur par défaut pour wp_feed_cache_transient_lifetime est 43200 (12 heures)
brasofilo
26

Supprimer l'avis de mise à jour du plug-in UNIQUEMENT pour les plugins 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
NetConstructor.com
la source
1
Ce n’est pas forcément une bonne idée: un plugin inactif est toujours présent dans le système de fichiers et un fichier non sécurisé peut toujours être utilisé pour pirater le site. Les plugins doivent toujours être tenus à jour.
Tim Malone
25

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

// 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'
    ) );
}
Andrew Ryno
la source
23

Activer le débogage et la journalisation des erreurs pour une utilisation sur des sites dynamiques

C'est un morceau de 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 non seulement WP_DEBUG afin 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 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 DANS UN CAS) et vous pourrez ensuite passer les paramètres? Debug = 1, 2 ou 3 à la fin de l’URL de votre site.

? debug = 1 = affiche toutes les erreurs / remarques? debug = 2 = les oblige à 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: http://comluv.com/dev/enable-debugging-and-logging-for-live-site-usage/

Je travaille toujours sur un moyen de faire en sorte que ce soit protégé par un mot de passe ou, mieux, en quelque sorte, que cela fonctionne si (current_user_can ('manage_themes') et is_logged_in ().

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

Jaredwilli
la source
Nous utilisons quelque chose de similaire pour configurer en direct, staging et les détails de connexion à la base de données dev.
Tom
20

Ajouter automatiquement des titres dynamiques aux pages publiques

Testé sur: 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);
}
}
Chris_O
la source
20

Nouveaux rôles et capacités - ne s'exécutent 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 plug-in 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 vous suffit de supprimer l'un de ces blocs, de charger une page, puis de les commenter à nouveau! Ici, je crée un rôle qui possède les 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 utile d'ajouter / de supprimer un rôle existant plutôt que d'en supprimer et d'en ajouter de nouveau. Encore une fois, il vous suffit de supprimer le commentaire, de recharger une page, puis de la commenter à nouveau. Cela stockera le rôle / la capacité correctement dans la table des options. (Cela vous permet, au développeur, de les contrôler et supprime les frais généraux des plugins volumineux qui font la même chose.) Ici, je modifie le rôle d’auteur pour supprimer ses publications (par défaut), 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, bien que laisser le code mis en commentaire dans votre fichier functions.php fonctionne. Ne laissez pas ces exemples sans commentaires, sinon il écrira dans la base de données à chaque chargement de page!

tomcat23
la source
Les fonctions que je mentionne ci-dessus écrivent dans un champ de la base de données des options. Les commenter et les commenter est la voie à suivre. Il existe des plugins pour les rôles d'utilisateur, mais si vous utilisez les fonctions mentionnées ci-dessus, vous ne pouvez pas laisser ces fonctions en cours d'exécution et vous n'avez PAS besoin de les configurer plusieurs fois, ni de les définir en fonction de l'accès d'un utilisateur spécifique. Si vous le souhaitez, définissez cet utilisateur avec un rôle unique et spécifique. Et référez-vous au codex, tout ce que j'écris ci-dessus est correct à 100% si vous le faites sans plugin. Dans presque tous les cas, il vous suffit de définir les rôles d'utilisateur une fois.
tomcat23
@ tomcat23: Pour illustrer cela, je l'ai enveloppé dans une fonction pour ajouter uniquement le rôle, quand il n'existe pas déjà. Autre remarque: je suppose qu'il serait plus facile de placer le rôle quelque part dans la hiérarchie des rôles, en récupérant les limites d'un rôle intégré, puis en ajoutant / supprimant les fonctionnalités du rôle intégré. Cela rendrait plus clair et plus facile à retenir si ses plafonds sont placés quelque part entre ex. administrateur et éditeur. - J'espère que ça ne vous dérange pas que j'ai modifié votre réponse. Si vous le faites, les rôles pls le dos. :)
kaiser
1
@ tomcat23 - L'eau sous le pont à ce stade. Tout ce que je dis, c'est que je ne suis pas intéressé à blâmer, mais simplement à la paix pour que tout le monde aille de l'avant. :)
MikeSchinkel
2
@ MikeSchinkel Oui, vous avez raison. @ Kaiser Mes excuses si je vous ai causé une insulte.
tomcat23
1
@MikeSchinkel: merci d'avoir ramené la paix. @ Tomcat23: Non. Je peux faire face à ce genre de critique. Mes excuses aussi.
Kaiser
19

Wordpress Custom Admin Footer

// personnaliser le texte du pied de page de l'administrateur
fonction custom_admin_footer () {
        echo 'ajoutez votre texte de pied de page personnalisé et votre code html ici';
} 
add_filter ('admin_footer_text', 'custom_admin_footer');

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

Chuck Reynolds
la source
19

Activer les shortcodes dans les widgets

// shortcode in widgets
if ( !is_admin() ){
    add_filter('widget_text', 'do_shortcode', 11);
}
CommentLuv
la source
18

Fonction pour désactiver les flux RSS

Testé sur: 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);
Name-AK
la source
Source: bueltge.de/wordpress-feeds-deaktivieren/794 (Frank Bueltge)
fuxia
Merci Toscho! la source est aussi disponible en anglais wpengineer.com/287/disable-wordpress-feed
bueltge le
16

Remplacez le message "Howdy" par "Welcome"

Avec cette fonction, vous pouvez 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 le gettextfiltre:

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;
}
Philip
la source
3
Cela ne peut-il pas déjà être édité du côté de PHP pour ne pas générer de sortie?
hakre
Cela fonctionne très bien ici dans les versions 3.0+, bien sûr, mais pourquoi pas dans les anciennes versions? Vérifiez si tout autre plugin que vous utilisez est responsable de cela. Le texte ici remplacé par JQuery, peut-être un plugin JQuery?
Philip