Найкраща колекція коду для файлу function.php [закрито]


332

Будь ласка, проголосуйте за запитання та будь-які відповіді, які вважаєтесь корисними, натиснувши стрілку Вгору в лівій частині питання чи відповіді.

Як і багато інших, хто зараз переглядає цю публікацію, я читав різні блоги, форуми та дискусійні групи, щоб вивчити та вдосконалити свої навички wordpress. Протягом останніх 12 місяців я був на місії замінити своє використання плагінів, додавши functions.phpнатомість код у мій файл. Хоча я повністю згоден з тим, що плагіни дуже корисні у багатьох ситуаціях, мій досвід показав, що в 90% випадків використання, хоча плагін може існувати, фактично його використання може створити непотрібні ускладнення та проблеми сумісності. Крім того, у великій кількості випадків такі плагіни додавали меню та інші адміністраторські елементи, які мені не потрібні чи потрібні.

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

Отже, ціль цієї публікації - моя спроба залучити вас, читача / адміністратора / розробника, поділитися зі мною та іншими тут будь-якими бітами коду, які вам здаються корисними та додали до function.phpфайлу вашої теми для розширення або покращення WordPress, не використовуючи підключати.

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

Я з нетерпінням чекаю всіх ваших відповідей і, звичайно, постійно додаватиму свої нові знахідки, коли я їх знайду.


13
Враховуючи, що перші 5 відповідей були ОП, і питання здається більш орієнтованим на збір масиву відповідей, а не на одну, остаточну відповідь, це має бути вікі спільноти.
EAMann

17
Усі відповіді, не пов'язані з темою, повинні бути видалені. Цей потік є хорошим прикладом для поганих методів кодування.
фуксія

17
Я думаю, що було б краще заохотити людей створити користувацький плагін функціональності, а не використовувати їхню тему function.php
Ian Dunn

3
@ NetConstructor.com Чиста кількість переглядів сторінок не є показником якості. Ми повинні заохочувати конкретні запитання конкретними відповідями та хорошими методами кодування. Ця нитка - навпаки.
fuxia

6
@ NetConstructor.com Обговоріть це на Meta, де люди можуть краще бачити ваші аргументи. :)
fuxia

Відповіді:


107

Увімкнути функцію прихованого адміністратора, що відображає ВСІ налаштування сайту

Тестовано на: Wordpress 3.1 RC3

Цей невеликий шматочок коду робить щось досить круте. Це додасть додаткову опцію до меню налаштувань із посиланням на "всі налаштування", яке покаже вам повний перелік усіх параметрів у вашій базі даних, пов’язаних із вашим веб-сайтом Wordpress. Код, наведений нижче, лише зробить це посилання видимим для адміністратора та приховає його для всіх інших користувачів.

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

Фантастичний для розвитку! Я часто використовую таблицю параметрів, щоб зберігати версії БД для своїх плагінів ... за допомогою phpMyAdmin для скидання на стару версію БД для тестування сценарію оновлення - це біль ... це зробить це набагато простіше !!!
EAMann

3
Ви також можете потрапити на ту саму сторінку з параметрами (під час входу в систему), перейшовши на Ваш сайт / wp-admin / options.php
j08691

89

Змініть посилання на логотип для входу та зображення 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;
}

79

Додайте до результатів пошуку власні типи публікацій.

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

Включіть власні типи публікацій у віджет адміністративної панелі адміністратора "прямо зараз"

Сюди ввійдуть ваші користувацькі типи публікацій та кількість постів для кожного типу у віджеті інформаційної панелі "Зараз".

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

Щодо останнього фрагмента цієї відповіді. Це чудове доповнення, оскільки я додавав їх вручну для кожного типу публікації. Єдине питання, що у мене є, це те, що він додає дані після запису "категорія" та "тег" за замовчуванням. Чи можете ви оновити свою відповідь, щоб перемістити типові "категорії" або "теги" вниз або видалити їх, щоб їх можна було додати вручну?
NetConstructor.com

