Bộ sưu tập mã tốt nhất cho tệp tin.php của bạn [đã đóng]


332

Vui lòng bỏ phiếu cho câu hỏi và bất kỳ câu trả lời nào bạn thấy hữu ích bằng cách nhấp vào mũi tên LÊN ở phía bên trái của câu hỏi hoặc câu trả lời.

Cũng như nhiều người khác đang xem bài đăng này, tôi đã đọc nhiều blog, diễn đàn và các nhóm thảo luận để tìm hiểu và cải thiện kỹ năng wordpress của mình. Trong 12 tháng qua, tôi đã thực hiện một nhiệm vụ thay thế việc sử dụng plugin của mình bằng cách thêm mã vào functions.phptệp của mình . Mặc dù tôi hoàn toàn đồng ý rằng các plugin rất hữu ích trong nhiều tình huống, kinh nghiệm của tôi đã chứng minh rằng trong 90% trường hợp sử dụng mặc dù plugin có thể tồn tại, nhưng thực sự sử dụng nó có thể tạo ra các vấn đề không tương thích và tương thích không cần thiết. Ngoài ra, trong rất nhiều trường hợp, các plugin như các menu được thêm vào và các yếu tố quản trị khác mà tôi không muốn hoặc không cần.

Thường xuyên hơn không, tôi đã phát hiện ra rằng bằng cách phân tích mã của các plugin, tôi có thể loại bỏ đoạn mã tôi muốn và mã cứng vào mã của tôi functions.php. Điều này cung cấp cho tôi chức năng chính xác tôi cần mà không cần phải bao gồm các yếu tố không cần thiết.

Vì vậy, mục đích của bài đăng này là tôi cố gắng thu hút bạn, người đọc / quản trị viên / nhà phát triển, để chia sẻ với tôi và ở đây bất kỳ bit mã nào bạn thấy hữu ích và đã thêm vào function.phptệp chủ đề của bạn để mở rộng hoặc nâng cao WordPress mà không cần sử dụng cắm vào.

Khi bạn gửi phản hồi tại đây, vui lòng cung cấp cho mỗi mã bit một tiêu đề, cho chúng tôi biết nếu với phiên bản wordpress nào bạn biết tương thích với nó, bao gồm bất kỳ mô tả nào bạn cảm thấy tốt nhất mô tả chức năng của nó và (nếu có) bao gồm một liên kết đến bản gốc plugin hoặc nguồn nơi bạn tìm thấy thông tin.

Tôi mong chờ tất cả các câu trả lời của bạn và tất nhiên sẽ liên tục bổ sung những phát hiện mới của riêng tôi mỗi khi tôi tìm thấy chúng.


13
Xem xét 5 câu trả lời đầu tiên là của OP và câu hỏi dường như hướng đến việc thu thập một loạt các câu trả lời hơn là một câu trả lời dứt khoát, duy nhất, đây phải là một wiki cộng đồng.
EAMann

17
Tất cả các câu trả lời không liên quan đến một chủ đề nên được loại bỏ. Chủ đề này là một ví dụ tốt cho thực hành mã hóa xấu.
fuxia

17
Tôi nghĩ sẽ tốt hơn nếu khuyến khích mọi người tạo một plugin chức năng tùy chỉnh thay vì sử dụng các chức năng của chủ đề của họ.php
Ian Dunn

3
@ NetConstructor.com Số lượt xem trang thuần túy không phải là chỉ số cho chất lượng. Chúng ta nên khuyến khích các câu hỏi cụ thể với câu trả lời cụ thể và thực hành mã hóa tốt. Chủ đề này là ngược lại.
fuxia

6
@ NetConstructor.com Thảo luận về nó trên Meta nơi mọi người có thể thấy các đối số của bạn tốt hơn. :)
fuxia

Câu trả lời:


107

Bật tính năng quản trị viên ẩn hiển thị TẤT CẢ Cài đặt trang

Đã thử nghiệm trên: Wordpress 3.1 RC3

Đoạn mã nhỏ này làm một cái gì đó khá mát mẻ. Nó sẽ thêm một tùy chọn bổ sung vào menu cài đặt của bạn với một liên kết đến "tất cả các cài đặt" sẽ hiển thị cho bạn một danh sách đầy đủ tất cả các cài đặt bạn có trong cơ sở dữ liệu liên quan đến trang web wordpress của bạn. Mã dưới đây sẽ chỉ hiển thị liên kết này cho người dùng quản trị và ẩn nó cho tất cả người dùng khác.

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

