Migliore raccolta di codice per il tuo file Functions.php [chiuso]


332

Si prega di votare la domanda e le eventuali risposte utili facendo clic sulla freccia SU sul lato sinistro della domanda o risposta.

Come con molti altri che stanno visualizzando questo post, ho letto vari blog, forum e gruppi di discussione per imparare e migliorare le mie capacità di wordpress. Negli ultimi 12 mesi sono stato in missione per sostituire il mio utilizzo dei plugin aggiungendo invece codice al mio functions.phpfile. Sebbene io sia pienamente d'accordo sul fatto che i plug-in siano molto utili in molte situazioni, la mia esperienza ha dimostrato che nel 90% dei casi di utilizzo, anche se potrebbe esistere un plug-in, l'utilizzo effettivo potrebbe creare inutili complicazioni e problemi di compatibilità. Inoltre, in molti casi tali plugin hanno aggiunto menu e altri elementi di amministrazione che non desidero o di cui non ho bisogno.

Il più delle volte ho scoperto che analizzando il codice dei plugin sono stato in grado di rimuovere il pezzo di codice che volevo e codificarlo nel mio functions.php. Questo mi ha fornito l'esatta funzionalità di cui avevo bisogno senza dover includere elementi non necessari.

Quindi, lo scopo di questo post è il mio tentativo di coinvolgere te, il lettore / amministratore / sviluppatore, a condividere con me e altri qui eventuali bit di codice che ritieni utili e che hanno aggiunto al function.phpfile del tuo tema per estendere o migliorare WordPress senza utilizzare un collegare.

Quando invii una risposta qui, ti preghiamo gentilmente di dare un titolo a ciascun bit di codice, facci sapere se con quale versione di wordpress conosci la sua compatibilità, includi qualunque descrizione ritieni meglio descriva la sua funzione e (se applicabile) includi un link all'originale plugin o fonte in cui hai trovato le informazioni.

Non vedo l'ora di avere tutte le tue risposte e ovviamente aggiungerò continuamente le mie nuove scoperte ogni volta che le trovo.


13
Considerando che le prime 5 risposte sono state presentate dal PO e la domanda sembra più orientata alla raccolta di una serie di risposte piuttosto che a una singola risposta definitiva, questa dovrebbe essere una wiki della comunità.
EAMann,

17
Tutte le risposte non correlate a un tema devono essere rimosse. Questo thread è un buon esempio di cattive pratiche di codifica.
fuxia

17
Penso che sarebbe meglio incoraggiare le persone a creare un plug-in di funzionalità personalizzato invece di utilizzare le funzioni del loro tema.php
Ian Dunn,

3
@ NetConstructor.com Il numero puro di visualizzazioni di pagina non è un indicatore di qualità. Dovremmo incoraggiare domande specifiche con risposte specifiche e buone pratiche di codifica. Questa discussione è l'opposto.
fuxia

6
@ NetConstructor.com Discutilo su Meta dove le persone possono vedere meglio i tuoi argomenti. :)
fuxia

Risposte:


107

Abilita la funzione di amministrazione nascosta che visualizza TUTTE le impostazioni del sito

Testato su: Wordpress 3.1 RC3

Questo piccolo pezzo di codice fa qualcosa di piuttosto interessante. Aggiungerà un'opzione aggiuntiva al menu delle impostazioni con un collegamento a "tutte le impostazioni" che ti mostrerà un elenco completo di tutte le impostazioni che hai nel tuo database relative al tuo sito wordpress. Il codice seguente renderà questo collegamento visibile solo a un utente amministratore e lo nasconderà per tutti gli altri utenti.

// 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');

Fantastico per lo sviluppo! Uso frequentemente la tabella delle opzioni per memorizzare le versioni DB per i miei plug-in ... usare phpMyAdmin per ripristinare una versione DB precedente per testare uno script di aggiornamento è un problema ... questo lo renderà molto più facile !!!
EAMann,

