Functions.php dosyanız için en iyi kod koleksiyonu [kapalı]


332

Lütfen soru veya cevabın sol tarafındaki YUKARI okunu tıklatarak soruyu ve faydalı bulduğun cevapları oylayın.

Şu an bu yazıyı görüntüleyen pek çok diğerinde olduğu gibi, wordpress becerilerimi öğrenmek ve geliştirmek için çeşitli bloglar, forumlar ve tartışma grupları okudum. Geçtiğimiz 12 ay boyunca dosyama kod ekleyerek eklentilerimi kullanma functions.phpyerine geçiyordum. Eklentilerin birçok durumda çok faydalı olduğu konusunda hemfikir olmama rağmen, deneyimim, bir eklentinin mevcut olmasına rağmen kullanım vakalarının% 90'ında, aslında onu kullanmanın gereksiz komplikasyonlar ve uyumluluk sorunları yaratabileceğini kanıtladı. Ek olarak, çoğu durumda bu tür eklentiler, istemediğim veya ihtiyaç duymadığım menüleri ve diğer yönetici öğelerini ekledi.

Çoğu zaman, eklentilerin kodunu analiz ederek, istediğim kod parçasını çıkarabildiğimi ve koduma zorla soktuğumu buldum functions.php. Bu bana gereksiz unsurları eklemek zorunda kalmadan ihtiyacım olan işlevselliği sağladı.

Bu yüzden, bu yazının amacı, sizi, okuyucu / yönetici / geliştiriciyi, benim için yararlı olan ve function.phpWordPress’i kullanmadan WordPress’i genişletmek veya geliştirmek için temanızın dosyasına eklediğiniz tüm kod bitlerini paylaşma girişimidir. Eklenti.

Buraya bir yanıt gönderdiğinizde lütfen her bir kod parçasına bir başlık verin, hangi wordpress'in hangi sürümüyle uyumlu olduğunu bildiğinizden emin olun, işlevini en iyi şekilde açıkladığını düşündüğünüz açıklamaları ekleyin ve (varsa) orijinaline bir bağlantı ekleyin. Eklentiyi veya bilgiyi bulduğunuz kaynak.

Tüm cevaplarınızı dört gözle bekliyorum ve tabii ki buldukça sürekli olarak kendi yeni bulgularımı ekleyeceğim.


13
İlk 5 cevabın OP tarafından verildiğini ve sorunun tek ve kesin bir cevaptan ziyade bir dizi cevabın toplanmasında daha güçlü göründüğünü göz önünde bulundurursak, bu bir topluluk wiki olmalı.
EAMann

17
Bir tema ile ilgili olmayan tüm cevaplar kaldırılmalıdır. Bu iş parçacığı kötü kodlama uygulamaları için iyi bir örnek.
fuxia

17
İnsanları, kendi işlevlerini kullanmak yerine özel bir işlevsellik eklentisi oluşturmaya teşvik etmenin daha iyi olacağını düşünüyorum.
Ian Dunn

3
@ NetConstructor.com Yalnızca sayfa görüntüleme sayısı kalite için bir gösterge değil. Özel cevaplar ve iyi kodlama uygulamaları ile özel soruları teşvik etmeliyiz. Bu konu tam tersi.
fuxia

6
@ NetConstructor.com üzerine tartışın Meta insanların argümanlar daha iyi görebilirsiniz. :)
fuxia

Yanıtlar:


107

TÜM Site Ayarlarını gösteren Gizli Yönetici Özelliğini Etkinleştir

Test edildi: Wordpress 3.1 RC3

Bu küçük kod parçası oldukça hoş bir şey yapar. Ayarlar menüsüne, "tüm ayarlar" bağlantısını içeren ve wordpress sitenizle ilgili veritabanınızdaki tüm ayarların tam bir listesini gösterecek bir ek seçenek ekleyecektir. Aşağıdaki kod, bu bağlantıyı yalnızca bir yönetici kullanıcı tarafından görülebilir ve diğer tüm kullanıcılar için gizler.

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