@ NetConstructor.com Я не думаю, що я розумію ваш запит. Якщо я це зробити, то я думаю, що це було б трохи складніше, і зараз насправді не встигнути зрозуміти, як це зробити.
jaredwilli

Додайте до результатів пошуку власні типи публікацій - я думаю, тепер ви можете це зробити за допомогою exclude_from_searchпарам register_post_type...
Krzysiek Dróżdż

78

Видаліть повідомлення про оновлення для всіх користувачів, крім користувача ADMIN

Тестовано на: Wordpress 3.0.1

Цей код гарантує, що жодних інших користувачів, крім "адміністратора", 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;" ) );
   }

Змінена версія показує сповіщення про оновлення лише для користувачів адміністратора (на відміну від лише адміністратора користувача):

// 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
Це набагато менше, ніж ідеально. Він працюватиме лише в тому випадку, якщо логін адміністратора все ще є «адміністратором» за замовчуванням, якого не повинно бути з міркувань безпеки. Натомість слід перевірити наявність конкретних можливостей, які ви хочете, щоб люди мали бачити повідомлення.
jerclarke

1
Тобто, якщо (! Current_user_can ('management_options')) {... add_filter ...} - Вибачте за подвійний коментар, я забув, що натиснувши Enter, подає коментарі)
jerclarke

Ось чому я додав коментар до коду, де можна змінити ім’я користувача адміністратора. Як би ви вдосконалили / переписали його?
NetConstructor.com

Найкращий спосіб - видалити глобальний $ user_login та get_currentuserinfo (), а замість цього використати current_user_can у своєму пункті if. Це лише 1 рядок замість 3 і його стандартний спосіб. Ви можете перевірити конкретну можливість, яка потрібна для ACT у повідомленнях, у цьому випадку є "update_core" та "update_plugins".
jerclarke

2
так: якщо (! current_user_can ('update_plugins')) {/ * ВИДАЛИТИ ПОВІДОМЛЕННЯ * /}
jerclarke

72

Завантаження 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');

Додати спам та видалити посилання до коментарів на Front End

Тестовано на: 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');

джерело в моєму дописі: wpengineer.com/320/publish-the-feed-later з додатковою інформацією
bueltge

1
Ви також можете просто зняти фільтр генератора:remove_action('wp_head', 'wp_generator');
Gipetto

25
ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js закінчується лише через одну годину. Завжди використовуйте повну інформацію про версію, наприклад ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js - термін дії якої закінчується через рік.
фуксія

5
Код "Видалити інформацію про версію WordPress для безпеки" насправді нічого не робить для підвищення безпеки вашого сайту. Це навіть не зупиняє експозицію версії WP, яка використовується на вашому сайті.
Джозеф Скотт

1
Неправда Джозеф, якщо ваша версія WordPress піддається впливу, то люди можуть побачити, чи використовуєте ви старішу версію, тим самим виявляючи ваші вразливості. Це завжди добре рішення видалити це з усіх установок WordPress. Особисто я навіть не знаю, чому вони ставлять його там на перше місце, оскільки це питання безпеки.
Джеремі

58

Встановіть максимальну кількість змін після публікації, щоб уникнути роздуття БД.

Тестовано на: 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 .


Чи можна це встановити на основі типу посади?
NetConstructor.com

З огляду на його використання в wp_save_post_revision (), схоже, не існує способу розрізнити на основі типів публікацій. Немає жодного фільтра або нічого за значенням, хоча, мабуть, має бути.
jerclarke

дякую Джеремі - Кому-небудь іншому, якщо ви знаєте, як це зробити, будь ласка, опублікуйте це тут.
NetConstructor.com

1
особисто я вважаю за краще 10. Я знаю, що це подвійне, але завжди, коли мені потрібна ревізія, вона завжди старша за 5
січня

56

Інструменти профілювання Wordpress

Мені подобається додавати інструменти профілювання в окремий файл, який потім включатиму з функції function.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);
?>

чи є швидкий спосіб змінити це так, щоб скрипт викликався лише тоді, коли ваш адміністратор І додав щось до URL-адреси, щоб відобразити інформацію про налагодження?
NetConstructor.com