Tuyệt vời cho sự phát triển! Tôi thường xuyên sử dụng bảng tùy chọn để lưu trữ các phiên bản DB cho các trình cắm của mình ... sử dụng phpMyAdmin để đặt lại thành phiên bản DB cũ để kiểm tra tập lệnh nâng cấp là một điều khó khăn ... điều này sẽ làm cho nó dễ dàng hơn nhiều !!!
EAMann

3
Bạn cũng có thể truy cập cùng trang tùy chọn (khi đăng nhập) bằng cách truy cập trang web của bạn / wp-admin /
Options.php

89

Sửa đổi Liên kết Đăng nhập Logo & Hình ảnh

Đã thử nghiệm trên: WordPress 3.0.1

Mã này sẽ cho phép bạn dễ dàng sửa đổi Logo trang đăng nhập WordPress cũng như liên kết href và văn bản tiêu đề của logo này.

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: Nếu bạn muốn sử dụng logo trang web để thay thế logo đăng nhập, bạn có thể sử dụng cách sau để tự động lấy thông tin đó (đã thử nghiệm trên 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

Bao gồm các loại bài tùy chỉnh trong kết quả tìm kiếm.

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

Thêm các loại bài đăng tùy chỉnh của bạn vào nguồn cấp RSS chính của trang theo mặc định.

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

Bao gồm các loại bài đăng tùy chỉnh trong tiện ích bảng điều khiển quản trị "Ngay bây giờ"

Điều này sẽ bao gồm các loại bài đăng tùy chỉnh của bạn và số lượng bài đăng cho từng loại trong tiện ích bảng điều khiển "Ngay bây giờ".

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

Về đoạn trích cuối cùng cho câu trả lời này. Đây là một bổ sung tuyệt vời vì tôi đã thêm chúng theo cách thủ công cho từng loại bài đăng. Vấn đề duy nhất tôi có với điều này là nó thêm dữ liệu sau mục nhập "danh mục" và "thẻ" mặc định. Bạn có thể cập nhật câu trả lời của mình để di chuyển các "danh mục" hoặc "thẻ" mặc định xuống hoặc xóa chúng để có thể thêm chúng bằng tay không?
NetConstructor.com

@ NetConstructor.com Tôi không nghĩ tôi hiểu yêu cầu của bạn. Nếu tôi làm vậy, thì tôi nghĩ đó sẽ là một điều khó khăn hơn một chút và không thực sự có thời gian ngay bây giờ để tìm ra cách để làm điều đó.
jaredwilli

Bao gồm các loại bài đăng tùy chỉnh trong kết quả tìm kiếm - Tôi đoán, bây giờ bạn có thể làm điều này với exclude_from_searchparam của register_post_type...
Krzysiek Dróżdż

78

Xóa thông báo cập nhật cho tất cả người dùng ngoại trừ người dùng ADMIN

Đã thử nghiệm trên: Wordpress 3.0.1

Mã này sẽ đảm bảo rằng không có người dùng nào ngoài "quản trị viên" được thông báo bằng wordpress khi có bản cập nhật ..

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

Phiên bản đã thay đổi để chỉ hiển thị thông báo cập nhật cho người dùng quản trị viên (trái ngược với chỉ người dùng 'quản trị viên'):

// 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
Điều này là ít hơn nhiều so với lý tưởng. Nó sẽ chỉ hoạt động nếu đăng nhập của quản trị viên vẫn là 'quản trị viên' mặc định, điều này không phải vì lý do bảo mật. Thay vào đó, bạn nên kiểm tra một khả năng cụ thể mà bạn muốn mọi người phải xem tin nhắn.
jerclarke

1
Tức là nếu (! Current_user_can ('Manage_options')) {... add_filter ...} - Xin lỗi về nhận xét kép, tôi quên rằng nhấn enter gửi bình luận)
jerclarke

Đó là lý do tại sao tôi đã thêm nhận xét vào mã nơi bạn có thể thay đổi tên người dùng quản trị viên. Làm thế nào bạn sẽ cải thiện / viết lại nó?
NetConstructor.com

