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

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

В то время как я полностью согласен, что плагины очень полезны во многих ситуациях, мой опыт доказал, что в 90% случаев использования, хотя плагин мог бы существовать, на самом деле используя его, мог создать ненужные сложности и проблемы совместимости. Дополнительно в большом количестве случаев такие плагины добавили меню и другие администраторские элементы, которые я не хочу или нуждаюсь.

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

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

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

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

Голосуйте по вопросу и любым ответам, которые Вы находите полезными путем нажатия на стрелку вверх на левой стороне вопроса или ответа.

333
05.02.2020, 00:50
108 ответов

Включите Скрытую Функцию администрирования, отображающую Все Настройки Сайта

Протестированный на: 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');
108
19.02.2020, 21:54
  • 1
    , Фантастический для разработки! Я использую таблицу опций часто для хранения версий DB для моих плагинов... с помощью phpMyAdmin для сброса к старой версии DB для тестирования сценария обновления, боль... это сделает ее настолько легче!!! –  EAMann 15.09.2010, 19:03
  • 2
    Можно также добраться до той же страницы параметров (при входе в систему) путем движения в yoursite/wp-admin/options.php –  j08691 09.10.2015, 22:55

Новые Роли и Возможности - Только выполненный однажды!

Я сохраняю их удобными, это - правильный способ сделать их без плагина. Они устанавливают единственное поле (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 файле будет работать к. Не оставляйте эти примеры непрокомментированными, или это запишет в базу данных с каждой загрузкой страницы!

21
19.02.2020, 21:54
  • 1
    Функции, которые я упоминаю выше, пишут в поле в базе данных опций. Комментарий и некомментарий их являются способом пойти. Существуют плагины для пользовательских ролей, но если Вы используете функции, упоминают выше, Вы не можете оставить эти функции выполнением, и Вы не должны установить их несколько раз или установить их на основе того, если определенный пользователь получает доступ к чему-то. Если Вы хотите это, настраиваете того пользователя с определенной, уникальной ролью. И обратитесь к кодексу, все, что я пишу выше, на 100% корректно, если Вы делаете это без плагина. Почти для каждого случая только необходимо установить пользовательские роли однажды. –  tomcat23 02.02.2011, 10:58
  • 2
    @tomcat23: Для иллюстрирования я обернул его в функции, чтобы только добавить роль, когда это не делает уже существует. Другое примечание: Я предполагаю, что было бы легче поместить роль куда-нибудь в ролевой иерархии с получением ограничений от некоторых созданных в роли и затем добавить/удалить возможности от созданного в роли. Сделал бы это более ясным и легче помнить, являются ли это ограничения, помещаются куда-нибудь между напр. администратор и редактор. - Я надеюсь, что Вы не возражаете против этого, я отредактировал Ваш ответ. Если Вы делаете, роль это назад. :) –  kaiser 01.03.2011, 18:25
  • 3
    @tomcat23 - Вода под мостом в этой точке. Все, что я говорю, я не интересуюсь возложением вины, только наличием мира для всех продвижение. :) –  MikeSchinkel 13.03.2011, 08:55
  • 4
    @MikeSchinkel Да, Вы правы. @kaiser Мои извинения, если я вызвал Вас оскорбление. –  tomcat23 13.03.2011, 10:08
  • 5
    @MikeSchinkel: спасибо за установление мира въезжает задним ходом. @tomcat23: Нет, Вы не сделали. Я могу иметь дело с такой критикой. Мои извинения также. –  kaiser 13.03.2011, 19:44

Позвольте ошибочной отладке и входу использовать на живых сайтах

Это - часть кода, который я написал для использования констант 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 ('manage_themes') и is_logged_in ().

Но это - то, где это становится намного более хитрым.

24
19.02.2020, 21:54
  • 1
    Мы используем что-то подобное для установки живых, подготавливающих и dev деталей соединения с базой данных. –  Tom 07.03.2011, 19:14

Удалите лишнюю информацию и 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'
    ) );
}
26
19.02.2020, 21:54

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

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
27
19.02.2020, 21:54
  • 1
    Это - не обязательно хорошая идея - неактивный плагин все еще присутствует в файловой системе, и небезопасный может все еще быть использован для взламывания сайта. Плагины должны всегда совершенствоваться. –  Tim Malone 11.04.2016, 23:45

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

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

Удалите переходы страницы "Read More" **