Gelişimi için harika! Eklentilerimin DB sürümlerini depolamak için seçenekler tablosunu sık kullanıyorum ... phpMyAdmin kullanarak eski bir komut dosyasını sınamak için yükseltme komut dosyasını sınamak bir acıdır ... bu çok daha kolay hale gelir !!!
EAMann

3
Ayrıca
sitenize

89

Giriş Logosu ve Resim URL Bağlantısını değiştirin

Test edildi: WordPress 3.0.1

Bu kod, WordPress Giriş sayfası logosunun yanı sıra bu logonun href bağlantısı ve başlık metnini kolayca değiştirmenize olanak sağlar.

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

EDIT: Giriş logosunu değiştirmek için site logosunu kullanmak istiyorsanız, bu bilgileri dinamik olarak çekmek için aşağıdakileri kullanabilirsiniz ( WP3.5'te test edilmiştir ):

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

Özel yazı türlerini arama sonuçlarına dahil edin.

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

Özel gönderi türlerinizi varsayılan olarak sitelerinizin ana RSS beslemesine ekleyin.

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

Özel gönderi türlerini "Right Now" admin kontrol paneli widget'ına dahil et

Bu, özel gönderi türlerinizi ve "Right Now" panosu widget'ındaki her tür için gönderi sayımlarını içerecektir.

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

Bu cevabın son pasajı ile ilgili olarak. Bu, her yazı türü için el ile eklediğim için harika bir ektir. Bununla ilgili tek sorun, varsayılan "kategori" ve "etiket" girişinden sonra veri eklemesi. Varsayılan "kategori" veya "etiket" etiketlerini aşağı taşımak veya manuel olarak eklenmeleri için bunları kaldırmak için cevabınızı güncelleyebilir misiniz?
NetConstructor.com

@ NetConstructor.com İsteğinizi anladığımı sanmıyorum. Eğer yaparsam, o zaman biraz daha zor bir iş olacağını düşünüyorum ve şu an nasıl yapılacağını bulmak için gerçekten zamanı yok.
jaredwilli

Arama sonuçlarına özel gönderim türlerini dahil et - Sanırım, şimdi bunu exclude_from_searchparam ile yapabilirsiniz register_post_type...
Krzysiek Dróżdż

78

ADMIN Kullanıcısı dışındaki tüm kullanıcılar için Güncelleme Bildirimi'ni kaldırın

Test edildi: Wordpress 3.0.1

Bu kod, "admin" dışında hiçbir kullanıcının güncelleme mevcut olduğunda wordpress tarafından bilgilendirilmemesini sağlar.

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

Yönetici kullanıcıları için yalnızca güncelleme bildirimi gösterecek şekilde değiştirildi (yalnızca 'yönetici' kullanıcısının aksine):

// 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
Bu idealden çok daha az. Yalnızca yönetici giriş bilgileri hala güvenlik nedeniyle kullanılmaması gereken varsayılan 'yönetici' ise işe yarar. Bunun yerine, insanların mesajları görmesini istediğiniz belirli bir yetenek olup olmadığını kontrol etmelisiniz.
jerclarke

1
Yani eğer (! Current_user_can ('manage_options')) {... add_filter ...} - Çifte yorum için üzgünüm, isabet
etmenin

Bu yüzden yorumu yönetici kullanıcı adını değiştirebileceğiniz koda ekledim. Bunu nasıl geliştirir / yeniden yazarsınız?
NetConstructor.com

En iyi yol, global $ user_login ve get_currentuserinfo () 'nin kaldırılması ve bunun yerine if cümlecikinizde current_user_can' i kullanmaktır. 3 yerine sadece 1 satır ve standart yoldur. Mesajlarda ACT olması gereken özel yetenekleri kontrol edebilirsiniz, bu durumda 'update_core' ve 'update_plugins' var.
jerclarke

2
so: if (! current_user_can ('update_plugins'))) {/ * MESAJLARI KALDIRIN * /}
jerclarke