Cách tốt nhất là xóa $ user_login và get_cienuserinfo () toàn cầu và thay vào đó sử dụng current_user_can trong mệnh đề if của bạn. Đó chỉ là 1 dòng thay vì 3 và theo cách tiêu chuẩn. Bạn có thể kiểm tra khả năng cụ thể cần thiết để ACT trên các tin nhắn, trong trường hợp này là 'update_core' và 'update_plugins'.
jerclarke

2
vì vậy: if (! current_user_can ('update_plugins')) {/ * XÓA
BÀI VIẾT

72

Đang tải jQuery từ Google CDN

Đã thử nghiệm trên: 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' );
}
}

Xóa thông tin phiên bản WordPress để bảo mật

Đã thử nghiệm trên: Wordpress 3.0.1

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

Thêm Spam & Xóa Liên kết để Nhận xét về Giao diện Người dùng

Đã thử nghiệm trên: Wordpress 3.0.1

Điều này giúp quản lý bình luận dễ dàng hơn từ giao diện người dùng bằng cách thêm spam và xóa liên kết. **

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

Trì hoãn việc đăng công khai lên RSS Feed

Đã thử nghiệm trên: Wordpress 3.0.1

Cuối cùng, tôi muốn trì hoãn việc đăng lên các nguồn cấp dữ liệu RSS của mình trong vòng 10 - 15 phút vì tôi luôn tìm thấy ít nhất một vài lỗi trong văn bản của mình. Các mục đích sử dụng khác là trong trường hợp bạn muốn nội dung độc quyền cho trang web của bạn trong một ngày hoặc một tuần trước khi đưa nó ra cho người đọc RSS của bạn.

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

nguồn trên bài đăng của tôi: wpengineer.com/320/publish-the-feed-later với nhiều thông tin hơn
bueltge

1
Bạn cũng có thể xóa bộ lọc máy phát điện:remove_action('wp_head', 'wp_generator');
Gipetto

25
ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js hết hạn chỉ sau một giờ. Luôn sử dụng thông tin phiên bản đầy đủ như ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js - sẽ hết hạn sau một năm.
fuxia

5
Mã "Xóa thông tin phiên bản WordPress để bảo mật" thực sự không làm gì để tăng tính bảo mật cho trang web của bạn. Nó thậm chí không dừng tiếp xúc với phiên bản WP đang được sử dụng trên trang web của bạn.
Joseph Scott

1
Không đúng Joseph, nếu phiên bản WordPress của bạn bị lộ thì mọi người có thể thấy nếu bạn đang chạy phiên bản cũ hơn, do đó sẽ lộ lỗ hổng của bạn. Luôn luôn là một quyết định tốt để loại bỏ điều đó khỏi tất cả các cài đặt WordPress. Cá nhân, tôi thậm chí không biết tại sao họ lại đặt nó ở vị trí đầu tiên vì đây là vấn đề bảo mật.
Jeremy

58

Đặt số lần sửa đổi bài tối đa để tránh phình DB.

Đã thử nghiệm trên: Wordpress 3.0.1

Mặc định là vô hạn, điều này sẽ đặt nó chỉ nhớ 5 lần chỉnh sửa cuối cùng:

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

FWIW có rất nhiều ý tưởng tuyệt vời cho CONSTANTS có thể được đặt trên trang Codex Chỉnh sửa wp-config.php .


Điều này có thể được thiết lập trên cơ sở mỗi loại bài?
NetConstructor.com

Nhìn vào cách sử dụng của nó trong wp_save_post_Vvision () dường như không có cách nào để phân biệt dựa trên các loại bài đăng. Không có bộ lọc hoặc bất cứ thứ gì về giá trị, mặc dù có lẽ nên có.
jerclarke

cảm ơn Jeremy - Cho bất cứ ai khác, nếu bạn biết cách làm điều này xin vui lòng gửi nó ở đây.
NetConstructor.com

1
Cá nhân tôi thích 10. Tôi biết đó là đôi nhưng luôn luôn khi tôi cần một phiên bản nó luôn luôn lớn hơn sau đó 5
janw

56

Công cụ định hình Wordpress

Tôi muốn thêm các công cụ định hình trong một tệp riêng biệt, sau đó tôi bao gồm từ hàm.php khi cần:

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

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

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

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


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

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

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

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


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

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


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

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


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

function dump_trace() {
    $backtrace = debug_backtrace();
    foreach ( $backtrace as $trace )
        dump(
            'File/Line: ' . $trace['file'] . ', ' . $trace['line'],
            'Function / Class: ' . $trace['function'] . ', ' . $trace['class']
            );
} # dump_trace()
if ( $_GET['debug'] == 'http' )
    add_filter('http_request_args', 'dump_http', 0, 2);
