Kumpulan Kode Terbaik untuk file functions.php Anda [ditutup]


332

Berikan suara untuk pertanyaan dan jawaban apa pun yang menurut Anda berguna dengan mengeklik panah UP di sebelah kiri pertanyaan atau jawaban.

Seperti banyak orang lain yang sekarang melihat posting ini, saya telah membaca berbagai blog, forum, dan grup diskusi untuk belajar dan meningkatkan keterampilan wordpress saya. Selama 12 bulan terakhir saya berada di sebuah misi untuk menggantikan penggunaan plugin saya dengan menambahkan kode ke functions.phpfile saya sebagai gantinya. Sementara saya sepenuhnya setuju bahwa plugin sangat berguna dalam banyak situasi, pengalaman saya membuktikan bahwa dalam 90% kasus penggunaan meskipun ada plugin, sebenarnya menggunakannya dapat menciptakan komplikasi yang tidak perlu dan masalah kompatibilitas. Selain itu dalam banyak kasus plugin seperti itu menambahkan menu dan elemen admin lainnya yang tidak saya inginkan atau butuhkan.

Lebih sering daripada tidak saya telah menemukan bahwa dengan menganalisis kode plugin saya dapat menghapus bagian dari kode yang saya inginkan dan memasukkannya ke dalam kode saya functions.php. Ini memberi saya fungsionalitas tepat yang saya butuhkan tanpa harus memasukkan elemen yang tidak perlu.

Jadi, tujuan dari posting ini adalah upaya saya untuk melibatkan Anda, pembaca / admin / pengembang, untuk berbagi dengan saya dan lainnya di sini setiap bit kode yang menurut Anda berguna dan telah ditambahkan ke function.phpfile tema Anda untuk memperluas atau meningkatkan WordPress tanpa menggunakan plugin.

Ketika Anda mengirimkan tanggapan di sini, silakan beri setiap kode sedikit judul, beri tahu kami jika dengan versi apa dari wordpress Anda tahu kompatibel dengannya, sertakan deskripsi apa pun yang menurut Anda paling sesuai dengan fungsinya dan (jika ada) sertakan tautan ke aslinya plugin atau sumber tempat Anda menemukan informasinya.

Saya menantikan semua tanggapan Anda dan tentu saja akan terus menambahkan temuan baru saya sendiri setiap kali saya menemukannya.


13
Mempertimbangkan 5 jawaban pertama adalah oleh OP dan pertanyaan itu tampaknya lebih diarahkan untuk mengumpulkan serangkaian tanggapan daripada jawaban tunggal yang pasti, ini harus menjadi wiki komunitas.
EAMann

17
Semua jawaban yang tidak terkait dengan tema harus dihapus. Utas ini adalah contoh yang baik untuk praktik pengkodean yang buruk.
fuxia

17
Saya pikir akan lebih baik untuk mendorong orang untuk membuat plugin fungsionalitas khusus daripada menggunakan functions.php tema mereka
Ian Dunn

3
@ NetConstructor.com Jumlah murni tampilan halaman bukan merupakan indikator untuk kualitas. Kita harus mendorong pertanyaan spesifik dengan jawaban spesifik dan praktik pengkodean yang baik. Utas ini adalah kebalikannya.
fuxia

6
@ NetConstructor.com Diskusikan di Meta tempat orang dapat melihat argumen Anda dengan lebih baik. :)
fuxia

Jawaban:


107

Aktifkan Fitur Admin Tersembunyi menampilkan SEMUA Pengaturan Situs

Diuji pada: Wordpress 3.1 RC3

Sepotong kode kecil ini melakukan sesuatu yang sangat keren. Ini akan menambahkan opsi tambahan ke menu pengaturan Anda dengan tautan ke "semua pengaturan" yang akan menunjukkan kepada Anda daftar lengkap semua pengaturan yang Anda miliki dalam basis data Anda yang terkait dengan situs wordpress Anda. Kode di bawah ini hanya akan membuat tautan ini terlihat oleh pengguna admin dan menyembunyikannya untuk semua pengguna lain.

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

Fantastis untuk pengembangan! Saya sering menggunakan tabel opsi untuk menyimpan versi DB untuk plug-in saya ... menggunakan phpMyAdmin untuk mengatur ulang ke versi DB yang lama untuk menguji skrip pemutakhiran adalah hal yang menyakitkan ... ini akan membuatnya jauh lebih mudah !!!
EAMann