72

Google CDN'den jQuery yükleniyor

Test edildi: 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' );
}
}

Güvenlik için WordPress Sürüm Bilgisini Kaldırma

Test edildi: Wordpress 3.0.1

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

Ön Uçtaki Yorumlara Spam Ekleme ve Silme Bağlantıları

Test edildi: Wordpress 3.0.1

Bu, spam ekleyerek ve bağlantıları silerek yorumları ön taraftan yönetmeyi kolaylaştırır. **

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

RSS yayınına herkese açık yayınlamayı geciktirme

Test edildi: Wordpress 3.0.1

Sonunda, RSS yayınlarıma göndermeyi 10-15 dakika geciktirmeyi seviyorum, çünkü metnimde her zaman en az bir çift hata buluyorum. Diğer kullanımlar, içeriğin RSS okuyucularınıza gönderilmeden önce bir gün veya bir hafta boyunca sitenize özel olmasını istiyorsanız mümkündür.

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

: my yayında kaynak wpengineer.com/320/publish-the-feed-later daha bilgilerle
bueltge

1
Ayrıca jeneratör filtresini de kaldırabilirsiniz:remove_action('wp_head', 'wp_generator');
Gipetto

25
ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js, bir saat sonra sona eriyor. Her zaman ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js gibi tam sürüm bilgilerini kullanın - bir yıl sonra sona erer.
fuxia

5
"Güvenlik için WordPress Sürüm Bilgilerini Kaldırma" kodu aslında sitenizin güvenliğini artıracak hiçbir şey yapmaz. Sitenizde kullanılan WP sürümünün gösterimini durdurmaz.
Joseph Scott

1
Doğru değil Joseph, eğer WordPress sürümünüz ortaya çıkarsa, kullanıcılar daha eski bir sürüm çalıştırıp çalıştırmadığınızı görebilir ve bu da güvenlik açıklarınızı ortaya çıkarır. Bunu tüm WordPress kurulumlarından kaldırmak her zaman iyi bir karardır. Şahsen, neden bir güvenlik sorunu olduğu için oraya neden koyduklarını bile bilmiyorum.
Jeremy

58

DB'nin şişmesini önlemek için maksimum yazı revizyonu ayarlayın.

Test edildi: Wordpress 3.0.1

Varsayılan sonsuzdur, bu yalnızca son 5 düzenlemeyi hatırlayacak şekilde ayarlayacaktır:

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

FWIW CONSTANTS için Codex sayfasında Editör wp-config.php ile ayarlanabilecek çok sayıda harika fikir var .


Bu yazı tipine göre ayarlanabilir mi?
NetConstructor.com 12:10

Wp_save_post_revision () içindeki kullanımına bakıldığında, yazı tiplerine göre ayırt etmenin bir yolu yok gibi görünüyor. Değerinde filtre ya da hiçbir şey yoktur, ancak muhtemelen olması gerekir.
jerclarke

teşekkürler Jeremy - Başkalarına, nasıl yapılacağını biliyorsanız lütfen buraya gönderin.
NetConstructor.com

1
şahsen tercih ederim 10. Biliyorum çift ama her zaman bir revizyona ihtiyaç duyduğumda her zaman daha büyük, sonra 5
janw

56

Wordpress Profilleme araçları

Profil oluşturma araçlarını ayrı bir dosyaya eklemeyi severim, daha sonra gerektiğinde functions.php dosyasına eklerim:

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

Bunu değiştirmek için hızlı bir yol var, böylece komut dosyası yalnızca yöneticiniz VE URL’ye hata ayıklama bilgilerini göstermek için bir şey eklediğinde çağrılır?
NetConstructor.com

1
Bu da benim tema işler böyle yürüyor: semiologic.com/software/sem-reloaded - /inc/debug.php /functions.php veya /inc/init.php tarafından dahil edilmiştir (üstünü kapatıp hatırlamıyorum benim kafa).
Denis de Bernardy

52

