Лучшая коллекция кода для вашего файла functions.php [закрыто]

Прошу проголосовать за вопрос и любые ответы, которые вы найдете полезными, нажав на стрелку вверх в левой части вопроса или ответа.

Как и многие другие, которые сейчас просматривают этот пост, я читаю различные блоги, форумы и дискуссионные группы, чтобы узнать и улучшить свои навыки в Wordpress. За последние 12 месяцев я был на миссии, чтобы заменить мое использование плагинов, добавив код в мой файл functions.php. Хотя я полностью согласен с тем, что плагины очень полезны во многих ситуациях, мой опыт показал, что в 90% случаев использования, хотя плагин может существовать, на самом деле его использование может создать ненужные сложности и проблемы совместимости. Кроме того, во многих случаях такие плагины добавили меню и другие элементы администрирования, которые мне не нужны или не нужны.

Чаще всего я обнаружил, что, проанализировав код плагинов, я смог вырезать фрагмент кода, который мне нужен, и записать его в свой functions.php. Это обеспечило мне нужную мне функциональность без необходимости включать ненужные элементы.

Итак, цель этого сообщения - это моя попытка привлечь вас, читателя /администратора /разработчика, поделиться со мной и другими здесь любыми кодовыми битами, которые вы найдете полезными, и добавили в свой код function.php для расширения или улучшения WordPress без использования плагина.

Когда вы отправляете ответ здесь, пожалуйста, любезно передайте каждому фрагменту кода заголовок, сообщите нам, с какой версией Wordpress вы знаете его совместимость, включите любое описание, которое лучше всего описывает его функцию, и (если применимо) включают ссылку к исходному плагину или источнику, в котором вы нашли информацию.

Я с нетерпением жду всех ваших ответов и, конечно же, буду постоянно добавлять свои собственные новые находки, когда найду их.

312 голосов | спросил 15 revs, 4 users 70%
NetConstructor.c
1 Jam1000000amThu, 01 Jan 1970 03:00:00 +030070 1970, 03:00:00

30 ответов


101

Включить скрытую функцию администратора, отображающую ВСЕ настройки сайта

Протестировано: Wordpress 3.1 RC3

Этот маленький кусок кода делает что-то довольно круто. Он добавит дополнительную опцию в меню настроек со ссылкой на «все настройки», которая покажет вам полный список всех настроек, которые у вас есть в вашей базе данных, связанные с вашим сайтом WordPress. В приведенном ниже коде будет отображаться только эта ссылка для пользователя admin и скрыть ее для всех других пользователей.

// 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');
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
85

Изменить логотип входа и amp; Ссылка URL изображения

Протестировано: WordPress 3.0.1

Этот код позволит вам легко изменить логотип страницы входа в WordPress, а также ссылку href и текст заголовка этого логотипа.

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

РЕДАКТИРОВАТЬ: . Если вы хотите использовать логотип сайта для замены логотипа входа в систему, вы можете использовать следующее, чтобы динамически извлекать эту информацию (проверено на 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;
}
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
74

Включить пользовательские типы сообщений в результаты поиска.

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

Добавьте свои собственные типы сообщений на ваш основной RSS-канал по умолчанию.

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

Включить персонализированные типы сообщений в виджета панели управления «Right Now»

Это будет включать ваши пользовательские типы сообщений и количество сообщений для каждого типа в виджетах панели «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' );
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
73

Удалить уведомление об обновлении для всех пользователей, кроме пользователя ADMIN

Протестировано: Wordpress 3.0.1

Этот код гарантирует, что никакие пользователи, кроме «admin», не будут уведомлены Wordpress, когда будут доступны обновления.

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

Измененная версия только для уведомлений об обновлении для пользователей admin (в отличие от пользователя «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;" ) );
       }
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
68

Загрузка jQuery из CDN Google

Протестировано: 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' );
}
}

Удалить информацию о версии WordPress для безопасности

Протестировано: Wordpress 3.0.1

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

Добавить спам & Удалить ссылки на комментарии на лицевой стороне

Протестировано: Wordpress 3.0.1

Это упрощает управление комментариями из внешнего интерфейса путем добавления спама и удаления ссылок. **