3
Anda juga dapat masuk ke halaman opsi yang sama (saat login) dengan mengunjungi situs Anda / wp-admin / options.php
j08691

89

Ubah Logo Masuk & Tautan URL Gambar

Diuji pada: WordPress 3.0.1

Kode ini akan memungkinkan Anda untuk dengan mudah memodifikasi Logo halaman Login WordPress serta tautan href dan teks judul logo ini.

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: Jika Anda ingin menggunakan logo situs untuk mengganti logo login, Anda dapat menggunakan yang berikut untuk secara dinamis menarik informasi itu (diuji pada 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

Sertakan jenis posting khusus dalam hasil pencarian.

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

Tambahkan jenis posting khusus Anda ke feed RSS utama situs Anda secara default.

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

Sertakan jenis pos khusus di widget dasbor admin "Right Now"

Ini akan mencakup jenis posting khusus Anda dan jumlah posting untuk setiap jenis di widget dasbor "Right Now".

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

Mengenai cuplikan terakhir untuk jawaban ini. Ini adalah tambahan yang bagus karena saya menambahkan ini secara manual untuk setiap jenis posting. Satu-satunya masalah yang saya miliki dengan ini adalah bahwa ia menambahkan data setelah entri "kategori" dan "tag" default. Bisakah Anda memperbarui jawaban Anda untuk memindahkan yang "kategori" atau "tag" ke bawah atau menghapusnya sehingga dapat ditambahkan secara manual?
NetConstructor.com

@ NetConstructor.com Saya rasa saya tidak mengerti permintaan Anda. Jika saya melakukannya, maka saya pikir itu akan sedikit lebih sulit untuk dilakukan, dan tidak benar-benar punya waktu sekarang untuk mencari tahu bagaimana melakukannya.
jaredwilli

Sertakan jenis posting khusus dalam hasil pencarian - Saya kira, sekarang Anda dapat melakukan ini dengan exclude_from_searchparam register_post_type...
Krzysiek Dróżdż

78

Hapus Perbarui Pemberitahuan untuk semua pengguna kecuali Pengguna ADMIN

Diuji pada: Wordpress 3.0.1

Kode ini akan memastikan bahwa tidak ada pengguna selain "admin" yang diberitahu oleh wordpress ketika pembaruan tersedia ..

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

Versi yang diubah hanya menampilkan pemberitahuan pembaruan untuk pengguna admin (bukan hanya pengguna '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
Ini jauh dari ideal. Ini hanya akan berfungsi jika login admin masih merupakan 'admin' default, yang seharusnya tidak karena alasan keamanan. Alih-alih, Anda harus memeriksa kemampuan khusus yang Anda inginkan agar orang lain melihat pesan.
jerclarke

1
Yaitu jika {... add_filter ...} (current_user_can ( 'manage_options')!) - Maaf tentang komentar ganda, aku lupa bahwa memukul masukkan komentar Serahkan)
jerclarke

Karena itulah saya menambahkan komentar ke kode tempat Anda dapat mengubah nama pengguna admin. Bagaimana Anda meningkatkan / menulis ulang?
NetConstructor.com

Cara terbaik adalah menghapus $ user_login global dan get_currentuserinfo () dan alih-alih menggunakan current_user_can dalam klausa if Anda. Ini hanya 1 baris, bukan 3 dan itu cara standar. Anda dapat memeriksa kemampuan khusus yang akan diperlukan untuk ACT pada pesan, dalam hal ini ada 'update_core' dan 'update_plugins'.
jerclarke

2
jadi: if (! current_user_can ('update_plugins')) {/ * HAPUS PESAN * /}
jerclarke

72

Memuat jQuery dari Google CDN

Diuji pada: 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' );
}
}

Hapus Info Versi WordPress untuk Keamanan

Diuji pada: Wordpress 3.0.1

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

Tambahkan Spam & Hapus Tautan ke Komentar di Front End

Diuji pada: Wordpress 3.0.1

Ini memudahkan mengelola komentar dari ujung depan dengan menambahkan spam dan menghapus tautan. **

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

Tunda posting publik ke RSS Feed

Diuji pada: Wordpress 3.0.1

Akhirnya, saya suka menunda posting ke feed RSS saya selama 10-15 menit karena saya selalu menemukan setidaknya beberapa kesalahan dalam teks saya. Kegunaan lain adalah jika Anda ingin konten menjadi eksklusif ke situs Anda selama sehari atau seminggu sebelum mendorongnya ke pembaca RSS Anda.

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