?>

Có cách nào nhanh chóng để sửa đổi điều này để tập lệnh chỉ được gọi khi quản trị viên của bạn VÀ nối thêm nội dung nào đó vào URL để hiển thị thông tin gỡ lỗi không?
NetConstructor.com

1
Đó là cách nó được thực hiện trong chủ đề của tôi: semiologic.com/software/sem-reloaded - các /inc/debug.php được bao gồm bởi /functions.php hoặc /inc/init.php (không thể nhớ ra khỏi đỉnh của tôi cái đầu).
Denis de Bernardy

52

Làm sắc nét hình ảnh đã thay đổi kích thước (chỉ jpg)

Chức năng này làm sắc nét kích thước hình ảnh jpg. Một ví dụ về sự khác biệt: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 tốt hơn nhiều, cảm ơn rất nhiều! đã thử nghiệm trong 3,4-alpha
brasofilo

2
nếu các bạn muốn đây là plugin: wordpress.org/extend/plugins/sharpen-resized-images
Ünsal Korkmaz

chức năng này đi đâu
StevieD

@StevieD - như tiêu đề gợi ý, nó nằm bên trong Hàm.php, trong mẫu của bạn. Tôi sẽ cẩn thận, chức năng này đã gần 8 tuổi.
timofey.com

51

Xóa các hộp Meta Wordpress mặc định

Đã thử nghiệm trên: Wordpress 3.0.1

Mã này sẽ cho phép bạn loại bỏ các Hộp Meta cụ thể mà wordpress thêm theo mặc định vào màn hình Thêm / Chỉnh sửa bài đăng và Thêm / Chỉnh sửa trang mặc định.

// 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
Theo wordpress.stackexchange.com/questions/34030/ trộm Tôi sẽ không ẩn slugdiv theo cách này, nhưng sử dụng gist.github.com/1863830 này thay vào đó

@CorvanNoorloos Liên kết github của bạn bị hỏng.
dùng7003859

48

Xóa bộ lọc "Wordpress" sang bộ lọc "WordPress"

Đã thử nghiệm trên: Wordpress 3.0.1

Có một bộ lọc được thêm vào với phiên bản WordPress 3.0, tự động chuyển đổi tất cả các phiên bản của "Wordpress" (không viết hoa P) thành "WordPress" (có chữ P viết hoa) trong nội dung bài đăng, tiêu đề bài đăng và văn bản nhận xét. Một số người thấy điều này là xâm phạm, thỉnh thoảng tôi chỉ cần xử lý sai WordPress và thấy bộ lọc hơi khó chịu.

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

    remove_filter('comment_text', 'capital_P_dangit', 31 );
}

rất ít tìm thấy. Một trong những thứ chỉ cần loại bỏ một đoạn mã khác không cần thiết
NetConstructor.com

5
Trong WordPress 3.0.1, bộ lọc này được thêm ưu tiên 11 , vì vậy bạn cần thêm 11làm tham số thứ ba để xóa nó.
Jan Fabry

46

Tùy chỉnh Bảng điều khiển

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
   global $wp_meta_boxes;

Xóa các tiện ích bảng điều khiển này ...

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

Thêm một tiện ích tùy chỉnh có tên 'Trợ giúp và Hỗ trợ'

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

Đây là nội dung cho widget tùy chỉnh của bạn

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

44

Thêm trường hồ sơ người dùng tùy chỉnh

Đặt mã bên dưới vào tệp tin.php của bạn để thêm các trường hồ sơ người dùng tùy chỉnh. Chỉnh sửa hoặc thêm các dòng khi bạn thấy phù hợp.

Hãy nhớ không xóa dòng: return $ contactmethods; nếu không thì nó sẽ không hoạt động.

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

Để hiển thị các trường tùy chỉnh, bạn có thể sử dụng một trong hai phương pháp được liệt kê bên dưới.

Lựa chọn 1:

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

Tùy chọn 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

Tùy chỉnh thứ tự của menu quản trị

đã thử nghiệm trên: Wordpress 3.0.1