Yeniden Boyutlandırılmış Görüntüleri Keskinleştirme (yalnızca jpg)

Bu fonksiyon netleştirme jpg görüntüleri yeniden boyutlandırdı. Bir fark örneği: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);

çok daha iyi jpegs, bir demet teşekkürler! 3.4-
alpha'da

2
çocuklar bunu eklenti olarak isterlerse: wordpress.org/extend/plugins/sharpen-resized-images
Ünsal Korkmaz

bu işlev nereye gidiyor?
StevieD

@StevieD - başlıktan da anlaşılacağı gibi, şablonunuzdaki functions.php içine girer. Yine de dikkatli olurdum, bu fonksiyon neredeyse 8 yaşında.
timofey.com

51

Varsayılan Wordpress Meta Kutularını Kaldırma

Test edildi: Wordpress 3.0.1

Bu kod, varsayılan olarak Posta Ekle / Düzenle ve Sayfa Ekle / Düzenle ekranlarına varsayılan olarak wordpress ekleyen belirli Meta Kutuları kaldırmanıza izin verir.

// 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
Buna göre wordpress.stackexchange.com/questions/34030/… Slugdiv'i bu şekilde gizlemem ama bunun yerine bu gist.github.com/1863830 adresini kullandım

@CorvanNoorloos Github bağlantınız koptu.
user7003859

48

"Wordpress" to "WordPress" filtresini kaldır

Test edildi: Wordpress 3.0.1

Yazı içeriğinde, yazılarda ve yorum metninde "Wordpress" in tüm örneklerini (büyük harf P değil) "WordPress" e (büyük harf P ile) otomatik olarak dönüştüren WordPress sürüm 3.0 ile eklenen bir filtre vardı. Bazı insanlar bunu müdahaleci olarak görüyor, yalnızca zaman zaman WordPress'i yanlış kullanma ihtiyacım var ve filtreyi biraz sinir bozucu buldum.

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

Büyük küçük bulmak. Sadece gerekli değildir başka bir kod parçası kaldırır şeylerden biri
NetConstructor.com

5
WordPress 3.0.1’de bu filtre öncelik 11’e eklenmiş11 olduğundan, kaldırmak için üçüncü parametre olarak eklemeniz gerekir.
Jan Fabry

46

Gösterge Tablosunu Özelleştirme

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
   global $wp_meta_boxes;

Bu pano widget'larını kaldırın ...

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

'Yardım ve Destek' adlı özel bir widget ekleyin

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

Bu özel widget'ınızın içeriğidir

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

44

Özel Kullanıcı Profili Alanları Ekleme

Özel kullanıcı profili alanları eklemek için aşağıdaki kodu functions.php dosyasına yerleştirin. Uygun gördüğünüz gibi satırları düzenleyin veya ekleyin.

Satırı kaldırmamayı unutmayın: return $ contactmethods; Aksi halde bu işe yaramaz.

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

Özel alanları görüntülemek için aşağıda listelenen iki yöntemden birini kullanabilirsiniz.

Seçenek 1:

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

Seçenek 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

Yönetici menüsünün sırasını özelleştirme

üzerinde test edildi: Wordpress 3.0.1

Bu kod, yönetici menüsündeki öğelerin sırasını yeniden düzenlemenizi sağlar. Yapmanız gereken tek şey, yönetici menüsünde mevcut bir bağlantıya tıklamak ve / wp-admin / URL'den önceki her şeyi kopyalamak. Aşağıdaki sıra, yeni yönetici menüsünün sahip olacağı sırayı temsil eder.

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

Gerçekten adında bir çekirdek filtre var mı custom_menu_order? Bir tane bulamadım ...
kaiser


40

Exerpt uzunluğunu değiştirme fonksiyonu

Test edildi: Wordpress 3.0.1

Varsayılan olarak tüm alıntılar 55 kelimeyle sınırlandırılmıştır. Aşağıdaki kodu kullanarak bu varsayılan ayarları geçersiz kılabilirsiniz:

function new_excerpt_length($length) { 
    return 100;
}