3
Puoi anche accedere alla stessa pagina delle opzioni (quando hai effettuato l'accesso) accedendo alla tua / wp-admin / options.php
j08691

89

Modifica il logo di accesso e il collegamento URL immagine

Testato su: WordPress 3.0.1

Questo codice ti consentirà di modificare facilmente il logo della pagina di accesso di WordPress, nonché il collegamento href e il testo del titolo di questo 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>';
}

MODIFICA: Se si desidera utilizzare il logo del sito per sostituire il logo di accesso, è possibile utilizzare quanto segue per estrarre dinamicamente tali informazioni (testato su 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;
}

79

Includi tipi di post personalizzati nei risultati di ricerca.

// 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' );

Aggiungi i tuoi tipi di post personalizzati al feed RSS principale del tuo sito per impostazione predefinita.

// 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' );

Includi tipi di post personalizzati nel widget dashboard di amministrazione "In questo momento"

Ciò includerà i tipi di post personalizzati e il conteggio dei post per ciascun tipo nel widget dashboard "In questo momento".

// 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' );

Per quanto riguarda l'ultimo frammento di questa risposta. Questa è un'ottima aggiunta, poiché li stavo aggiungendo manualmente per ogni tipo di post. L'unico problema che ho con questo è che aggiunge i dati dopo la voce "categoria" e "tag" predefinite. Potresti aggiornare la tua risposta per spostare le "categorie" o "tag" predefinite verso il basso o rimuoverle in modo che possano essere aggiunte manualmente?
NetConstructor.com il

@ NetConstructor.com Non credo di aver capito la tua richiesta. Se lo faccio, penso che sarebbe una cosa un po 'più difficile da fare, e non ho davvero tempo per capire come farlo.
jaredwilli,

Includi i tipi di post personalizzati nei risultati di ricerca - suppongo, ora puoi farlo con exclude_from_searchparam di register_post_type...
Krzysiek Dróżdż

78

Rimuovere la notifica di aggiornamento per tutti gli utenti tranne l'utente ADMIN

Testato su: Wordpress 3.0.1

Questo codice assicurerà che nessun utente diverso da "admin" venga avvisato da wordpress quando sono disponibili aggiornamenti.

// 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;" ) );
   }

Versione modificata per mostrare solo la notifica di aggiornamento per gli utenti admin (al contrario del solo utente '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;" ) );
       }

8
Questo è molto meno che ideale. Funzionerà solo se il login dell'amministratore è ancora "admin" predefinito, cosa che non dovrebbe essere per motivi di sicurezza. Dovresti invece verificare una specifica capacità che desideri che le persone debbano vedere i messaggi.
jerclarke,

1
Vale a dire if (! Current_user_can ('manage_options')) {... add_filter ...} - Mi dispiace per il doppio commento, ho dimenticato che
premere

Ecco perché ho aggiunto il commento al codice in cui è possibile modificare il nome utente admin. Come lo miglioreresti / riscriveresti?
NetConstructor.com,

Il modo migliore è rimuovere $ user_login globale e get_currentuserinfo () e invece usare current_user_can nella tua clausola if. È solo 1 riga anziché 3 ed è il modo standard. Puoi verificare la capacità specifica che sarebbe necessaria per agire sui messaggi, in questo caso c'è 'update_core' e 'update_plugins'.
jerclarke,

2
quindi: if (! current_user_can ('update_plugins')) {/ * RIMUOVI MESSAGGI * /}
jerclarke,

72

Caricamento di jQuery da Google CDN

Testato su: 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' );
}
}

Rimuovi le informazioni sulla versione di WordPress per la sicurezza

Testato su: Wordpress 3.0.1

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

Aggiungi spam ed elimina collegamenti ai commenti sul front-end

Testato su: Wordpress 3.0.1

Ciò semplifica la gestione dei commenti dal front-end aggiungendo spam ed eliminando i collegamenti. **

// 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>';
    }
}

Ritarda la pubblicazione pubblica nel feed RSS

Testato su: Wordpress 3.0.1

Infine, mi piace ritardare la pubblicazione dei miei feed RSS per 10-15 minuti perché trovo sempre almeno un paio di errori nel mio testo. Altri usi sono nel caso in cui desideri che i contenuti siano esclusivi per il tuo sito per un giorno o una settimana prima di inviarli ai tuoi lettori 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');