sumber di posting saya: wpengineer.com/320/publish-the-feed-later dengan informasi lebih lanjut
bueltge

1
Anda juga dapat menghapus filter generator:remove_action('wp_head', 'wp_generator');
Gipetto

25
ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js berakhir setelah hanya satu jam. Selalu gunakan informasi versi lengkap seperti ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js - yang kedaluwarsa setelah satu tahun.
fuxia

5
Kode "Hapus Info Versi WordPress untuk Keamanan" sebenarnya tidak melakukan apa pun untuk meningkatkan keamanan situs Anda. Bahkan tidak menghentikan paparan versi WP yang digunakan di situs Anda.
Joseph Scott

1
Tidak benar Joseph, jika versi WordPress Anda diekspos maka orang dapat melihat apakah Anda menjalankan versi yang lebih lama, sehingga mengekspos kerentanan Anda. Itu selalu merupakan keputusan yang baik untuk menghapus itu dari semua instalasi WordPress. Secara pribadi, saya bahkan tidak tahu mengapa mereka meletakkannya di sana karena ini masalah keamanan.
Jeremy

58

Tetapkan jumlah maksimum pos revisi untuk menghindari DB mengasapi.

Diuji pada: Wordpress 3.0.1

Default tidak terbatas, ini akan membuatnya hanya mengingat 5 suntingan terakhir:

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

FWIW ada banyak ide bagus untuk CONSTANTS yang dapat diatur pada halaman Codex Editing wp-config.php .


Apakah ini dapat ditetapkan berdasarkan tipe per posting?
NetConstructor.com

Melihat penggunaannya di wp_save_post_revision () sepertinya tidak ada cara untuk membedakan berdasarkan jenis posting. Tidak ada filter atau apapun pada nilainya, meskipun mungkin harus ada.
jerclarke

Terima kasih Jeremy - Kepada siapa pun, jika Anda tahu bagaimana melakukan ini, silakan posting di sini.
NetConstructor.com

1
secara pribadi saya lebih suka 10. Saya tahu ini dobel tetapi selalu ketika saya membutuhkan revisi itu selalu lebih tua dari 5
janw

56

Alat Profiling Wordpress

Saya ingin menambahkan alat profil di file terpisah, yang kemudian saya sertakan dari functions.php ketika diperlukan:

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

apakah ada cara cepat untuk memodifikasi ini sehingga skrip hanya dipanggil ketika administrator Anda DAN menambahkan sesuatu ke URL untuk menampilkan info debug?
NetConstructor.com

1
Begitulah cara itu dilakukan dalam tema saya: semiologic.com/software/sem-reloaded - /inc/debug.php dimasukkan oleh /functions.php atau /inc/init.php (tidak bisa mengingat bagian atas dari saya kepala).
Denis de Bernardy

52

Pertajam Gambar yang Diubah Ukurannya (hanya jpg)

Fungsi ini mempertajam gambar jpg yang diubah ukurannya. Contoh perbedaan: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);

jpegs jauh lebih baik, terima kasih banyak! diuji dalam 3,4-alpha
brasofilo

2
jika kalian ingin ini sebagai plugin: wordpress.org/extend/plugins/sharpen-resized-images
Ünsal Korkmaz

kemana fungsi ini pergi?
StevieD

@StevieD - seperti judulnya, ia masuk ke dalam functions.php, di templat Anda. Saya akan berhati-hati, fungsi ini hampir 8 tahun.
timofey.com

51

Hapus Kotak Meta Wordpress Default

Diuji pada: Wordpress 3.0.1

Kode ini akan memungkinkan Anda untuk menghapus Kotak Meta tertentu yang ditambahkan secara default oleh wordpress ke layar Tambah / Edit Posting dan Tambah / Edit Halaman.

// 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
Menurut wordpress.stackexchange.com/questions/34030/… ini saya tidak akan menyembunyikan slugdiv dengan cara ini, tetapi gunakan gist.github.com/1863830 sebagai gantinya

@CorvanNoorloos Tautan github Anda rusak.
user7003859

48

Hapus "Wordpress" ke filter "WordPress"

Diuji pada: Wordpress 3.0.1