Mã này sẽ cho phép bạn sắp xếp lại thứ tự các yếu tố trong menu quản trị. Tất cả những gì bạn cần làm là nhấp vào một liên kết hiện có trong menu quản trị và sao chép mọi thứ trước / wp-admin / URL. Thứ tự dưới đây đại diện cho thứ tự menu quản trị mới sẽ có.

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

Có thực sự có một bộ lọc cốt lõi được đặt tên custom_menu_order? Tôi không thể tìm thấy một ...
kaiser


40

Chức năng thay đổi độ dài của Exerpt

Đã thử nghiệm trên: Wordpress 3.0.1

Theo mặc định, tất cả các đoạn trích được giới hạn ở mức 55 từ. Sử dụng mã bên dưới, bạn có thể ghi đè cài đặt mặc định này:

function new_excerpt_length($length) { 
    return 100;
}

add_filter('excerpt_length', 'new_excerpt_length');

Ví dụ này thay đổi độ dài đoạn trích thành 100 từ, nhưng bạn có thể sử dụng cùng một phương pháp để thay đổi nó thành bất kỳ giá trị nào.


@ user402 ... có giới hạn này bằng từ hoặc ký tự không? Bạn có thể đăng làm thế nào để làm cả hai?
NetConstructor.com

3
@ NetConstructor.com Chức năng này (và excerpt_lengthhook) giới hạn bởi các từ .
EAMann

Heh. Tôi đã thêm bộ lọc đó vào lõi. :)
Dougal Campbell

38

Thêm hình thu nhỏ trong Quản lý bài viết / Danh sách trang

Bạn có thể thêm phần này vào các chức năng của mình để hiển thị vào Quản lý / Chỉnh sửa bài đăng và Trang liệt kê một cột mới với phần xem trước hình thu nhỏ.

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

Làm thế nào để di chuyển cột sang bên trái?
Giàu

38

Xóa ping vào blog của riêng bạn

Đã thử nghiệm trên: 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' );

Làm thế nào thường xuyên và khi nào wordpress ping chính nó?
NetConstructor.com

Tôi thực sự có vấn đề đó khá thường xuyên. Nếu tôi tham chiếu một liên kết nội bộ đến một bài đăng khác trên blog WP của mình, tôi sẽ nhận được một trackback hoặc pingback (không nhớ cái nào) từ chính tôi. Phiền thật đấy.
Sahas Katta

Tương tự ở đây. Tôi có một blog tin tức / tạp chí và liên kết đến các bài viết khác khá thường xuyên.
Steven

35

Cho phép nén đầu ra GZIP

Thông thường máy chủ nên được thiết lập để thực hiện việc này một cách tự động, nhưng rất nhiều máy chủ được chia sẻ không làm điều này (có thể để tăng mức sử dụng băng thông của máy khách)

 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

Hiển thị truy vấn DB, thời gian sử dụng và tiêu thụ bộ nhớ

Đã thử nghiệm trên: 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} -->" ;
}

Sau đó, mã này bên dưới mã ở trên sẽ tự động chèn mã ở trên vào chân trang của trang web công cộng của bạn (đảm bảo chủ đề của bạn đang gọi wp_footer):

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

Có thể gọi là nhiều lần.


cho php <5.2 sử dụngmemory_get_usage()
onetrickpony

31

Unregister WP Mặc định Widgets

Đã thử nghiệm trên: 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);

Tôi đã sử dụng nó trên phiên bản 3.1.4. Nhưng các vật dụng vẫn còn đó. Có ai có ý tưởng?
dùng391

Vẫn hoạt động trên WP 4.5 :)
Tim Malone

30

Tự động trích xuất hình ảnh đầu tiên từ nội dung bài

Đã thử nghiệm trên: Wordpress 3.0.1

Mã này sẽ tự động trích xuất hình ảnh đầu tiên được liên kết với một bài đăng và cho phép bạn hiển thị / sử dụng nó bằng cách gọi hàm 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
Đẹp, nhưng get_the_image cũng làm rất tốt với điều này. wordpress.org/extend/plugins/get-the-image
artlung

đúng nhưng cách này hoạt động khác và khắc phục các sự cố khác nhau mà get_the_image không tính đến
NetConstructor.com

3
Nó làm gì khác với tập lệnh get_the_image?
matt