// spam & delete links for all versions of wordpress
function delete_comment_link($id) {
    if (current_user_can('edit_post')) {
        echo '| <a href="'.get_bloginfo('wpurl').'/wp-admin/comment.php?action=cdc&c='.$id.'">del</a> ';
        echo '| <a href="'.get_bloginfo('wpurl').'/wp-admin/comment.php?action=cdc&dt=spam&c='.$id.'">spam</a>';
    }
}

Задержка публикации общего доступа к RSS-каналу

Протестировано: Wordpress 3.0.1

Наконец, мне нравится откладывать отправку в свои RSS-каналы в течение 10-15 минут, потому что в моем тексте я всегда обнаруживаю по крайней мере пару ошибок. Другие виды использования - в случае, если вы хотите, чтобы контент был эксклюзивным для вашего сайта в течение дня или недели, прежде чем выталкивать его читателям RSS.

// delay feed update
function publish_later_on_feed($where) {
    global $wpdb;

    if (is_feed()) {
        // timestamp in WP-format
        $now = gmdate('Y-m-d H:i:s');

        // value for wait; + device
        $wait = '10'; // integer

        // http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timestampdiff
        $device = 'MINUTE'; // MINUTE, HOUR, DAY, WEEK, MONTH, YEAR

        // add SQL-sytax to default $where
        $where .= " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$now') > $wait ";
    }
    return $where;
}
add_filter('posts_where', 'publish_later_on_feed');
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
54

Инструменты профайла Wordpress

Мне нравится добавлять инструменты для профилирования в отдельный файл, который я затем включаю из functions.php при необходимости:

<?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);
?>
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
52

Задайте максимальное количество пост-ревизий, чтобы избежать раздувания DB.

Протестировано: Wordpress 3.0.1

По умолчанию это бесконечно, это заставит его запомнить только последние 5 изменений:

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

FWIW есть тонна замечательных идей для CONSTANTS, которые можно установить на странице Codex Редактирование wp-config.php .

ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
48

Sharpen Resized Images (только jpg)

Эта функция повышает резкость изображений jpg. Пример разницы: 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);
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
47

Удалить метапоны Wordpress по умолчанию

Протестировано: Wordpress 3.0.1

Этот код позволит вам удалить определенные мета-поля, которые Wordpress добавляет по умолчанию к окнам Add /Edit Post и Add /Edit Страница по умолчанию.

// 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');
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
44

Удалите «Wordpress» в фильтр «WordPress»

Протестировано: Wordpress 3.0.1

Был добавлен фильтр с WordPress версии 3.0, который автоматически преобразует все экземпляры «Wordpress» (без капитала P) в «WordPress» (с капиталом P) в пост-контент, пост-заголовки и текст комментария. Некоторые люди считают это интрузивным, мне просто нужно время от времени ошибаться в WordPress и обнаружил, что фильтр несколько раздражает.

// 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 );
}
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
41

Настроить панель управления

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
   global $wp_meta_boxes;

Удалите эти виджеты панели управления ...

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

Добавьте собственный виджет под названием «Справка и поддержка»

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

Это содержимое вашего пользовательского виджета

 function custom_dashboard_help() {
    echo '<p>Lorum ipsum delor sit amet et nunc</p>';
}
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
41

Добавить поля пользовательского профиля пользователя

Поместите код ниже в файл functions.php, чтобы добавить пользовательские поля профиля пользователя. Редактируйте или добавьте строки по своему усмотрению.

Не забудьте удалить строку: return $ contactmethods; иначе это не сработает.

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

Чтобы отобразить пользовательские поля, вы можете использовать один из двух методов, перечисленных ниже.

Вариант 1:

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

Вариант 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>
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
38

Настроить порядок меню администратора

проверено на: Wordpress 3.0.1

Этот код позволит вам реорганизовать порядок элементов в меню администратора. Все, что вам нужно сделать, это нажать на существующую ссылку в меню администратора и скопировать все до /wp-admin /URL. Ниже приведен порядок, который будет иметь новое меню администратора.

// 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');
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
37

Добавить миниатюры в Управление сообщениями /Список страниц

Вы можете добавить это в свои функции, чтобы отобразить на странице «Управление /Редактировать сообщение и страницы» новый столбец с предварительным просмотром миниатюр.