1
Ось як це робиться в моїй темі: semiologic.com/software/sem-reloaded - /inc/debug.php включений /functions.php або /inc/init.php (не можу згадати верхню частину моєї голова).
Дені де Бернарді,

52

Зменшення розміру зображення (лише 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);

набагато краще jpegs, дякую купу! перевірено на 3.4-альфа
brasofilo

2
якщо ви, хлопці, бажаєте цього як плагін: wordpress.org/extend/plugins/sharpen-resized-images
Ünsal Korkmaz

куди йде ця функція?
StevieD

@StevieD - як підказує заголовок, він знаходиться всередині funk.php, у вашому шаблоні. Я був би обережний, хоча цій функції майже 8 років.
timofey.com

51

Видаліть метаполе Wordpress за замовчуванням

Тестовано на: Wordpress 3.0.1

Цей код дозволить вам видалити конкретні метаполе, які Wordpress додає за замовчуванням до екранів "Додати / редагувати повідомлення" та "Додати / редагувати сторінку" за замовчуванням.

// 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
Відповідно до цього wordpress.stackexchange.com/questions/34030/… я б не приховував слугдів таким чином, але використовував замість цього gist.github.com/1863830

@CorvanNoorloos Ваша посилання на github розірвана.
user7003859

48

Видаліть "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 );
}

чудова маленька знахідка. Один із тих речей, який просто видаляє ще один фрагмент коду, який не потрібен
NetConstructor.com

5
У WordPress 3.0.1 цей фільтр додається з пріоритетом 11 , тому 11для його видалення потрібно додати як третій параметр.
Ян Фабрі

46

Налаштуйте панель приладів

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

44

Додайте спеціальні поля профілю користувача

Розмістіть код нижче у файлі function.php, щоб додати спеціальні поля профілю користувача. Відредагуйте або додайте рядки, як вважаєте за потрібне.

Пам’ятайте, що не видаляти рядок: повернути $ 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>

41

Налаштуйте порядок меню адміністратора

тестується на: 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');

Чи дійсно є основний фільтр з назвою custom_menu_order? Я не зміг знайти її ...
kaiser


40

Функція для зміни довжини Exerpt

Тестовано на: Wordpress 3.0.1

За замовчуванням усі уривки обмежуються 55 словами. Використовуючи код нижче, ви можете змінити ці параметри за замовчуванням:

function new_excerpt_length($length) { 
    return 100;
}

add_filter('excerpt_length', 'new_excerpt_length');

Цей приклад змінює довжину уривку до 100 слів, але ви можете використовувати той самий метод, щоб змінити його на будь-яке значення.


@ user402 ... це шапка за словами чи символами? Чи можете ви опублікувати, як зробити обидва?
NetConstructor.com

3
@ NetConstructor.com Ця функція (і excerpt_lengthгачок) обмежує слова .
EAMann

Хе. Я отримав цей фільтр до ядра. :)
Dougal Campbell

38

Додайте мініатюри до керування списками публікацій / сторінок

Ви можете додати це до своїх функцій, щоб відобразити до керування / редагуванням публікації та списку сторінок новий стовпець із попереднім переглядом мініатюр.

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

Як перемістити стовпчик в крайній лівий бік?
Багатий

38

Видаліть пінг-файли у своєму власному блозі

Тестовано на: Wordpress 3.0.1

//remove pings to self
function no_self_ping( &$links ) {
    $home = get_option( 'home' );
    foreach ( $links as $l => $link )
        if ( 0 === strpos( $link, $home ) )
            unset($links[$l]);
}
add_action( 'pre_ping', 'no_self_ping' );

як часто і коли Wordpress пінг себе?
NetConstructor.com

Насправді у мене таке питання виникає досить часто. Якщо я посилаю внутрішнє посилання на іншу публікацію в своєму WP-блозі, я отримую трекбек або pingback (не пам'ятаю, який) від себе. Це дратує.
Сахас Катта

Те ж саме. У мене є блог новин / журналів і посилання на інші статті досить часто.
Стівен

35

Увімкнути стиснення виходу GZIP

Зазвичай сервер повинен бути налаштований для цього автоматично, але багато спільних хостів цього не роблять (можливо, для збільшення використання пропускної здатності клієнта)

 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

Відображення запитів БД, витраченого часу та витрат пам'яті

Тестовано на: 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 );