1
@matt - Trong wordpress có nhiều cách khác nhau để hình ảnh có thể được thêm vào bài viết và tôi nghĩ rằng tập lệnh get_the_image chỉ nhìn vào một trong những cách đó. Cái này kiểm tra xem có hình ảnh đặc trưng nào không và sử dụng hình ảnh đó trước nếu có, tiếp theo tôi nghĩ nó sẽ kiểm tra hình ảnh đầu tiên được thêm vào nội dung bài đăng và nếu không tìm thấy nó sẽ kiểm tra thư viện phương tiện cho hình ảnh với loại cao nhất thứ tự (ít nhất đó là cách tôi nhớ thứ tự đi).
NetConstructor.com

tôi đề xuất wordpress.org/extend/plugins/auto-post-thumbnail Tự động tạo Thumbnail Post (Thumbnail nổi bật) từ hình ảnh đầu tiên trong bài đăng hoặc bất kỳ loại bài đăng tùy chỉnh nào chỉ khi Post Thumbnail không được đặt
Ünsal Korkmaz

27

Xuất ra tệp mẫu chủ đề mà bài đăng / trang đang sử dụng trong tiêu đề

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

Rút ngắn đầu ra DIV mặc định nếu chủ đề của bạn đang sử dụng post_group.

nếu chủ đề của bạn đang sử dụng một cái gì đó như

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

Bạn có thể có các div dài điên rồ trong nguồn của mình có thể trông như thế này hoặc thậm chí lâu hơn:

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

Điều này thực sự có thể bắt đầu làm lộn xộn nguồn của bạn và dường như không cần thiết trong hầu hết các trường hợp, đi sâu 3-4 là đủ tốt.

Đối với ví dụ trên, chúng ta có thể cắt đầu ra như vậy:

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

điều này cắt đầu ra chỉ bao gồm 5 giá trị đầu tiên, vì vậy ví dụ trên trở thành:

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

Làm cho kho lưu trữ danh mục hiển thị tất cả các bài đăng, bất kể loại bài đăng: tốt cho các loại bài đăng tùy chỉnh

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

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

Xóa các mục bảng điều khiển không mong muốn

Điều này đã được đăng nhưng nó không có danh sách đầy đủ các mặt hàng. Đặc biệt là những "liên kết đến!" Khó chịu

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

Xóa trang "Đọc thêm" nhảy **

thay vào đó trở lại đầu trang. Bạn biết làm thế nào khi bạn nhấp vào "đọc thêm" nó sẽ nhảy đến vị trí trong trang có thể gây khó chịu, điều này làm cho nó chỉ tải trang bình thường, không nhảy!

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

Hạn chế các mục menu ADMIN dựa trên tên người dùng , thay thế tên người dùng bằng tên người dùng thực tế.

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

// thay vào đó, bạn có thể sử dụng if ($ current_user-> user_login! = 'admin'), có thể hữu ích hơn

Phong cách đám mây thẻ

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

Tham khảo đầy đủ các tùy chọn ở đây (có rất nhiều!) Http://codex.wordpress.org/Function_Reference/wp_tag_cloud

Thay đổi bộ đếm thời gian cập nhật Widget RSS mặc định