fonte sul mio post: wpengineer.com/320/publish-the-feed-later con maggiori informazioni
bueltge

1
Puoi anche rimuovere il filtro del generatore:remove_action('wp_head', 'wp_generator');
Gipetto,

25
ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js scade dopo solo un'ora. Utilizzare sempre le informazioni sulla versione completa come ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js - che scade dopo un anno.
fuxia

5
Il codice "Rimuovi le informazioni sulla versione di WordPress per la sicurezza" in realtà non fa nulla per aumentare la sicurezza del tuo sito. Non si ferma nemmeno l'esposizione della versione WP in uso sul tuo sito.
Joseph Scott,

1
Non è vero Joseph, se la tua versione di WordPress è esposta, le persone possono vedere se stai utilizzando una versione precedente, esponendo così le tue vulnerabilità. È sempre una buona decisione rimuoverlo da tutte le installazioni di WordPress. Personalmente, non so nemmeno perché l'hanno messo lì in primo luogo perché è un problema di sicurezza.
Jeremy,

58

Impostare un numero massimo di revisioni post per evitare il gonfiamento del DB.

Testato su: Wordpress 3.0.1

L'impostazione predefinita è infinita, questo lo imposterà per ricordare solo le ultime 5 modifiche:

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

FWIW ci sono un sacco di grandi idee per COSTANTI che possono essere impostate sulla pagina del Codex Modifica di wp-config.php .


Può essere impostato in base al tipo di post?
NetConstructor.com,

Osservando il suo utilizzo in wp_save_post_revision () non sembra esserci un modo per distinguere in base ai tipi di post. Non c'è filtro o altro sul valore, anche se probabilmente dovrebbe esserci.
jerclarke,

grazie Jeremy - A chiunque altro, se sai come fare, per favore pubblicalo qui.
NetConstructor.com

1
personalmente preferisco 10. So che è doppio, ma sempre quando ho bisogno di una revisione è sempre più vecchio del 5
gennaio

56

Strumenti di profilazione di Wordpress

Mi piace aggiungere strumenti di profilazione in un file separato, che poi includo da Functions.php quando necessario:

<?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);
?>

c'è un modo rapido per modificarlo in modo che lo script venga chiamato solo quando un amministratore E aggiunge qualcosa all'URL per mostrare le informazioni di debug?
NetConstructor.com il

1
È così che viene fatto nel mio tema: semiologic.com/software/sem-reloaded - il /inc/debug.php è incluso da /functions.php o /inc/init.php (non riesco a ricordare la parte superiore del mio testa).
Denis de Bernardy,

52

Precisione delle immagini ridimensionate (solo jpg)

Questa funzione rende più nitide le immagini jpg ridimensionate. Un esempio di differenza: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);

jpeg molto migliori, grazie mille! testato in 3.4-alfa
brasofilo il


dove va questa funzione?
StevieD

@StevieD - come suggerisce il titolo, va all'interno di Functions.php, nel tuo modello. Starei attento però, questa funzione ha quasi 8 anni.
timofey.com, il

51

Rimuovi le meta box predefinite di Wordpress

Testato su: Wordpress 3.0.1

Questo codice ti permetterà di rimuovere specifiche Meta Box che wordpress aggiunge per impostazione predefinita alle schermate Aggiungi / Modifica post predefinite e Aggiungi / Modifica pagina.

// 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');

4
Secondo questa wordpress.stackexchange.com/questions/34030/... non vorrei nascondere lo slugdiv questo modo, ma utilizzare questo gist.github.com/1863830 invece

@CorvanNoorloos Il tuo link github è interrotto.
user7003859,

48

Rimuovere il filtro "Wordpress" in "WordPress"

Testato su: Wordpress 3.0.1

È stato aggiunto un filtro con WordPress versione 3.0 che converte automaticamente tutte le istanze di "Wordpress" (senza P maiuscole) in "WordPress" (con una P maiuscola) nei contenuti dei post, nei titoli dei post e nel testo dei commenti. Alcune persone lo vedono come invadente, ho solo bisogno di sbagliare WordPress di tanto in tanto e ho trovato il filtro un po 'fastidioso.