Вместо этого возвратитесь к верхней части страницы. Вы знаете, как при нажатии на "read more", он перейдет к пятну на странице, которая может быть раздражающей, это делает его просто загружать страницу обычно, никакой переход!

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

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

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! = 'администратор') вместо этого, вероятно, более полезный

Разработайте облако тегов

// 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;') );
28
19.02.2020, 21:54
  • 1
    я просто использовал код, "Ограничивает Элементы меню администратора на основе имени пользователя, заменяет имя пользователя именем фактического пользователя", которое является великим, но могли Вы обновлять код, чтобы также показать, как это может быть сделано для определенной "пользовательской роли". Я думаю, что это было бы очень полезно! –  NetConstructor.com 22.02.2011, 22:13
  • 2
    Жаль NetConstructor я просто видел Ваш комментарий теперь. Для пользовательской роли я использовал бы "current_user_can". У меня нет времени для тестирования его, но когда я сделаю, я добавлю его. –  Wyck 04.03.2011, 05:47
  • 3
    для wp_feed_cache_transient_lifetime 43200 (12 часов) –  brasofilo 03.04.2012, 01:15

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

Протестированный на: 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;
}
31
19.02.2020, 21:54
  • 1
    Хороший, но get_the_image делает очень хорошее задание с этим также. wordpress.org/extend/plugins/get-the-image –  artlung 15.09.2010, 18:56
  • 2
    , но эти работы по-другому, и устраняет различные проблемы, какой get_the_image не принимает во внимание –  NetConstructor.com 30.09.2010, 14:19
  • 3
    Что это делает по-другому, чем get_the_image сценарий? –  matt 05.12.2010, 06:47
  • 4
    @matt - В Wordpress существуют различные способы, которыми изображения могут быть добавлены к сообщениям, и я думаю, что get_the_image сценарий просто смотрит на одного из тех. Это проверяет, чтобы видеть, существует ли известное изображение и использование, что одно первое при наличии, затем я думаю, что оно проверяет на первое изображение, добавленное к содержанию сообщения и если это не найдено, оно проверяет медиа-галерею на изображение с самым высоким порядком сортировки (по крайней мере это - то, как я помню движение порядка). –  NetConstructor.com 22.02.2011, 22:01
  • 5
    , я предлагаю, чтобы wordpress.org/extend/plugins/auto-post-thumbnail Автоматически генерировал Миниатюру Сообщения (Известная Миниатюра) из первого изображения в сообщении или любом пользовательском типе сообщения, только если Миниатюра Сообщения не установлена –  Ünsal Korkmaz 08.05.2011, 15:47

Не зарегистрируйте виджеты значения по умолчанию WordPress

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

// Unregister all default WordPress 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);
32
19.02.2020, 21:54
  • 1
    я использовал его на Версии 3.1.4. Но виджеты все еще там. У кого-либо есть идея? –  user391 01.07.2011, 17:22
  • 2
    Все еще работы над WP 4.5 :) –  Tim Malone 19.04.2016, 06:26

Отобразите запросы DB, время потраченное и потребление памяти

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

Это можно назвать многократно.

33
19.02.2020, 21:54
  • 1
    для php <5,2 использования memory_get_usage() –  onetrickpony 23.01.2011, 10:23

Включите выходное сжатие 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);'));
36
19.02.2020, 21:54

Удалите ping к своему собственному блогу

Протестированный на: 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' );
39
19.02.2020, 21:54
  • 1
    , у меня на самом деле есть та проблема довольно часто. Если я ссылаюсь на внутреннюю ссылку к другому сообщению на моем блоге WP, я получаю трекбек, или уведомление о ссылке на блог (не помните который) от меня. Это является раздражающим. –  Sahas Katta 19.12.2010, 01:12
  • 2
    То же здесь. У меня есть новости / блог журнала и ссылка на другие статьи довольно часто. –  Steven 13.02.2011, 15:24

Включите миниатюры, управляют списком сообщений/Страницы

Можно добавить это к функциям для отображения к Управлять/Редактировать Сообщению и Списку Страниц нового столбца с предварительным просмотром миниатюры.