Ada filter yang ditambahkan dengan WordPress versi 3.0 yang secara otomatis mengkonversi semua contoh "Wordpress" (tanpa huruf P) menjadi "WordPress" (dengan huruf P besar) dalam konten posting, judul posting, dan teks komentar. Beberapa orang melihat ini sebagai hal yang mengganggu, saya hanya perlu menyalahgunakan WordPress dari waktu ke waktu dan menganggap filternya agak mengganggu.

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

menemukan sedikit hebat. Salah satu hal yang hanya menghilangkan sepotong kode yang tidak diperlukan
NetConstructor.com

5
Di WordPress 3.0.1, filter ini ditambahkan dengan prioritas 11 , jadi Anda perlu menambahkan 11sebagai parameter ketiga untuk menghapusnya.
Jan Fabry

46

Kustomisasi Dasbor

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
   global $wp_meta_boxes;

Hapus widget dasbor ini ...

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

Tambahkan widget khusus yang disebut 'Bantuan dan Dukungan'

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

Ini adalah konten untuk widget khusus Anda

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

44

Tambahkan Bidang Profil Pengguna Khusus

Tempatkan kode di bawah ini ke file functions.php Anda untuk menambahkan bidang profil pengguna khusus. Edit atau tambahkan baris sesuai keinginan Anda.

Ingatlah untuk tidak menghapus baris: mengembalikan $ contactmethods; jika tidak, ini tidak akan berhasil.

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

Untuk menampilkan bidang khusus, Anda dapat menggunakan salah satu dari dua metode yang tercantum di bawah ini.

Pilihan 1:

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

Pilihan 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

Kustomisasi urutan menu admin

diuji pada: Wordpress 3.0.1

Kode ini akan memungkinkan Anda untuk mengatur ulang urutan elemen dalam menu admin. Yang perlu Anda lakukan adalah mengklik tautan yang ada di menu admin dan menyalin semuanya sebelum / wp-admin / URL. Urutan di bawah ini menunjukkan urutan menu admin baru.

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

Apakah benar ada filter inti bernama custom_menu_order? Saya tidak dapat menemukan satu ...
kaiser


40

Berfungsi untuk mengubah panjang Kutipan

Diuji pada: Wordpress 3.0.1

Secara default semua kutipan dibatasi pada 55 kata. Memanfaatkan kode di bawah ini Anda dapat mengganti pengaturan default ini:

function new_excerpt_length($length) { 
    return 100;
}

add_filter('excerpt_length', 'new_excerpt_length');

Contoh ini mengubah panjang kutipan menjadi 100 kata, tetapi Anda dapat menggunakan metode yang sama untuk mengubahnya ke nilai apa pun.


@ user402 ... apakah ini dibatasi oleh kata atau karakter? Bisakah Anda memposting cara melakukan keduanya?
NetConstructor.com

3
@ NetConstructor.com Fungsi ini (dan excerpt_lengthhook) tutup dengan kata-kata .
EAMann

Heh. Saya mendapatkan filter yang ditambahkan ke inti. :)
Dougal Campbell

38

Tambahkan Gambar Mini di Kelola Daftar Posting / Halaman

Anda dapat menambahkan ini ke fungsi Anda untuk ditampilkan ke kolom Kelola / Edit Posting dan Daftar Halaman dengan pratinjau gambar kecil.

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

Bagaimana cara memindahkan kolom ke paling kiri?
Kaya

38

Hapus ping ke blog Anda sendiri

Diuji pada: 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' );

seberapa sering dan kapan wordpress melakukan ping sendiri?
NetConstructor.com

Saya sebenarnya memiliki masalah itu cukup sering. Jika saya mereferensikan tautan internal ke posting lain di blog WP saya, saya mendapatkan trackback atau pingback (tidak ingat yang mana) dari diri saya. Itu menyebalkan.
Sahas Katta

Sama disini. Saya memiliki blog berita / majalah dan tautan ke artikel lain cukup sering.
Steven

35

Aktifkan kompresi keluaran GZIP

Biasanya server harus diatur untuk melakukan ini secara otomatis, tetapi banyak host bersama tidak melakukan ini (mungkin untuk meningkatkan penggunaan bandwidth klien)

 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

Menampilkan permintaan DB, menghabiskan waktu dan konsumsi memori

Diuji pada: 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} -->" ;
}

Kemudian kode ini di bawah kode di atas yang secara otomatis akan memasukkan kode di atas ke dalam footer situs web publik Anda (pastikan tema Anda memanggil wp_footer):

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