// 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 );
}

grande scoperta. Una di quelle cose che rimuove semplicemente un altro pezzo di codice che non è necessario
NetConstructor.com

5
In WordPress 3.0.1, questo filtro viene aggiunto con priorità 11 , quindi è necessario aggiungere 11come terzo parametro per rimuoverlo.
Jan Fabry,

46

Personalizza la Dashboard

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
   global $wp_meta_boxes;

Rimuovi questi widget dashboard ...

   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']);

Aggiungi un widget personalizzato chiamato "Guida in linea e supporto tecnico"

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

Questo è il contenuto per il tuo widget personalizzato

 function custom_dashboard_help() {
    echo '<p>Lorum ipsum delor sit amet et nunc</p>';
}

44

Aggiungi campi del profilo utente personalizzato

Inserisci il codice qui sotto nel tuo file Functions.php per aggiungere campi del profilo utente personalizzato. Modifica o aggiungi linee come ritieni opportuno.

Ricorda di non rimuovere la riga: return $ contactmethods; altrimenti questo non funzionerà.

// 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);

Per visualizzare campi personalizzati è possibile utilizzare uno dei due metodi elencati di seguito.

Opzione 1:

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

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

41

Personalizza l'ordine del menu di amministrazione

testato su: Wordpress 3.0.1

Questo codice ti permetterà di riorganizzare l'ordine degli elementi nel menu di amministrazione. Tutto quello che devi fare è fare clic su un collegamento esistente nel menu di amministrazione e copiare tutto prima dell'URL / wp-admin /. L'ordine seguente rappresenta l'ordine che avrà il nuovo menu di amministrazione.

// 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');

Esiste davvero un filtro principale chiamato custom_menu_order? Non riuscivo a trovarne uno ...
Kaiser


40

Funzione per modificare la lunghezza di Exerpt

Testato su: Wordpress 3.0.1

Per impostazione predefinita, tutti gli estratti sono limitati a 55 parole. Utilizzando il codice seguente è possibile ignorare queste impostazioni predefinite:

function new_excerpt_length($length) { 
    return 100;
}

add_filter('excerpt_length', 'new_excerpt_length');

In questo esempio la lunghezza dell'estratto viene modificata in 100 parole, ma è possibile utilizzare lo stesso metodo per cambiarlo in qualsiasi valore.


@ user402 ... questo cappuccio è composto da parole o caratteri? Potresti pubblicare come fare entrambe le cose?
NetConstructor.com,

3
@ NetConstructor.com Questa funzione (e il excerpt_lengthgancio) si limitano a parole .
EAMann,

Eh. Ho aggiunto quel filtro al core. :)
Dougal Campbell

38

Aggiungi miniature nell'elenco Gestisci post / pagine

Puoi aggiungerlo alle tue funzioni per visualizzare nell'Elenco Gestisci / Modifica post e pagine una nuova colonna con l'anteprima in miniatura.