/****** 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 );
}
39
19.02.2020, 21:54
  • 1
    Как переместить столбец в крайне левое? –  Rich 08.10.2013, 20:10

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

Протестированный на: 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');
41
19.02.2020, 21:54

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

Поместите код ниже в Ваш functions.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>
44
19.02.2020, 21:54

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

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>';
}
47
19.02.2020, 21:54

Удалите значение по умолчанию WordPress поля Meta

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

Этот код позволит Вам удалять определенные Поля Meta, которые 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');
51
19.02.2020, 21:54

Удалите "Wordpress" к фильтру "WordPress"

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

Был фильтр, добавленный с версией 3.0 WordPress, которая автоматически преобразовывает все экземпляры "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 );
}
49
19.02.2020, 21:54

Инструменты WordPress Profiling

Мне нравится добавлять профильные инструменты в отдельном файле, который я затем включаю от 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);
?>
57
19.02.2020, 21:54
  • 1
    , является там быстрым способом изменить это так, чтобы сценарий только назвали, когда Ваш администратор И добавляет что-то к URL для проявления информации об отладке? –  NetConstructor.com 22.02.2011, 21:58
  • 2
    Это - то, как это сделано в моей теме: semiologic.com/software/sem-reloaded-/inc/debug.php включен/functions.php, или/inc/init.php (не может вспомнить первое, что пришло на ум). –  Denis de Bernardy 23.02.2011, 11:50

Определите максимальный номер изменений сообщения для предотвращения чрезмерного увеличения размера DB.

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

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

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

Если это имеет значение существует тонна прекрасных идей для КОНСТАНТ, которые могут быть установлены на странице Codex, Редактируя wp-config.php.

59
19.02.2020, 21:54
  • 1
    Это может быть установлено на по почте основание типа? –  NetConstructor.com 12.09.2010, 12:17
  • 2
    Рассмотрение его использования в wp_save_post_revision () там, кажется, не способ различать на основе типов сообщения. Нет никакого фильтра или чего-либо на значении, хотя, вероятно, должно быть. –  jerclarke 12.09.2010, 17:24
  • 3
    благодарит Jeremy - кому-либо еще, если Вы знает, как делает это, отправляет его здесь. –  NetConstructor.com 14.09.2010, 10:18
  • 4
    лично я предпочитаю 10. Я знаю, что это является двойным, но всегда когда мне нужен пересмотр, это является всегда более старым затем 5 –  janw 04.09.2012, 15:04

Загрузка jQuery от Google CDN

Протестированный на: 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 WordPress 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 syntax to default $where
        $where .= " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$now') > $wait ";
    }
    return $where;
}
add_filter('posts_where', 'publish_later_on_feed');
73
19.02.2020, 21:54
  • 1
    ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js истекает после всего один час. Всегда используйте информацию о полной версии как ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js – который истекает после одного года. –  fuxia♦ 10.11.2010, 16:41
  • 2
    "Удаляют Информацию о версии WordPress для безопасности" код, на самом деле не делает ничего для увеличения безопасности сайта. Это даже не останавливает воздействие версии WP, используемой на Вашем сайте. –  Joseph Scott 11.02.2011, 08:38
  • 3
    Не истинный Joseph, если Ваша версия WordPress выставляется затем люди, видит, выполняете ли Вы более старую версию, таким образом выставляя Ваши уязвимости. Это всегда - хорошее решение удалить это из всех установок WordPress. Лично, я даже не знаю, почему они помещают его там во-первых, поскольку это - проблема безопасности. –  Jeremy 12.05.2014, 18:51

Удалите Уведомление об Обновлении для всех пользователей кроме АДМИНИСТРАТОРСКОГО Пользователя

Протестированный на: 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;" ) );
       }
78
19.02.2020, 21:54
  • 1
    Это - намного меньше, чем идеал. Это будет только работать, если вход в систему администратора будет все еще 'администратором' по умолчанию, который это shoudln't быть из соображений безопасности. Вместо этого необходимо проверить на определенную возможность, что Вы хотите, чтобы люди должны были видеть сообщения. –  jerclarke 11.09.2010, 23:28
  • 2
    Т.е. если (! current_user_can ('manage_options')) {... add_filter...} - Извините за двойной комментарий, я забыл, что удар входит, отправляет комментарии) –  jerclarke 11.09.2010, 23:29
  • 3
    Вот почему, я добавил комментарий к коду, где можно изменить администраторское имя пользователя. Как Вы улучшились бы/переписали бы его? –  NetConstructor.com 12.09.2010, 12:07
  • 4
    лучший способ должен удалить глобальный $user_login и get_currentuserinfo () и вместо этого использовать current_user_can в Вашем выражении if. Это - только 1 строка вместо 3, и это - стандартный путь. Можно проверить на определенную возможность, которая была бы необходима к ACT на сообщениях, в этом случае существует 'update_core' и 'update_plugins'. –  jerclarke 12.09.2010, 17:00
  • 5
    так: если (! current_user_can ('update_plugins')) {/*REMOVE MESSAGES*/} –  jerclarke 12.09.2010, 17:01