(mặc định là 6 hoặc 12 giờ tôi quên (1800 = 30 phút).

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

bạn có thể vui lòng chia từng câu này thành các câu trả lời riêng biệt trong vài tuần tới không. Tôi sẽ làm điều đó cho bạn nhưng không muốn làm cho nó có vẻ như tôi đang lấy tín dụng cho câu trả lời của bạn. Trong mọi trường hợp - tôi đang cố gắng để tổ chức này để người dùng có thể dễ dàng tìm thấy thông tin họ đang tìm kiếm. Cảm ơn trước
NetConstructor.com

Tôi chỉ sử dụng mã "Hạn chế các mục menu ADMIN dựa trên tên người dùng, thay thế tên người dùng bằng tên người dùng thực tế", điều này thật tuyệt nhưng bạn có thể cập nhật mã để hiển thị cách thực hiện điều này cho một "vai trò người dùng" cụ thể. Tôi nghĩ rằng điều này sẽ rất hữu ích!
NetConstructor.com

Xin lỗi NetConstructor Tôi vừa thấy bình luận của bạn. Đối với vai trò người dùng, tôi sẽ sử dụng "current_user_can". Tôi không có thời gian để kiểm tra nó nhưng khi tôi làm, tôi sẽ thêm nó.
Wyck

giá trị mặc định cho wp_feed_cache_transient_lifetime là 43200 (12 giờ)
brasofilo

26

Xóa thông báo cập nhật plugin CHỈ cho các 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
Đây không hẳn là một ý tưởng hay - một plugin không hoạt động vẫn có trong hệ thống tập tin và một plugin không an toàn vẫn có thể được sử dụng để hack trang web. Các plugin phải luôn được cập nhật.
Tim Malone

25

Xóa thông tin thừa và HTML trong <head>thẻ

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

Bật gỡ lỗi và ghi nhật ký để sử dụng trên các trang web trực tiếp

Đây là một đoạn mã tôi đã viết để sử dụng các hằng WP_DEBUG thường bị tắt theo mặc định. Vâng, tôi đã tạo một cách để không chỉ kích hoạt WP_DEBUG để bạn có thể sử dụng nó trên một trang web trực tiếp mà không có tác dụng phụ tiêu cực, nhưng tôi cũng đã sử dụng các hằng số gỡ lỗi khác để buộc lỗi được hiển thị và để tạo tệp nhật ký các lỗi và thông báo trong thư mục / wp-content.

Thả mã này vào tệp wp-config.php của bạn (SAU KHI BẠN TIẾT KIỆM BACKUP JUST IN CASE) và sau đó bạn có thể truyền các tham số? Debug = 1, 2 hoặc 3 ở cuối bất kỳ url nào trên trang web của bạn.

? debug = 1 = hiển thị tất cả các lỗi / thông báo? debug = 2 = buộc chúng phải được hiển thị? debug = 3 = tạo tệp debug.log của tất cả các lỗi trong thư mục / 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);
}

Tôi đi sâu vào chi tiết hơn về bài đăng của khách tôi đã viết cho Comluv nếu bạn quan tâm, tại đây: http://comluv.com/dev/enable-debugging-and-logging-for-live-site-usage/

Tôi vẫn đang làm việc để làm cho mật khẩu này được bảo vệ hoặc tốt hơn là bằng cách nào đó làm cho nó hoạt động trên if (current_user_can ('Manage_theme') và is_logged_in ().

Nhưng đó là nơi nó trở nên khó khăn hơn nhiều.


Chúng tôi sử dụng một cái gì đó tương tự để thiết lập chi tiết kết nối cơ sở dữ liệu trực tiếp, dàn dựng và dev.
Tom

20

Tự động thêm tiêu đề động vào trang công cộng

Đã thử nghiệm trên: Wordpress 3.0.1

Sử dụng mã dưới đây sẽ tự động tạo tiêu đề trang động dựa trên các trang / bài đăng được xem công khai.

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

Vai trò và khả năng mới - Chỉ chạy một lần!

Tôi giữ những tiện dụng này, đây là cách đúng đắn để làm chúng mà không cần plugin. Họ đặt một trường duy nhất (prefix_user_roles) trong cơ sở dữ liệu tùy chọn và bạn không cần một plugin để đặt chúng. Tham khảo trang Codex để biết danh sách những khả năng có sẵn và mô tả cho những gì họ làm. Bạn chỉ cần bỏ ghi chú một trong các khối này, tải bất kỳ trang nào và sau đó nhận xét chúng một lần nữa! Ở đây tôi đang tạo ra một vai trò có các khả năng tôi cần:

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

Đôi khi rất hữu ích để thêm / xóa khỏi vai trò hiện có thay vì xóa và thêm lại một vai trò. Một lần nữa, bạn chỉ cần bỏ ghi chú nó, tải lại một trang và sau đó bình luận lại. Điều này sẽ lưu trữ vai trò / khả năng đúng trong bảng tùy chọn. (Điều này cho phép bạn, nhà phát triển kiểm soát chúng và loại bỏ chi phí của các plugin cồng kềnh làm điều tương tự.) Ở đây tôi đang thay đổi vai trò tác giả để xóa các bài đăng đã xuất bản của họ (mặc định), nhưng cho phép họ có khả năng chỉnh sửa các bài đăng được xuất bản của họ (không thể có vai trò này theo mặc định) - sử dụng * add_cap * hoặc * remove_cap *.

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

Tôi giữ một bảng tính với lưới từ trang Codex cho các trang web sửa đổi theo cách này, vì vậy tôi có thể nhớ cách mọi thứ được đặt, mặc dù để lại mã nhận xét trong tệp tin.php của bạn sẽ hoạt động. Đừng để những ví dụ này không bị thiếu, hoặc nó sẽ ghi vào cơ sở dữ liệu với mỗi lần tải trang!


Các chức năng tôi đề cập ở trên ghi vào một trường trong cơ sở dữ liệu tùy chọn. Bình luận và không chú ý đến họ là cách để đi. Có các plugin cho vai trò người dùng, nhưng nếu bạn sử dụng các chức năng được đề cập ở trên, bạn không thể để các chức năng này chạy và bạn KHÔNG cần phải đặt chúng nhiều lần hoặc đặt chúng dựa trên nếu một người dùng cụ thể đang truy cập vào một cái gì đó. Nếu bạn muốn điều đó, hãy thiết lập người dùng đó với một vai trò cụ thể, duy nhất. Và tham khảo codex, mọi thứ tôi viết ở trên đều đúng 100% nếu bạn làm điều đó mà không cần plugin. Đối với gần như mọi trường hợp, bạn chỉ cần đặt vai trò người dùng một lần.
tomcat23

@ tomcat23: Để minh họa, tôi đã gói nó trong một hàm để chỉ thêm vai trò, khi nó không tồn tại. Một lưu ý khác: Tôi đoán việc đặt vai trò ở đâu đó trong hệ thống phân cấp vai trò sẽ dễ dàng hơn, với việc lấy các mũ từ một số vai trò được xây dựng và sau đó thêm / xóa các khả năng khỏi vai trò được xây dựng. Sẽ làm cho nó rõ ràng hơn và dễ nhớ hơn nếu mũ của nó được đặt ở đâu đó giữa ex. quản trị viên và biên tập viên. - Tôi hy vọng bạn không phiền khi tôi chỉnh sửa câu trả lời của bạn. Nếu bạn làm, xin vui lòng vai trò trở lại. :)
kaiser