Можна викликати кілька разів.


для php <5.2 використанняmemory_get_usage()
onetrickpony

31

Скасуйте віджети 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);

Я використовував його у версії 3.1.4. Але віджети все ще є. Хтось має ідею?
користувач391

Досі працює на WP 4.5 :)
Тім Малоун

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

6
Приємно, але get_the_image дуже добре справляється і з цим. wordpress.org/extend/plugins/get-the-image
artlung

правильно, але це працює по-іншому і виправляє різні проблеми, які get_the_image не враховує
NetConstructor.com

3
Що це робить інакше, ніж сценарій get_the_image?
мат

1
@matt - У wordpress є різні способи додавання зображень до публікацій, і я думаю, що сценарій get_the_image просто дивиться на один із них. Це перевіряє, чи є зображене зображення та використовує це перше, якщо воно доступне, наступне, я думаю, він перевіряє, чи є перше зображення, додане до вмісту публікації, і якщо такого не знайдено, він перевіряє медіа-галерею на зображення з найвищим сортом. замовлення (принаймні так я пам’ятаю, як виконується замовлення).
NetConstructor.com

Я пропоную wordpress.org/extend/plugins/auto-post-thumbnail Автоматично генерувати мініатюру повідомлення (Featured Thumbnail) з першого зображення в публікації або будь-якого спеціального типу повідомлення, лише якщо не встановлено мініатюру повідомлення
Ünsal Korkmaz

27

Виведіть, який шаблон шаблону теми використовується в заголовку

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

// також ви можете використовувати, якщо ($ 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;') );

Ви можете, будь-ласка, розділити кожну з них на окремі відповіді протягом найближчих кількох тижнів. Я збирався зробити це за вас, але не хотів, щоб здавалося, що я беру на себе відповідальність за ваші відповіді. У будь-якому випадку - я намагаюся зберегти це організовано, щоб користувачі могли легко знайти інформацію, яку шукають. Заздалегідь
дякую

Я просто використовував код "Обмежити пункти меню ADMIN на основі імені користувача, замінити ім'я користувача на фактичне ім'я користувача", що чудово, але ви можете оновити код, щоб також показати, як це можна зробити для конкретної "ролі користувача". Я думаю, це було б дуже корисно!
NetConstructor.com

Вибачте NetConstructor. Щойно я побачив ваш коментар. Для ролі користувача я використовував би "current_user_can". У мене немає часу перевірити його, але коли я це додам, я додам його.
Вік

значення за замовчуванням для wp_feed_cache_transient_lifetime - 43200 (12 годин)
brasofilo

26

Видаліть повідомлення про оновлення плагінів ТІЛЬКИ для неактивних плагінів

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
Це не обов'язково є гарною ідеєю - неактивний плагін все ще присутній у файловій системі, а незахищений ще може бути використаний для злому сайту. Плагіни повинні постійно оновлюватися.
Тім Малоун

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

23

Увімкніть налагодження помилок та журнал, щоб використовувати їх на веб-сайтах

Це фрагмент коду, який я написав, щоб використовувати константи WP_DEBUG, які зазвичай відключені за замовчуванням. Ну, я створив спосіб не тільки включити WP_DEBUG, щоб ви могли використовувати його на веб-сайті, що не має негативних побічних ефектів, але я також використав інші константи налагодження для примусового відображення помилок та створення файлу журналу помилки та повідомлення в каталозі / wp-content.

Занесіть цей код у файл wp-config.php (ПІСЛЯ ВАС ЗБЕРІГАТИ РЕЗЕРВУ В СПОЛУЧЕННІ), і тоді ви зможете передати параметри? Debug = 1, 2 або 3 наприкінці будь-якого URL-адреси вашого сайту.