add_filter('excerpt_length', 'new_excerpt_length');

Bu örnek, alıntı uzunluğunu 100 kelimeye değiştirir, ancak aynı yöntemi herhangi bir değere değiştirmek için kullanabilirsiniz.


@ user402 ... bu başlık sözcükleri veya karakterleri kullanıyor mu? Her ikisinin de nasıl yapıldığını postalayabilir misiniz?
NetConstructor.com 12:10

3
@ NetConstructor.com Bu fonksiyon (ve excerpt_lengthkanca) kelimelere göre değişir .
EAMann

Heh. Bu filtreyi çekirdeğe ekledim. :)
Dougal Campbell

38

Mesajları / Sayfa Listesini Yönet bölümüne Küçük Resimler ekle

Küçültme önizlemeli yeni bir sütunu görüntülemek için Gönderiyi ve Sayfayı Yönet / Düzenle listesine görüntülemek için bunu işlevlerinize ekleyebilirsiniz.

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

Sütun en sola nasıl taşınır?
Rich

38

Ping'i kendi bloguna kaldır

Test edildi: 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' );

wordpress ne sıklıkta ve ne zaman kendini ping eder?
NetConstructor.com

Aslında bu konuyu oldukça sık görüyorum. WP blogumdaki başka bir gönderiye dahili bir bağlantı gönderirsem, kendimden geri izleme veya geri tepme (hangisini hatırlamıyorum) alıyorum. Can sıkıcı.
Sahas Katta

Burada aynı. Bir haber / dergi blogum var ve sık sık diğer makalelerle bağlantı kuruyorum.
Steven

35

GZIP çıktı sıkıştırmasını etkinleştir

Normalde sunucu bunu otomatik olarak yapacak şekilde kurulmalıdır, ancak birçok paylaşılan ana bilgisayar bunu yapmaz (muhtemelen müşteri bant genişliği kullanımını artırmak için)

 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

DB Sorgularını, Harcanan Zaman ve Bellek Tüketimini Görüntüleme

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

Ardından, yukarıdaki kodu otomatik olarak yukarıdaki kodu genel web sitenizin altbilgisine yerleştirecek olan bu kodun altındaki kod (temanızın wp_footer öğesini çağırdığından emin olun):

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

Birden çok kez çağrılabilir.


php <5.2 kullanım içinmemory_get_usage()
onetrickpony

31

WP Varsayılan Widget'larının kaydını sil

Test edildi: 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);

Sürüm 3.1.4'te kullandım. Ancak widget'lar hala orada. Herhangi birinin fikri var mı?
user391,

Hala WP 4.5 üzerinde çalışıyor :)
Tim Malone

30

Post İçeriğinden İlk Resmi Otomatik Olarak Çıkar

Test edildi: Wordpress 3.0.1

Bu kod, bir gönderiyle ilişkilendirilmiş ilk resmi otomatik olarak çıkartır ve getImage işlevini çağırarak görüntülemenizi / kullanmanızı sağlar.

// 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
Güzel, ama get_the_image de bununla çok iyi bir iş çıkarıyor. wordpress.org/extend/plugins/get-the-image
artlung

doğru ama bu farklı bir şekilde çalışıyor ve get_the_image'in hesaba katmadığı çeşitli sorunları düzeltir
NetConstructor.com

3
Get_the_image betiğinden farklı olarak ne yapar?
matt

1
@matt - WordPress'te görüntülerin yazılara eklenebilmesinin farklı yolları vardır ve bence get_the_image betiği bunlardan birine bakar. Bu, özellikli bir resim olup olmadığını kontrol eder ve varsa ilk önce onu kullanır, daha sonra yazı içeriğine eklenen ilk resmi kontrol eder ve bu bulunmazsa, en yüksek sıralamadaki resim için medya galerisini kontrol eder. sipariş (en azından emrin nasıl gittiğini hatırlıyorum).
NetConstructor.com