1
@ tomcat23 - Nước dưới cầu vào thời điểm này. Tất cả những gì tôi nói là, tôi không quan tâm đến việc đổ lỗi, chỉ là để có được sự bình yên cho mọi người tiến về phía trước. :)
MikeSchinkel

2
@MikeSchinkel Vâng, bạn đã đúng. @kaiser Lời xin lỗi của tôi nếu tôi gây ra sự xúc phạm.
tomcat23

1
@MikeSchinkel: cảm ơn vì đã mang hòa bình trở lại. @ Tomcat23: Không, bạn đã không làm thế. Tôi có thể đối phó với những lời chỉ trích đó. Tôi cũng xin lỗi.
kaiser

19

Chân trang quản trị tùy chỉnh Wordpress

// tùy chỉnh văn bản chân trang quản trị
hàm custom_admin_footer () {
        echo 'thêm văn bản chân trang tùy chỉnh của bạn và html ở đây';
} 
add_filter ('admin_footer lòng', 'custom_admin_footer');

Tôi sử dụng điều này cho các trang web của khách hàng như một điểm tham chiếu đơn giản để liên hệ với tôi với tư cách là nhà phát triển.


19

Kích hoạt mã ngắn trong widget

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

18

Chức năng vô hiệu hóa nguồn cấp RSS

Đã thử nghiệm trên: Wordpress 3.0.1

Bạn có thể tắt nguồn cấp RSS Nếu bạn muốn duy trì trang web dựa trên Wordpress của mình ở dạng tĩnh.

Bạn có thể sử dụng chức năng này:

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


Cảm ơn Toscho! nguồn này cũng có sẵn bằng tiếng Anh wpengineer.com/287/disable-wordpress-feed
bueltge

16

Thay đổi thông báo "Howdy" thành "Chào mừng"

Với chức năng này, bạn có thể tùy chỉnh thông báo "Howdy" ở trên cùng bên phải của khu vực quản trị của bạn.
Hàm này sử dụng JQuery để thay đổi thông báo "Howdy" thành "Chào mừng".

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

Phiên bản PHP, sử dụng gettextbộ lọc:

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
Điều này đã không thể được chỉnh sửa về phía PHP để nó không nhận được kết quả đầu ra sao?
hakre

Chắc chắn nó hoạt động tốt ở các phiên bản 3.0+, nhưng tại sao không phải ở các phiên bản cũ hơn? Kiểm tra xem bất kỳ plugin nào bạn sử dụng có chịu trách nhiệm cho việc này không. Văn bản ở đây được thay thế bằng JQuery, có thể là một plugin JQuery?
Philip
Licensed under cc by-sa 3.0 with attribution required.