/****** 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 );
}

Come spostare la colonna all'estrema sinistra?
Ricco

38

Rimuovi ping sul tuo blog

Testato su: 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' );

quanto spesso e quando wordpress esegue il ping stesso?
NetConstructor.com il

In realtà ho questo problema abbastanza spesso. Se faccio riferimento a un link interno a un altro post sul mio blog WP, ottengo un trackback o un pingback (non ricordo quale) da me stesso. È fastidioso.
Sahas Katta,

Anch'io. Ho un blog di notizie / riviste e link ad altri articoli abbastanza spesso.
Steven,

35

Abilita la compressione dell'uscita GZIP

Normalmente il server dovrebbe essere configurato per farlo automaticamente, ma molti host condivisi non lo fanno (probabilmente per aumentare l'utilizzo della larghezza di banda del 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);'));

32

Visualizza query DB, tempo trascorso e consumo di memoria

Testato su: 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} -->" ;
}

Quindi questo codice sotto il codice sopra che inserirà automaticamente il codice sopra nel piè di pagina del tuo sito Web pubblico (assicurati che il tuo tema stia chiamando wp_footer):

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

Può essere chiamato più volte.


per php <5.2 usarememory_get_usage()
onetrickpony il

31

Annulla la registrazione dei widget predefiniti di WP

Testato su: 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);

L'ho usato sulla versione 3.1.4. Ma i widget sono ancora lì. Qualcuno ha idea?
user391

Funziona ancora su WP 4.5 :)
Tim Malone,

30

Estrai automaticamente la prima immagine dal contenuto del post

Testato su: Wordpress 3.0.1

Questo codice estrae automaticamente la prima immagine associata a un post e ti consente di visualizzarlo / usarlo chiamando la funzione 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;
}

6
Bello, ma get_the_image fa un ottimo lavoro anche con questo. wordpress.org/extend/plugins/get-the-image
artlung

corretto ma questo funziona in modo diverso e risolve vari problemi che get_the_image non tiene conto
NetConstructor.com

3
Cosa fa diversamente dallo script get_the_image?
matt

1
@matt - In wordpress ci sono diversi modi in cui le immagini possono essere aggiunte ai post e penso che lo script get_the_image guardi solo uno di questi. Questo controlla se c'è un'immagine in primo piano e la utilizza prima se disponibile, poi penso che controlla la prima immagine aggiunta al contenuto del post e se non viene trovata controlla la galleria multimediale per l'immagine con l'ordinamento più alto ordine (almeno così mi ricordo che stava andando).
NetConstructor.com il

suggerisco wordpress.org/extend/plugins/auto-post-thumbnail Genera automaticamente la Miniatura post (Miniatura in primo piano) dalla prima immagine in post o qualsiasi tipo di post personalizzato solo se Post Thumbnail non è impostata
Ünsal Korkmaz

27

Stampa l'intestazione del file modello del tema utilizzato da un post / pagina

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

Riduci l'output DIV predefinito se il tuo tema utilizza post_class.

se il tuo tema utilizza qualcosa di simile

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

Puoi avere lunghi div pazzi nella tua fonte che potrebbero apparire così o anche più a lungo:

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

Questo può davvero iniziare a ingombrare la tua fonte e sembrare piuttosto inutile nella maggior parte dei casi, andare 3-4 in profondità è abbastanza buono.

Per l'esempio principale possiamo suddividere l'output in questo modo:

// 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');

questo suddivide l'output per includere solo i primi 5 valori, quindi l'esempio sopra diventa:

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

Fai in modo che gli archivi delle categorie visualizzino tutti i post, indipendentemente dal tipo di post: ottimo per tipi di post personalizzati

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

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

Rimuovi gli elementi di dashboard indesiderati

Questo è già stato pubblicato ma non aveva l'elenco completo degli articoli. Soprattutto quei fastidiosi "link in arrivo!"

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']);
}

Rimuovere i salti di pagina "Ulteriori informazioni" **

invece torna all'inizio della pagina. Sai come quando fai clic su "leggi di più" salterà al punto della pagina che può essere fastidioso, questo lo fa semplicemente caricare la pagina normalmente, senza saltare!

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');

Limitare le voci di menu ADMIN in base al nome utente , sostituire il nome utente con un nome utente effettivo.

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');

// in alternativa puoi usare if ($ current_user-> user_login! = 'admin') invece, probabilmente più utile

Dai uno stile alla nuvola di tag

//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;
}

Riferimento completo delle opzioni qui (ce ne sono molte!) Http://codex.wordpress.org/Function_Reference/wp_tag_cloud

Modifica timer aggiornamento widget RSS predefinito

(il valore predefinito è 6 o 12 ore che dimentico (1800 = 30min).

add_filter( 'wp_feed_cache_transient_lifetime', create_function('$fixrss', 'return 1800;') );

potresti per favore dividere ciascuno di questi in risposte separate entro le prossime settimane. Lo avrei fatto per te ma non volevo far sembrare che mi prendessi il merito delle tue risposte. In ogni caso, sto cercando di organizzarlo in modo che gli utenti possano facilmente trovare le informazioni che stanno cercando. Grazie in anticipo
NetConstructor.com il

Stavo solo usando il codice "Limita le voci di menu ADMIN in base al nome utente, sostituisci il nome utente con il nome di un utente reale", il che è fantastico, ma potresti aggiornare il codice per mostrare anche come farlo per uno specifico "ruolo utente". Penso che questo sarebbe molto utile!
NetConstructor.com il

Mi dispiace NetConstructor Ho appena visto il tuo commento ora. Per il ruolo utente vorrei usare "current_user_can". Non ho tempo di provarlo, ma quando lo faccio, lo aggiungerò.
Wyck,

il valore predefinito per wp_feed_cache_transient_lifetime è 43200 (12 ore)
brasofilo

26

Rimuovere l'avviso di aggiornamento del plug-in SOLO per i plug-in INATTIVI

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

1
Questa non è necessariamente una buona idea - un plugin inattivo è ancora presente nel filesystem e uno insicuro può ancora essere utilizzato per hackerare il sito. I plug-in dovrebbero essere sempre aggiornati.
Tim Malone,

25

Rimuovi informazioni superflue e HTML all'interno del <head>tag

// 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'
    ) );
}

23

Abilita il debug e la registrazione degli errori da utilizzare sui siti live

Questo è un pezzo di codice che ho scritto per utilizzare le costanti WP_DEBUG che sono normalmente disabilitate per impostazione predefinita. Bene, ho creato un modo non solo per abilitare WP_DEBUG in modo da poterlo utilizzare su un sito live senza effetti collaterali negativi, ma ho anche fatto uso delle altre costanti di debug per forzare la visualizzazione degli errori e per creare un file di registro di gli errori e gli avvisi nella directory / wp-content.

Rilascia questo codice nel tuo file wp-config.php (DOPO SALVARE UN BACKUP SOLO IN CASO) e quindi puoi passare i parametri? Debug = 1, 2 o 3 alla fine di qualsiasi URL sul tuo sito.

? debug = 1 = mostra tutti gli errori / le comunicazioni? debug = 2 = forza la loro visualizzazione? debug = 3 = crea un file debug.log di tutti gli errori nella directory / 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);
}

Vado più in dettaglio sul post degli ospiti che ho scritto per Comluv se sei interessato, qui: http://comluv.com/dev/enable-debugging-and-logging-for-live-site-usage/

Sto ancora lavorando su un modo per rendere questo protetto da password, o preferibilmente in qualche modo farlo funzionare su if (current_user_can ('manage_themes') e is_logged_in ().

Ma è qui che diventa molto più complicato.


Usiamo qualcosa di simile ai dettagli di configurazione del live, staging e dev database.
Tom

20

Aggiungi automaticamente titoli dinamici a pagine pubbliche

Testato su: Wordpress 3.0.1

L'utilizzo del codice seguente creerà automaticamente titoli di pagina dinamici in base alle pagine / ai post visualizzati pubblicamente.

/* 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);
}
}

20

Nuovi ruoli e funzionalità: esegui una sola volta!

Tengo a portata di mano questi, questo è il modo giusto di farli senza un plugin. Hanno impostato un singolo campo (prefix_user_roles) nel database delle opzioni e non è necessario un plug-in per impostarli. Fare riferimento alla pagina Codex per un elenco di quali funzionalità sono disponibili e descrizioni per ciò che fanno. Devi solo decommentare uno di questi blocchi, caricare qualsiasi pagina e poi commentarli di nuovo! Qui sto creando un ruolo che ha le capacità di cui ho bisogno:

/* 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');
*/