i önermek wordpress.org/extend/plugins/auto-post-thumbnail Mesaj hali ayarlı değilse otomatik Yayındaki ilk resmin veya sadece herhangi bir özel mesaj türünden Mesaj Minik (Featured hali) oluşturmak
Ünsal Korkmaz

27

Bir gönderi / sayfanın başlıkta hangi tema şablon dosyasını kullandığını gösterir.

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

Temanız post_class kullanıyorsa, varsayılan DIV çıkışını kısaltın.

eğer temanız buna benzer bir şey kullanıyorsa

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

Kaynağınızda şunun gibi görünebilecek çılgın uzun div'ler olabilir:

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

Bu gerçekten kaynağınızı karıştırmaya başlayabilir ve çoğu durumda gereksiz görünüyor, 3-4 derinliğe kadar gitmek yeterli.

En iyi örnek için çıktıyı şöyle dilimleyebiliriz:

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

bu, çıktıyı yalnızca ilk 5 değeri içerecek şekilde dilimler, bu nedenle yukarıdaki örnek şöyle olur:

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

Kategori arşivini, gönderi türünden bağımsız olarak tüm gönderileri göstermesini sağlayın: özel gönderi türleri için iyi

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

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

İstenmeyen gösterge tablosu öğelerini kaldırın

Bu zaten gönderildi, ancak öğelerin tam listesine sahip değildi. Özellikle sinir bozucu olanlar "gelen bağlantılar!"

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

"Devamını Oku" sayfasını kaldır **

bunun yerine sayfanın başına dönün. “Daha fazlasını oku” yı tıkladığınızda, sayfadaki sıkıcı olabilecek noktaya atlayacaktır, bu sadece normal sayfa yükleme yapar, atlama yapmaz!

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

ADMIN menü öğelerini kullanıcı adına göre sınırlayın, kullanıcı adını gerçek bir kullanıcı adı ile değiştirin.

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

// alternatif olarak if ($ current_user-> user_login! = 'admin') yerine kullanabilirsiniz, muhtemelen daha faydalıdır

Etiket bulutuna stil verin

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

Buradaki seçeneklerin tam referansı (çok şey var!) Http://codex.wordpress.org/Function_Reference/wp_tag_cloud

Varsayılan RSS Widget güncelleme zamanlayıcısını değiştirin