Dapat dipanggil beberapa kali.


untuk php <5.2 usememory_get_usage()
onetrickpony

31

Batalkan registrasi Widget Default WP

Diuji pada: 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);

Saya telah menggunakannya di Versi 3.1.4. Tapi widget itu masih ada. Apakah ada yang punya ide?
user391

Masih bekerja di WP 4.5 :)
Tim Malone

30

Ekstrak Gambar Pertama Secara Otomatis dari Konten Posting

Diuji pada: Wordpress 3.0.1

Kode ini akan secara otomatis mengekstrak gambar pertama yang terkait dengan sebuah posting dan memungkinkan Anda untuk menampilkan / menggunakannya dengan memanggil fungsi 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
Bagus, tetapi get_the_image melakukan pekerjaan yang sangat baik dengan ini juga. wordpress.org/extend/plugins/get-the-image
artlung

benar tetapi yang satu ini bekerja secara berbeda dan memperbaiki berbagai masalah yang tidak diperhitungkan
get_the_image

3
Apa fungsinya secara berbeda dari skrip get_the_image?
matt

1
@matt - Dalam wordpress ada beberapa cara berbeda bahwa gambar dapat ditambahkan ke posting dan saya pikir skrip get_the_image hanya melihat salah satunya. Ini memeriksa untuk melihat apakah ada gambar unggulan dan menggunakan yang pertama jika tersedia, selanjutnya saya pikir itu memeriksa gambar pertama yang ditambahkan ke konten posting dan jika tidak ditemukan memeriksa galeri media untuk gambar dengan jenis tertinggi order (setidaknya begitulah saya ingat pesanan akan).
NetConstructor.com

saya sarankan wordpress.org/extend/plugins/auto-post-thumbnail Secara otomatis menghasilkan Thumbnail Posting (Thumbnail Unggulan) dari gambar pertama dalam posting atau jenis posting khusus hanya jika Post Thumbnail tidak disetel
Ünsal Korkmaz

27

Keluarkan file templat tema mana yang digunakan tulisan pos / halaman di header

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

Persingkat keluaran DIV default jika tema Anda menggunakan post_class.

jika tema Anda menggunakan sesuatu seperti

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

Anda dapat memiliki div panjang yang gila di sumber Anda yang mungkin terlihat seperti ini atau bahkan lebih lama:

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

Ini benar-benar dapat mulai mengacaukan sumber Anda dan tampaknya agak tidak perlu dalam kebanyakan kasus, kedalaman 3-4 cukup baik.

Sebagai contoh teratas kita dapat mengiris output seperti:

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

ini mengiris output untuk hanya menyertakan 5 nilai pertama, jadi contoh di atas menjadi:

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

Buat arsip kategori menampilkan semua posting, terlepas dari jenis posting: bagus untuk jenis posting khusus

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

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

Hapus item dasbor yang tidak diinginkan

Ini sudah diposting tetapi tidak memiliki daftar item lengkap. Terutama "tautan masuk" yang menjengkelkan itu.

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

Hapus lompatan halaman "Read More" **

alih-alih kembali ke bagian atas halaman. Anda tahu bagaimana ketika Anda mengklik "baca lebih lanjut" itu akan melompat ke tempat di halaman yang dapat mengganggu, ini membuatnya hanya memuat halaman secara normal, tidak melompat!

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

Batasi item menu ADMIN berdasarkan nama pengguna , ganti nama pengguna dengan nama pengguna sebenarnya.

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

// atau Anda dapat menggunakan if ($ current_user-> user_login! = 'admin'), mungkin lebih bermanfaat

Gaya tag cloud

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

Referensi lengkap opsi di sini (ada banyak!) Http://codex.wordpress.org/Function_Reference/wp_tag_cloud

Ubah timer pembaruan RSS Widget Default