Измените логотип входа в систему и отобразите 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;
}
88
19.02.2020, 21:54

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

// 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' );
80
19.02.2020, 21:54
  • 1
    Относительно последнего отрывка к этому ответу. Это - большое дополнение, поскольку я добавлял их вручную для каждого типа сообщения. Единственная проблема, которую я имею с этим, - то, что это добавляет данные после записи "категории" и "тега" по умолчанию. Вы могли обновить свой ответ, чтобы переместить "категории" или "тега" по умолчанию вниз или удалить их так, чтобы они могли быть добавлены вручную? –  NetConstructor.com 22.02.2011, 22:06
  • 2
    @NetConstructor.com я не думаю, что понимаю Ваш запрос. Если бы я делаю, то я думаю, что это было бы немного больше трудной вещи сделать, и сделать не, действительно имеют время прямо сейчас, чтобы выяснить, как сделать это. –  jaredwilli 23.02.2011, 03:01
  • 3
    Включайте пользовательские типы сообщения в результаты поиска - я предполагаю, теперь можно сделать это с exclude_from_search параметрический усилитель register_post_type... –  Krzysiek Dróżdż♦ 16.12.2013, 18:13

Функция для изменения длины Отрывка

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

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

function new_excerpt_length($length) { 
    return 100;
}

add_filter('excerpt_length', 'new_excerpt_length');

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

41
19.02.2020, 21:54
  • 1
    @user402... действительно ли это ограничивает словами или символами? Вы могли отправить, как сделать обоих? –  NetConstructor.com 12.09.2010, 12:14
  • 2
    @NetConstructor.com Эта функция (и excerpt_length рычаг) ограничение словами. –  EAMann 15.09.2010, 20:53
  • 3
    Heh. Я получил тот фильтр, добавленный к ядру. :) –  Dougal Campbell 08.03.2011, 21:22

Wordpress пользовательский администраторский нижний колонтитул

// customize admin footer text
function custom_admin_footer() {
        echo 'add your custom footer text and html here';
} 
add_filter('admin_footer_text', 'custom_admin_footer');

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

20
19.02.2020, 21:54

Функция для отключения каналов 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);
19
19.02.2020, 21:54

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

Протестированный на: 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);
    }
}
21
19.02.2020, 21:54

Включите shortcodes в виджетах

// shortcode in widgets
if ( !is_admin() ){
    add_filter('widget_text', 'do_shortcode', 11);
}
20
19.02.2020, 21:54

Изменитесь "Привет" сообщение, чтобы "Добро пожаловать"

С этой функцией можно настроить "Привет" сообщение в верхней правой из администраторской области.
Эта функция использует JQuery для изменения "Привет" сообщение, чтобы "Добро пожаловать".

/****** 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;
}
16
19.02.2020, 21:54
  • 1
    Это не может уже быть отредактировано на стороне PHP, таким образом, это не становится произведенным вообще? –  hakre 14.02.2011, 21:13
  • 2
    Это хорошо работает здесь в 3,0 + версии наверняка, но почему не в более старых версиях? Проверьте, ответственен ли какой-либо другой плагин, который Вы используете, за это. Текст здесь заменяется JQuery, возможно, плагин JQuery? –  Philip 14.02.2011, 22:25

Увеличьте резкость измененных изображений (только JPEG)

Эта функция увеличивает резкость измененных изображений JPEG. Пример различия:

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);
53
19.02.2020, 21:54
  • 1
    намного намного лучше jpegs, огромное спасибо! протестированный в с 3.4 альфами –  brasofilo 02.04.2012, 15:07
  • 2
    , если Вы парни хотите это как плагин: wordpress.org/extend/plugins/sharpen-resized-images –  Ünsal Korkmaz 03.04.2012, 12:38
  • 3
    , где делает это функциональное движение? –  StevieD 18.03.2019, 04:04
  • 4
    @StevieD - поскольку заголовок предлагает, он входит в functions.php в Вашем шаблоне. Я был бы осторожен, хотя, этой функции почти 8 лет. –  timofey.com 25.07.2019, 10:54

Теги

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