(varsayılan 6 veya 12 saattir unuttum (1800 = 30dk).

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

Önümüzdeki birkaç hafta içinde bunların her birini ayrı cevaplara böler misiniz? Bunu senin için yapacaktım, ama cevapların için kredi alıyorum gibi görünmesini istemedim. Her durumda - Kullanıcıları aradıkları bilgileri kolayca bulabilmeleri için organize tutmaya çalışıyorum. Şimdiden teşekkürler
NetConstructor.com

Sadece "ADMIN menü öğelerini kullanıcı adına göre sınırla, kullanıcı adını gerçek bir kullanıcı adıyla değiştir" kodunu kullanıyordum, bu kodun belirli bir "kullanıcı rolü" için nasıl yapılabileceğini gösterecek şekilde güncellenebilir. Bunun çok faydalı olacağını düşünüyorum!
NetConstructor.com

Üzgünüz NetConstructor Yorumunuzu şimdi gördüm. Kullanıcı rolü için "current_user_can" kullanırdım. Test etmek için zamanım yok ama yaptığım zaman ekleyeceğim.
Wyck

wp_feed_cache_transient_lifetime için varsayılan değer 43200'dir (12 saat)
brasofilo

26

SADECE AKTİF DEĞİL eklentileri için Eklenti Güncellemesi Bildirimini Kaldır

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
Bu mutlaka iyi bir fikir değil - dosya sisteminde hala etkin olmayan bir eklenti var ve siteyi kesmek için hala güvensiz bir şekilde kullanılabiliyor. Eklentiler her zaman güncel tutulmalıdır.
Tim Malone

25

<head>Etiket içindeki gereksiz bilgileri ve HTML'yi kaldırın

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

Canlı Sitelerde Kullanmak İçin Hata Ayıklama ve Günlüğü Etkinleştirme

Bu, normalde varsayılan olarak devre dışı bırakılan WP_DEBUG sabitlerini kullanmak için yazdığım bir kod parçasıdır. Ben sadece WP_DEBUG'ı etkinleştirmenin bir yolunu yaratmadım, böylece olumsuz yan etkileri olmayan canlı bir sitede kullanabilirsiniz, fakat aynı zamanda hataların görüntülenmesini zorlamak ve bir günlük dosyası oluşturmak için diğer hata ayıklama sabitlerinden de faydalandım. / wp-content dizinindeki hatalar ve bildirimler.

Bu kodu wp-config.php dosyanıza bırakın (SADECE YEDEK BİR YEDEK TASARRUFUNDAN SONRA) ve ardından sitenizdeki herhangi bir URL'nin sonunda? Debug = 1, 2 veya 3 parametrelerini iletebilirsiniz.

? debug = 1 = tüm hataları / bildirimleri gösterir? debug = 2 = onları göstermeye zorlar? debug = 3 = / wp-content dir. içindeki tüm hataların debug.log dosyasını oluşturur.

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

İlgileniyorsanız Comluv için yazdığım misafir yazısı hakkında daha fazla ayrıntıya giriyorum: http://comluv.com/dev/enable-debugging-and-logging-for-live-site-usage/

Bunu ya parola korumalı hale getirmek için ya da tercihen bir şekilde eğer (current_user_can ('manage_themes') ve is_logged_in () üzerinde çalışacak şekilde çalışıyorum.

Ama daha da zorlaştığı yer burasıdır.


Canlı kurulum, evreleme ve veri tabanı bağlantı ayrıntılarına benzer bir şey kullanıyoruz.
Tom

20

Genel Sayfalara Dinamik Başlıkları Otomatik Olarak Ekleme

Test edildi: Wordpress 3.0.1

Aşağıdaki kodu kullanmak, herkese açık olarak görüntülenen sayfalara / yayınlara bağlı olarak otomatik olarak dinamik sayfa başlıkları oluşturur.

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

Yeni Roller ve Yetenekler - Sadece bir kere koşun!

Bunları kullanışlı tutuyorum, bu eklenti olmadan bunları yapmak için doğru yoldur. Seçenekler veritabanında tek bir alan (prefix_user_roles) ayarladılar ve ayarlamak için bir eklentiye ihtiyacınız yok. Hangi özelliklerin mevcut olduğunu ve ne yaptıklarını gösteren açıklamaların bir listesi için Kodeks sayfasına bakın. Sadece bu bloklardan birini açmanız, herhangi bir sayfa doldurmanız ve sonra tekrar yorum yapmanız yeterli! Burada ihtiyacım olan yeteneklere sahip bir rol yaratıyorum:

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

Bazen bir rolü kaldırmak ve yeniden eklemek yerine mevcut bir rol eklemek / kaldırmak faydalı olabilir. Yine, yalnızca yorumunu kaldırmanız, bir sayfayı yeniden yükleyip tekrar yorum yapmanız yeterlidir. Bu, rol / yeteneği seçenekler tablosunda doğru şekilde depolayacaktır. (Bu, geliştiricinin onları kontrol etmesine izin verir ve aynı şeyi yapan hantal eklentilerin ek yükünü kaldırır.) Burada, yayınlanmış yayınlarını silmek için yazar rolünü değiştiriyorum (varsayılan), ancak düzenleme yeteneğine izin veriyorum yayınlanmış gönderileri (bu rol için varsayılan olarak mümkün değildir) - * add_cap * veya * remove_cap * kullanarak.

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

Bu şekilde değiştiren siteler için Kodeks sayfasındaki kılavuzdan bir elektronik tablo tutarım, böylece işlevlerin nasıl ayarlandığını hatırlayabilirim, ancak yorumlanan kodu functions.php dosyanızda çalışacaktır. Bu örnekleri açık bırakmayın, yoksa her sayfa yüklendiğinde veritabanına yazacaktır!


Yukarıda bahsettiğim işlevler seçenekler veritabanındaki bir alana yazıyor. Onları yorumlamak ve yorumlamak gitmenin yoludur. Kullanıcı rolleri için eklentiler var, ancak yukarıda belirtilen işlevleri kullanırsanız, bu işlevleri çalışır durumda bırakamazsınız ve birden fazla kez ayarlamanıza veya belirli bir kullanıcının bir şeye erişip erişmediğini temel alarak ayarlamanıza gerek yoktur. İsterseniz, bu kullanıcıyı belirli ve benzersiz bir rolle ayarlayın. Ve kodeksi bakın, bir eklenti olmadan yaparsanız yukarıda yazdığım her şey% 100 doğru. Neredeyse her durumda, kullanıcı rollerini yalnızca bir kez ayarlamanız gerekir.
tomcat23

@ tomcat23: Göstermek için, zaten mevcut değilse, rolü eklemek için bir fonksiyona sardım. Başka bir not: Rolü rol hiyerarşisinde bir yere yerleştirmenin, bazı rolleri bazı yerleşik rollerden almaları ve ardından yerleşik roldeki yetenekleri ekleyip / kaldırmaları daha kolay olacağını düşünüyorum. Kapaklar arasında eski bir yere yerleştirilip yerleştirilmediğini hatırlamak daha net ve kolay olur. yönetici ve editör. - Umarım cevabınızı düzenlememe aldırmazsınız. Bunu yaparsanız, pls geri rol. :)
kaiser

1
@ tomcat23 - Bu noktada köprünün altındaki su. Tek söylediğim, suçu üstlenmekle ilgilenmiyorum, sadece herkesin ilerlediği için barış yapmak. :)
MikeSchinkel 13.03.