A volte è utile aggiungere / rimuovere da un ruolo esistente piuttosto che rimuoverlo e aggiungerlo di nuovo. Ancora una volta, devi solo decommentarlo, ricaricare una pagina e quindi commentarlo di nuovo. Ciò memorizzerà correttamente il ruolo / la capacità nella tabella delle opzioni. (Questo ti consente, lo sviluppatore di controllarli e rimuove l'overhead dei plugin ingombranti che fanno la stessa cosa.) Qui sto cambiando il ruolo dell'autore per eliminare i loro post pubblicati (impostazione predefinita), ma consentendo loro la possibilità di modificare i loro post pubblicati (che non è possibile per questo ruolo di default) - usando * add_cap * o * remove_cap *.

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

Tengo un foglio di calcolo con la griglia dalla pagina del Codex per i siti che modificano in questo modo, quindi posso ricordare come sono impostate le cose, anche se funzionerà lasciando il codice commentato nel tuo file.php. Non lasciare questi esempi senza commenti, o scriverà nel database ad ogni caricamento della pagina!


Le funzioni che menziono sopra scrivono in un campo nel database delle opzioni. Commentare e commentare loro è la strada da percorrere. Esistono plugin per i ruoli utente, ma se si utilizzano le funzioni sopra menzionate, non è possibile lasciarle in esecuzione e NON è necessario impostarle più di una volta o impostarle in base a se un utente specifico accede a qualcosa. Se lo desideri, imposta l'utente con un ruolo specifico e unico. E fare riferimento al codice, tutto ciò che scrivo sopra è corretto al 100% se lo fai senza un plugin. Per quasi tutti i casi, è necessario impostare i ruoli utente solo una volta.
tomcat23,

@ tomcat23: per illustrarlo, l'ho inserito in una funzione per aggiungere solo il ruolo, quando non esiste già. Un'altra nota: suppongo che sarebbe più semplice posizionare il ruolo da qualche parte nella gerarchia dei ruoli, recuperando i limiti da alcuni ruoli predefiniti e quindi aggiungendo / rimuovendo le funzionalità dal ruolo integrato. Renderebbe più chiaro e più facile ricordare se i suoi tappi sono posti da qualche parte tra ex. amministratore ed editore. - Spero non ti dispiaccia che ho modificato la tua risposta. Se lo fai, ti preghiamo di ricambiarlo. :)
Kaiser