? debug = 1 = показує всі помилки / повідомлення? debug = 2 = примушує їх відображати? debug = 3 = створює файл debug.log з усіх помилок у / wp-content dir.

/**
* 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-for-live-site-usage/

Я все ще працюю над тим, щоб зробити це захищеним паролем, або бажано якось змусити його працювати, якщо (current_user_can ('управляти_теми') та is_logged_in ().

Але ось це стає набагато складніше.


Ми використовуємо щось подібне для налаштування даних у прямому ефірі, інсценування та підключення бази даних розробників.
Том,

20

Автоматично додавати динамічні заголовки на загальнодоступні сторінки

Тестовано на: 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);
}
}

20

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

Я тримаю їх під рукою, це правильний спосіб зробити їх без плагіна. Вони встановлюють єдине поле (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 для сайтів, які змінюють цей спосіб, тому я можу запам’ятати, як все встановлено, хоча залишити коментований код у вашому файлі function.php буде працювати. Не залишайте цих прикладів без коментарів, інакше це запишеться в базу даних із кожним завантаженням сторінки!


Функції, про які я згадував вище, записують у поле в базу даних параметрів. Коментувати та коментувати їх - це шлях. Існують плагіни для ролей користувача, але якщо ви використовуєте функції, згадані вище, ви не можете залишати ці функції запущеними, і НЕ потрібно встановлювати їх більше одного разу або встановлювати їх на основі, якщо певний користувач щось звертається. Якщо ви цього хочете, налаштуйте цього користувача на конкретну, унікальну роль. І зверніться до кодексу, все, що я пишу вище, на 100% правильно, якщо ви робите це без плагіна. Майже в кожному випадку вам потрібно встановити ролі користувача лише один раз.
tomcat23

@ tomcat23: Для ілюстрації я завернув її у функцію для додавання ролі лише тоді, коли її ще немає. Ще одна примітка: я думаю, було б легше розмістити роль десь в ієрархії ролей, витягнувши шапки з деяких вбудованих ролей, а потім додати / видалити можливості з вбудованої ролі. Зробило б це більш зрозумілим і легшим запам'ятовувати, якщо шапки розміщуються десь між колишніми. адміністратор та редактор. - Сподіваюся, ви не заперечуєте, що я відредагував вашу відповідь. Якщо ви це зробите, pls відіграйте її назад. :)
кайзер

1
@ tomcat23 - Вода під мостом у цій точці. Все, що я говорю, - мені нецікаво ставити вину, просто мати мир для всіх, хто рухається вперед. :)
MikeSchinkel

2
@MikeSchinkel Так, ви праві. @kaiser Мої вибачення, якщо я заподіяв вам образ.
tomcat23

1
@MikeSchinkel: дякую за повернення миру. @ Tomcat23: Ні, ти цього не зробив. Я можу мати справу з такою критикою. Мої вибачення теж.
кайзер

19

Wordpress Custom Admin Footer

// налаштувати текст нижнього колонтитула адміністратора
функція custom_admin_footer () {
        echo "додати тут свій власний текст колонтитула та html";
} 
add_filter ('admin_footer_text', 'custom_admin_footer');

Я використовую це для клієнтських сайтів як просту точку відліку, щоб зв'язатися зі мною як із розробником.


19

Увімкніть короткі коди у віджетах

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

18

Функція відключення 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);

Джерело: bueltge.de/wordpress-feeds-deaktivieren/794 (Frank Bueltge)
fuxia

Дякую Тошо! джерело також доступне англійською мовою wpengineer.com/287/disable-wordpress-feed
bueltge

16

Змініть повідомлення "Howdy" на "Welcome"

За допомогою цієї функції ви можете налаштувати повідомлення "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;
}

3
Чи не можна це вже редагувати на стороні PHP, щоб він взагалі не отримав вихід?
хакре

Тут добре працює в 3.0+ версіях, але чому б не в старих версіях? Перевірте, чи не відповідає будь-який інший плагін, який ви використовуєте. Текст тут замінено на JQuery, можливо, плагін JQuery?
Філіп
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.