/****** 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 );
}
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
37

Функция для изменения длины Exerpt

Протестировано: Wordpress 3.0.1

По умолчанию все выдержки ограничены 55 словами. Используя приведенный ниже код, вы можете переопределить эти настройки по умолчанию:

function new_excerpt_length($length) { 
    return 100;
}

add_filter('excerpt_length', 'new_excerpt_length');

Этот пример изменяет длину выдержки до 100 слов, но вы можете использовать тот же метод, чтобы изменить его на любое значение.

ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
37

Удалите пинг в свой собственный блог

Протестировано: 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' );
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
33

Включить сжатие вывода GZIP

Обычно сервер должен быть настроен для этого автоматически, но многие общие хосты t сделать это (вероятно, для увеличения использования пропускной способности клиента)

 if(extension_loaded("zlib") && (ini_get("output_handler") != "ob_gzhandler"))
   add_action('wp', create_function('', '@ob_end_clean();@ini_set("zlib.output_compression", 1);'));
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
31

Отображение запросов БД, времени и потребления памяти

Протестировано: 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} -->" ;
}

Затем этот код ниже приведенного выше кода, который автоматически добавит код выше в нижний колонтитул вашего общедоступного веб-сайта (убедитесь, что ваша тема вызывает wp_footer):

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

Можно вызвать несколько раз.

ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
31

Отменить регистрацию по умолчанию Widgets WP

Протестировано: 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);
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
30

Автоматическое извлечение первого изображения из опубликованного содержимого

Протестировано: Wordpress 3.0.1

Этот код автоматически извлечет первое изображение, связанное с сообщением, и позволит вам отображать /использовать его, вызывая функцию 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;
}
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
26

Вывести файл шаблона темы, который post /page использует в заголовке

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

Сократите вывод DIV по умолчанию, если ваша тема использует post_class.

если ваша тема использует что-то вроде

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

У вас могут быть сумасшедшие длинные div в вашем источнике, которые могут выглядеть так или даже дольше:

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

Это может действительно начать загромождать ваш источник и в большинстве случаев казаться излишним, и 3-4 уровня достаточно хороши.

В верхнем примере мы можем нарезать вывод следующим образом:

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

это разрезает вывод только для включения первых 5 значений, поэтому приведенный выше пример будет выглядеть следующим образом:

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

Сделать в архивах категорий все сообщения, независимо от типа сообщения: хорошо для пользовательских типов сообщений

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

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

Удалить ненужные элементы панели

Это уже было опубликовано, но у него не было полного списка элементов. Особенно раздражающие «входящие ссылки!»

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

Удалите «Читать дальше» переходы страницы **

вместо этого вернитесь в начало страницы. Вы знаете, как, когда вы нажмите «подробнее», он будет прыгать на место на странице, что может раздражать, это заставляет его просто загружать страницу, не прыгая!

function remove_more_jump_link($link) { 
$offset = strpos($link, '#more-');
if ($offset) {
$end = strpos($link, '"',$offset);
}
if ($end) {
$link = substr_replace($link, '', $offset, $end-$offset);
}
return $link;
}
add_filter('the_content_more_link', 'remove_more_jump_link');

Ограничить пункты меню ADMIN на основе имени пользователя , заменить имя пользователя на фактическое имя пользователя.

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

//альтернативно вы можете использовать if ($ current_user-> user_login! = 'admin') вместо этого, вероятно, более полезно

Стиль облака тегов

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

Полное описание вариантов здесь (таммного!) http://codex.wordpress.org/Function_Reference/wp_tag_cloud

Изменить по умолчанию RSS Таймер обновления виджетов

(по умолчанию 6 или 12 часов я забыл (1800 = 30 минут).

add_filter( 'wp_feed_cache_transient_lifetime', create_function('$fixrss', 'return 1800;') );
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
25

Удалить уведомление об обновлении плагина ТОЛЬКО для НЕАКТИВНЫХ плагинов

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
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
25

Удалите лишнюю информацию и HTML в теге <head>

// 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'
    ) );
}
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
22

Включить отладку и протоколирование ошибок для использования на сайтах Live

Это часть кода, который я написал, чтобы использовать константы WP_DEBUG, которые по умолчанию отключены. Я создал способ не только включить WP_DEBUG, чтобы вы могли использовать его на реальном сайте без каких-либо отрицательных побочных эффектов, но я также использовал другие константы отладки для форсирования ошибок, которые нужно отобразить, и для создания файла журнала ошибки и уведомления в каталоге /wp-content.

Отбросьте этот код в файле wp-config.php (ПОСЛЕ СОХРАНЕНИЯ РЕЗЕРВИРОВАНИЯ ТОЛЬКО В СЛУЧАЕ), а затем вы можете передать параметры debug = 1, 2 или 3 в конце любого URL-адреса вашего сайта.

? debug = 1 = показывает все ошибки /уведомления ? debug = 2 = заставляет их отображать ? debug = 3 = создает файл debug.log всех ошибок в каталоге /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);
}

Я подробно расскажу о гостевой почте, которую я написал для Comluv, если вам интересно, здесь: http://comluv.com/dev/enable-debugging-and-logging -для-живой сайт-использования /

Я все еще работаю над тем, чтобы сделать это либо защищенным паролем, либо предпочтительнее каким-то образом заставить его работать, если (current_user_can ('manage_themes') и is_logged_in ().

Но здесь все становится намного сложнее.

ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
20

Новые роли и возможности - запускать только один раз!

Я сохраняю это удобно, это right способ сделать это без плагина. Они устанавливают одно поле (prefix_user_roles) в базе данных опций, и вам не нужен плагин для их установки. Обратитесь на страницу Codex для списка доступных возможностей и описаний того, что они делают. Вы нужно только раскомментировать один из этих блоков, загрузить любую страницу, а затем прокомментировать их снова! Здесь я создаю роль, которая имеет необходимые мне возможности:

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

Иногда бывает удобно добавлять /удалять из существующей роли, а не удалять и повторно добавлять ее. Опять же, вам нужно только расколоть его, перезагрузить страницу и затем прокомментировать ее снова. Это будет правильно сохранять роль /возможность в таблице опций. (Это позволяет разработчику контролировать их и удалять накладные расходы на объемные плагины, которые делают то же самое.) Здесь я меняю роль автора, чтобы удалить опубликованные сообщения (по умолчанию), но позволяя им редактировать их опубликованные сообщения (что невозможно для этой роли по умолчанию) - используя * add_cap * или * remove_cap *.

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

Я держу таблицу с сеткой со страницы Codex для сайтов, которые меняют этот способ, поэтому я могу помнить, как все задано, хотя оставить код с комментариями в файле functions.php будет работать. Не оставляйте эти примеры без комментирования или он будет записывать в базу данных при каждой загрузке страницы!

ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
19

Автоматическое добавление динамических заголовков в общедоступные страницы

Протестировано: Wordpress 3.0.1

Используя приведенный ниже код, вы автоматически создадите динамические названия страниц, основываясь на общедоступных страницах /сообщениях.

/* 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);
}
}
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
18

Верхний нижний колонтитул Wordpress

//настроить текст нижнего колонтитула администратора
function custom_admin_footer () {
        echo 'добавить свой пользовательский текст нижнего колонтитула и html здесь';
}
add_filter ('admin_footer_text', 'custom_admin_footer');

Я использую это для клиентских сайтов в качестве простой ссылки, чтобы связаться со мной как dev.

ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
18

Включение коротких кодов в виджетах

// shortcode in widgets
if ( !is_admin() ){
    add_filter('widget_text', 'do_shortcode', 11);
}
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
17

Функция для отключения RSS-каналов

Протестировано: Wordpress 3.0.1

Вы можете отключить RSS-каналы. Если вы хотите, чтобы ваш веб-сайт на Wordpress был статическим.

Вы можете использовать эту функцию:

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);
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43
14

Измените сообщение «Howdy» на «Добро пожаловать»

С помощью этой функции вы можете настроить сообщение «Howdy» в правом верхнем углу области администратора.
Эта функция использует JQuery для изменения сообщения «Howdy» на «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;
}

версия PHP, используя gettext фильтр:

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;
}
ответил m4olivei 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 25 Sep 2013 20:03:43 +0400 2013, 20:03:43

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132