1
@ tomcat23 - L'acqua sotto il ponte a questo punto. Tutto quello che sto dicendo è che non mi interessa dare la colpa, ma solo avere la pace per tutti. :)
MikeSchinkel,

2
@MikeSchinkel Sì, hai ragione. @kaiser Mi scuso se ti ho causato un insulto.
tomcat23

1
@MikeSchinkel: grazie per aver riportato la pace. @ Tomcat23: No, non l'hai fatto. Posso affrontare questo tipo di critiche. Anche le mie scuse.
Kaiser

19

Piè di pagina amministratore personalizzato di Wordpress

// personalizza il testo del piè di pagina dell'amministratore
funzione custom_admin_footer () {
        echo 'aggiungi qui il testo del piè di pagina personalizzato e l'html';
} 
add_filter ('admin_footer_text', 'custom_admin_footer');

Lo uso per i siti client come semplice punto di riferimento per contattarmi come sviluppatore.


19

Abilita i codici brevi nei widget

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

18

Funzione per disabilitare i feed RSS

Testato su: Wordpress 3.0.1

È possibile disabilitare i feed RSS Se si desidera mantenere statico il sito Web basato su Wordpress.

Puoi usare questa funzione:

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);


Grazie Toscho! la fonte è disponibile anche in inglese wpengineer.com/287/disable-wordpress-feed
bueltge

16

Cambia il messaggio "Howdy" in "Benvenuto"

Con questa funzione è possibile personalizzare il messaggio "Howdy" in alto a destra nell'area di amministrazione.
Questa funzione utilizza JQuery per modificare il messaggio "Howdy" in "Benvenuto".

/****** 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;
}

Versione PHP, usando il gettextfiltro:

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;
}

3
Non è già possibile modificarlo sul lato PHP in modo che non ottenga alcun output?
Hacre,

Funziona bene qui nelle versioni 3.0+, ma perché non nelle versioni precedenti? Controlla se qualsiasi altro plugin che usi è responsabile per questo. Il testo qui sostituito con JQuery, forse un plugin JQuery?
Filippo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.