2
@MikeSchinkel Evet, haklısınız. @kaiser Size hakaret etmeme neden olduysam özür dilerim.
tomcat23

1
@MikeSchinkel: Barışı tekrar geri getirdiğiniz için teşekkürler. @ Tomcat23: Hayır, yapmadınız. Bu tür bir eleştiriyle başa çıkabilirim. Benim de özür dilerim.
kaiser

19

Wordpress Özel Yönetici Altbilgisi

// yönetici altbilgi metnini özelleştir
custom_admin_footer () {işlevi
        echo 'özel altbilgi metninizi ekleyin ve buraya html';
} 
add_filter ('admin_footer_text', 'custom_admin_footer');

Bunu müşteri siteleri için basit bir referans noktası olarak kullanıyorum.


19

Pencere öğelerinde kısa kodları etkinleştir

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

18

RSS Beslemelerini Devre Dışı Bırakma İşlevi

Test edildi: Wordpress 3.0.1

RSS beslemelerini devre dışı bırakabilirsiniz Wordpress tabanlı web sitenizi statik olarak korumak istiyorsanız.

Bu işlevi kullanabilirsiniz:

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


Teşekkürler Toscho! kaynak şu lisanlarda da mevcuttur; wpengineer.com/287/disable-wordpress-feed
bueltge 17:10

16

"Howdy" mesajını "Welcome" olarak değiştir

Bu fonksiyon ile yönetici alanınızın sağ üst köşesindeki "Howdy" mesajını kişiselleştirebilirsiniz.
Bu fonksiyon, "Howdy" mesajını "Welcome" olarak değiştirmek için JQuery'den faydalanır.

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

PHP sürümü, gettextfiltreyi kullanarak :

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
Bu zaten PHP tarafında düzenlenemiyor, bu yüzden çıktı almıyor mu?
hakre

Burada kesinlikle 3.0'dan fazla sürümde çalışıyor, ancak neden eski sürümlerde değil? Kullandığınız herhangi bir eklentinin bundan sorumlu olup olmadığını kontrol edin. Buradaki metin, belki de bir JQuery eklentisi olan JQuery ile değiştirildi.
Philip
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.