(standarnya adalah 6 atau 12 jam saya lupa (1800 = 30 menit).

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

bisakah Anda membagi masing-masing menjadi jawaban yang terpisah dalam beberapa minggu ke depan. Saya akan melakukannya untuk Anda tetapi tidak ingin membuatnya tampak seperti saya menghargai jawaban Anda. Dalam hal apa pun - saya mencoba untuk menjaga ini terorganisir sehingga pengguna dapat dengan mudah menemukan informasi yang mereka cari. Terima kasih sebelumnya
NetConstructor.com

Saya hanya menggunakan kode "Batasi item menu ADMIN berdasarkan nama pengguna, ganti nama pengguna dengan nama pengguna sebenarnya" yang bagus tetapi dapatkah Anda memperbarui kode untuk juga menunjukkan bagaimana hal ini dapat dilakukan untuk "peran pengguna" tertentu. Saya pikir ini akan sangat berguna!
NetConstructor.com

Maaf NetConstructor Saya baru saja melihat komentar Anda sekarang. Untuk peran pengguna saya akan menggunakan "current_user_can". Saya tidak punya waktu untuk mengujinya tetapi ketika saya melakukannya, saya akan menambahkannya.
Wyck

nilai default untuk wp_feed_cache_transient_lifetime adalah 43200 (12 jam)
brasofilo

26

Hapus Pemberitahuan Pembaruan Plugin SAJA untuk plugin INACTIVE

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
Ini tidak selalu merupakan ide yang bagus - plugin yang tidak aktif masih ada di sistem file, dan yang tidak aman masih dapat digunakan untuk meretas situs. Plugin harus selalu diperbarui.
Tim Malone

25

Hapus info berlebihan dan HTML di dalam <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

Aktifkan Kesalahan Debugging Dan Logging Untuk Digunakan Di Situs Langsung

Ini adalah sepotong kode yang saya tulis untuk memanfaatkan konstanta WP_DEBUG yang biasanya dinonaktifkan secara default. Yah saya menciptakan cara untuk tidak hanya mengaktifkan WP_DEBUG sehingga Anda dapat menggunakannya di situs langsung tanpa efek samping negatif, tetapi saya juga menggunakan konstanta debugging lain untuk memaksa kesalahan ditampilkan, dan untuk membuat file log dari kesalahan dan Pemberitahuan di direktori / wp-content.

Letakkan kode ini di file wp-config.php Anda (SETELAH ANDA MENYIMPAN CADANGAN HANYA DALAM KASUS) dan kemudian Anda dapat melewati parameter? Debug = 1, 2, atau 3 di akhir setiap url di situs Anda.

? debug = 1 = menunjukkan semua kesalahan / pemberitahuan? debug = 2 = memaksa mereka untuk ditampilkan? debug = 3 = membuat file debug.log dari semua kesalahan dalam dir / 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);
}

Saya masuk ke lebih detail pada posting tamu yang saya tulis untuk Comluv jika Anda tertarik, di sini: http://comluv.com/dev/enable-debugging-and-logging-for-live-site-usage/

Saya masih bekerja pada cara untuk membuat ini dilindungi kata sandi, atau lebih disukai entah bagaimana membuatnya bekerja jika (current_user_can ('manage_themes') dan is_logged_in ().

Tapi di situlah ia menjadi lebih rumit.


Kami menggunakan sesuatu yang mirip dengan pengaturan detail koneksi database live, staging dan dev.
Tom

20

Tambahkan Judul Dinamis ke Halaman Publik secara otomatis

Diuji pada: Wordpress 3.0.1

Memanfaatkan kode di bawah ini akan secara otomatis membuat judul halaman dinamis berdasarkan halaman / posting yang dilihat publik.

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

Peran dan Kemampuan Baru - Hanya berjalan sekali!

Saya menyimpan ini berguna, ini adalah cara yang tepat untuk melakukannya tanpa plugin. Mereka menetapkan satu bidang (prefix_user_roles) dalam basis data opsi, dan Anda tidak memerlukan plugin untuk menyetelnya. Lihat halaman Codex untuk daftar kemampuan apa yang tersedia dan deskripsi untuk apa yang mereka lakukan. Anda hanya perlu menghapus komentar salah satu dari blok ini, memuat halaman mana saja dan kemudian berkomentar lagi! Di sini saya membuat peran yang memiliki kemampuan yang saya butuhkan:

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

Terkadang berguna untuk menambah / menghapus dari peran yang ada daripada menghapus dan menambahkan kembali. Sekali lagi, Anda hanya perlu menghapus tanda komentarnya, memuat ulang halaman dan berkomentar lagi. Ini akan menyimpan peran / kemampuan dengan benar dalam tabel opsi. (Ini memungkinkan Anda, pengembang untuk mengontrol mereka dan menghapus overhead plugins besar yang melakukan hal yang sama.) Di sini saya mengubah peran penulis untuk menghapus posting yang dipublikasikan (default), tetapi memungkinkan mereka kemampuan untuk mengedit posting mereka yang dipublikasikan (yang tidak mungkin untuk peran ini secara default) - menggunakan * add_cap * atau * remove_cap *.

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

Saya menyimpan spreadsheet dengan kisi dari halaman Codex untuk situs yang memodifikasi dengan cara ini, jadi saya dapat mengingat bagaimana segala sesuatunya diatur, meskipun meninggalkan kode yang dikomentari di file functions.php Anda akan berfungsi. Jangan tinggalkan contoh ini tanpa komentar, atau itu akan menulis ke database dengan setiap halaman dimuat!


Fungsi yang saya sebutkan di atas menulis ke bidang dalam basis data opsi. Mengomentari dan menghapus komentar mereka adalah cara yang harus ditempuh. Ada plugin untuk peran pengguna, tetapi jika Anda menggunakan fungsi yang disebutkan di atas, Anda tidak dapat membiarkan fungsi ini berjalan, dan Anda TIDAK perlu mengaturnya lebih dari sekali, atau mengaturnya berdasarkan jika pengguna tertentu mengakses sesuatu. Jika Anda menginginkannya, atur pengguna itu dengan peran khusus dan unik. Dan merujuk pada kodeks, semua yang saya tulis di atas adalah 100% benar jika Anda melakukannya tanpa plugin. Untuk hampir setiap kasus, Anda hanya perlu mengatur peran pengguna satu kali.
tomcat23

@ tomcat23: Sebagai ilustrasi, saya membungkusnya dalam sebuah fungsi untuk hanya menambahkan peran, ketika belum ada. Catatan lain: Saya kira akan lebih mudah untuk menempatkan peran di suatu tempat dalam hierarki peran, dengan mengambil tutup dari beberapa peran bawaan dan kemudian menambah / menghapus kemampuan dari peran bawaan. Akan membuatnya lebih jelas dan lebih mudah diingat jika topi itu ditempatkan di suatu tempat antara mantan. admin dan editor. - Saya harap Anda tidak keberatan saya mengedit jawaban Anda. Jika Anda melakukannya, tolong peran itu kembali. :)
kaiser

1
@ tomcat23 - Air di bawah jembatan pada saat ini. Yang saya katakan adalah, saya tidak tertarik menyalahkan, hanya memiliki kedamaian bagi semua orang yang bergerak maju. :)
MikeSchinkel

2
@MikeSchinkel Ya, Anda benar. @kaiser Saya minta maaf jika saya telah membuat Anda menghina.
tomcat23

1
@MikeSchinkel: terima kasih telah membawa kedamaian kembali. @ Tomcat23: Tidak, Anda tidak melakukannya. Saya bisa menghadapi kritik semacam itu. Saya juga minta maaf.
kaiser

19

Footer Admin Kustom Wordpress

// sesuaikan teks catatan kaki admin
function custom_admin_footer () {
        gema 'tambahkan teks footer kustom Anda dan html di sini';
} 
add_filter ('admin_footer_text', 'custom_admin_footer');

Saya menggunakan ini untuk situs klien sebagai titik referensi sederhana untuk menghubungi saya sebagai dev.


19

Aktifkan shortcode dalam widget

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

18

Berfungsi untuk Menonaktifkan Umpan RSS

Diuji pada: Wordpress 3.0.1

Anda dapat menonaktifkan umpan RSS Jika Anda ingin mempertahankan situs web berbasis Wordpress Anda sebagai statis.

Anda dapat menggunakan fungsi ini:

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


Toscho terima kasih! sumbernya juga tersedia dalam bahasa Inggris wpengineer.com/287/disable-wordpress-feed
bueltge

16

Ubah pesan "Howdy" menjadi "Welcome"

Dengan fungsi ini Anda dapat menyesuaikan pesan "Howdy" di kanan atas area admin Anda.
Fungsi ini memanfaatkan JQuery untuk mengubah pesan "Howdy" menjadi "Welcome".

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

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

Versi PHP, menggunakan gettextfilter:

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
Tidak bisakah ini sudah diedit di sisi PHP sehingga tidak mendapatkan output sama sekali?
hakre

Ini berfungsi dengan baik di sini dalam versi 3.0+ pasti, tetapi mengapa tidak dalam versi yang lebih lama? Periksa apakah ada plugin lain yang Anda gunakan yang bertanggung jawab untuk ini. Teks di sini diganti dengan JQuery, mungkin plugin JQuery?
Philip
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.