Melhor coleção de código para o seu arquivo functions.php [fechado]


332

Por favor vote na pergunta e nas respostas que achar úteis, clicando na seta PARA CIMA no lado esquerdo da pergunta ou resposta.

Como acontece com muitos outros que agora estão visualizando este post, tenho lido vários blogs, fóruns e grupos de discussão para aprender e melhorar minhas habilidades em wordpress. Nos últimos 12 meses, estive em uma missão para substituir meu uso de plug-ins adicionando código ao meu functions.phparquivo. Embora eu concorde completamente que os plug-ins são muito úteis em muitas situações, minha experiência provou que em 90% dos casos de uso, embora um plug-in possa existir, na verdade, utilizá-lo pode criar complicações desnecessárias e problemas de compatibilidade. Além disso, em muitos casos, esses plugins adicionaram menus e outros elementos de administração que eu não quero ou preciso.

Na maioria das vezes, descobri que, analisando o código dos plugins, consegui retirar o código que desejava e codificá-lo no meu functions.php. Isso me forneceu a funcionalidade exata de que eu precisava, sem precisar incluir elementos desnecessários.

Portanto, o objetivo deste post é minha tentativa de envolver você, leitor / administrador / desenvolvedor, a compartilhar comigo e com outros aqui quaisquer bits de código que você considere úteis e que tenham sido adicionados ao function.phparquivo do seu tema para estender ou aprimorar o WordPress sem utilizar um plugar.

Quando você enviar uma resposta aqui, por favor, dê um título a cada código, informe-nos se com qual versão do wordpress você é compatível, inclua a descrição que achar melhor descreve sua função e (se aplicável) inclua um link para o original plug-in ou fonte onde você encontrou as informações.

Aguardo ansiosamente todas as suas respostas e, é claro, adicionarei continuamente minhas próprias descobertas sempre que as encontrar.


13
Considerando que as 5 primeiras respostas foram do OP e a pergunta parece mais voltada para a coleta de uma série de respostas do que uma única resposta definitiva, esse deve ser um wiki da comunidade.
EAMann 09/09/10

17
Todas as respostas não relacionadas a um tema devem ser removidas. Este segmento é um bom exemplo para práticas de codificação ruins.
fuxia

17
Eu acho que seria melhor incentivar as pessoas a criar um plug-in de funcionalidade personalizada em vez de usar as funções de seu tema. Php
Ian Dunn

3
@ NetConstructor.com O número puro de visualizações de página não é um indicador de qualidade. Devemos incentivar perguntas específicas com respostas específicas e boas práticas de codificação. Esta discussão é o oposto.
fuxia

6
@ NetConstructor.com Discuta sobre o Meta, onde as pessoas podem ver melhor seus argumentos. :)
fuxia

Respostas:


107

Habilitar o recurso Admin oculto exibindo TODAS as configurações do site

Testado em: Wordpress 3.1 RC3

Este pequeno pedaço de código faz algo bem legal. Ele adicionará uma opção adicional ao seu menu de configurações com um link para "todas as configurações", que mostrará uma lista completa de todas as configurações que você tem em seu banco de dados relacionadas ao seu site wordpress. O código abaixo tornará esse link visível apenas para um usuário administrador e ocultará para todos os outros usuários.

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

Fantástico para o desenvolvimento! Eu uso a tabela de opções frequentemente para armazenar versões do banco de dados para meus plug-ins ... usar o phpMyAdmin para redefinir para uma versão antiga do banco de dados para testar um script de atualização é uma dor ... isso tornará muito mais fácil !!!
EAMann

3
Você também pode chegar à mesma página de opções (quando logado), indo para seusite / wp-admin / options.php
j08691

89

Modificar o logotipo do logon e o link do URL da imagem

Testado em: WordPress 3.0.1

Este código permitirá que você modifique facilmente o logotipo da página de login do WordPress, bem como o link href e o texto do título desse logotipo.

add_filter( 'login_headerurl', 'namespace_login_headerurl' );
/**
 * Replaces the login header logo URL
 *
 * @param $url
 */
function namespace_login_headerurl( $url ) {
    $url = home_url( '/' );
    return $url;
}

add_filter( 'login_headertitle', 'namespace_login_headertitle' );
/**
 * Replaces the login header logo title
 *
 * @param $title
 */
function namespace_login_headertitle( $title ) {
    $title = get_bloginfo( 'name' );
    return $title;
}

add_action( 'login_head', 'namespace_login_style' );
/**
 * Replaces the login header logo
 */
function namespace_login_style() {
    echo '<style>.login h1 a { background-image: url( ' . get_template_directory_uri() . '/images/logo.png ) !important; }</style>';
}

EDIT: Se você quiser usar o logotipo do site para substituir o logotipo de logon, poderá usar o seguinte para extrair dinamicamente essas informações (testadas no 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

Inclua tipos de postagem personalizados nos resultados da pesquisa.

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

Adicione seus tipos de postagem personalizados ao feed RSS principal do seu site por padrão.

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

Incluir tipos de postagem personalizados no widget do painel de administração "Right Now"

Isso incluirá seus tipos de postagem personalizados e a contagem de postagens para cada tipo no widget do painel "Right Now".

// ADD CUSTOM POST TYPES TO THE 'RIGHT NOW' DASHBOARD WIDGET
function wph_right_now_content_table_end() {
 $args = array(
  'public' => true ,
  '_builtin' => false
 );
 $output = 'object';
 $operator = 'and';
 $post_types = get_post_types( $args , $output , $operator );
 foreach( $post_types as $post_type ) {
  $num_posts = wp_count_posts( $post_type->name );
  $num = number_format_i18n( $num_posts->publish );
  $text = _n( $post_type->labels->singular_name, $post_type->labels->name , intval( $num_posts->publish ) );
  if ( current_user_can( 'edit_posts' ) ) {
   $num = "<a href='edit.php?post_type=$post_type->name'>$num</a>";
   $text = "<a href='edit.php?post_type=$post_type->name'>$text</a>";
  }
  echo '<tr><td class="first num b b-' . $post_type->name . '">' . $num . '</td>';
  echo '<td class="text t ' . $post_type->name . '">' . $text . '</td></tr>';
 }
 $taxonomies = get_taxonomies( $args , $output , $operator ); 
 foreach( $taxonomies as $taxonomy ) {
  $num_terms  = wp_count_terms( $taxonomy->name );
  $num = number_format_i18n( $num_terms );
  $text = _n( $taxonomy->labels->singular_name, $taxonomy->labels->name , intval( $num_terms ));
  if ( current_user_can( 'manage_categories' ) ) {
   $num = "<a href='edit-tags.php?taxonomy=$taxonomy->name'>$num</a>";
   $text = "<a href='edit-tags.php?taxonomy=$taxonomy->name'>$text</a>";
  }
  echo '<tr><td class="first b b-' . $taxonomy->name . '">' . $num . '</td>';
  echo '<td class="t ' . $taxonomy->name . '">' . $text . '</td></tr>';
 }
}
add_action( 'right_now_content_table_end' , 'wph_right_now_content_table_end' );

Em relação ao último trecho desta resposta. Este é um ótimo complemento, pois eu os adicionava manualmente para cada tipo de postagem. O único problema que tenho com isso é que ele adiciona os dados após a entrada "categoria" e "tag" padrão. Você pode atualizar sua resposta para mover as "categoria" ou "tag" padrão para baixo ou removê-las para que possam ser adicionadas manualmente?
NetConstructor.com

@ NetConstructor.com Acho que não entendi sua solicitação. Se sim, acho que seria um pouco mais difícil de fazer e realmente não tenho tempo agora para descobrir como fazê-lo.
23411 Jaredwilli

Inclua tipos de postagem personalizados nos resultados da pesquisa - eu acho, agora você pode fazer isso com exclude_from_searchparâmetros de register_post_type...
Krzysiek Dróżdż

78

Remova a notificação de atualização para todos os usuários, exceto o usuário ADMIN

Testado em: Wordpress 3.0.1

Este código garante que nenhum usuário que não seja "admin" seja notificado pelo wordpress quando houver atualizações disponíveis.

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

Versão alterada para mostrar apenas a notificação de atualização para usuários administrativos (em vez de apenas o usuário 'admin'):

// REMOVE THE WORDPRESS UPDATE NOTIFICATION FOR ALL USERS EXCEPT SYSADMIN
       global $user_login;
       get_currentuserinfo();
       if (!current_user_can('update_plugins')) { // checks to see if current user can update plugins 
        add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
        add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
       }

8
Isso é muito menos que o ideal. Só funcionará se o login do administrador ainda for o 'admin' padrão, o que não deve ser por motivos de segurança. Em vez disso, você deve verificar se há um recurso específico que deseja que as pessoas vejam mensagens.
precisa saber é o seguinte

1
Ou seja, se {... add_filter ...} (current_user_can ( 'manage_options')!) - Desculpe cerca do dobro comentário, eu esqueci que bater inserir comentários submete)
jerclarke

É por isso que adicionei o comentário ao código onde você pode alterar o nome de usuário do administrador. Como você o melhoraria / reescreveria?
NetConstructor.com

A melhor maneira é remover o global $ user_login e get_currentuserinfo () e, em vez disso, usar current_user_can na sua cláusula if. É apenas 1 linha em vez de 3 e é o caminho padrão. Você pode verificar o recurso específico que seria necessário para ACT nas mensagens; nesse caso, existem 'update_core' e 'update_plugins'.
jerclarke

2
so: if (! current_user_can ('update_plugins')) {/ * REMOVE
MESSAGES

72

Carregando o jQuery a partir da CDN do Google

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

Remova as informações da versão do WordPress por segurança

Testado em: Wordpress 3.0.1

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

Adicionar spam e excluir links a comentários no front end

Testado em: Wordpress 3.0.1

Isso facilita o gerenciamento de comentários do front-end adicionando spam e excluindo links. **

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

Atrasar a publicação pública no feed RSS

Testado em: Wordpress 3.0.1

Por fim, gosto de adiar a postagem nos meus feeds RSS por 10 a 15 minutos, pois sempre encontro pelo menos alguns erros no meu texto. Outros usos são para o caso de você desejar que o conteúdo seja exclusivo do seu site por um dia ou uma semana antes de enviá-lo aos seus leitores de 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');

fonte no meu post: wpengineer.com/320/publish-the-feed-later com mais informações
bueltge

1
Você também pode remover o filtro do gerador:remove_action('wp_head', 'wp_generator');
Gipetto

25
ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js expira em apenas uma hora. Sempre use as informações da versão completa, como ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js - que expiram após um ano.
fuxia

5
O código "Remover as informações da versão do WordPress para segurança" não faz nada para aumentar a segurança do seu site. Ele nem para a exposição da versão WP em uso no seu site.
Joseph Scott

1
Não é verdade, Joseph, se sua versão do WordPress estiver exposta, as pessoas poderão ver se você está executando uma versão mais antiga, expondo suas vulnerabilidades. É sempre uma boa decisão removê-lo de todas as instalações do WordPress. Pessoalmente, eu nem sei por que eles colocaram lá em primeiro lugar, pois é um problema de segurança.
Jeremy

58

Defina um número máximo de revisões posteriores para evitar o inchaço do banco de dados.

Testado em: Wordpress 3.0.1

O padrão é infinito, isso o configurará para lembrar apenas as últimas 5 edições:

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

FWIW, existem muitas idéias excelentes para CONSTANTS que podem ser definidas na página do Codex Editando wp-config.php .


Isso pode ser definido por tipo de postagem?
NetConstructor.com

Observando seu uso em wp_save_post_revision (), não parece haver uma maneira de distinguir com base nos tipos de postagem. Não há filtro nem nada no valor, embora provavelmente deva haver.
precisa saber é o seguinte

thanks Jeremy - Para qualquer outra pessoa, se você souber como fazer isso, poste aqui.
NetConstructor.com

1
pessoalmente, prefiro 10. Eu sei que é duplo, mas sempre quando eu preciso de uma revisão é sempre mais velho, então 5
janw

56

Ferramentas de criação de perfil do Wordpress

Eu gosto de adicionar ferramentas de criação de perfil em um arquivo separado, que eu incluo em functions.php quando necessário:

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

existe uma maneira rápida de modificar isso para que o script seja chamado apenas quando você for administrador e acrescente algo ao URL para mostrar as informações de depuração?
NetConstructor.com 22/02

1
É assim que é feito no meu tema: semiologic.com/software/sem-reloaded - o /inc/debug.php é incluído por /functions.php ou /inc/init.php (não consigo lembrar de nada cabeça).
Denis de Bernardy

52

Nitidez de imagens redimensionadas (apenas jpg)

Esta função aprimora imagens jpg redimensionadas. Um exemplo de diferença: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 muito, muito melhores, muito obrigado! testado em 3,4-alfa
brasofilo


onde esta função vai?
StevieD 18/03

@StevieD - como o título sugere, ele entra em functions.php, no seu modelo. Eu teria cuidado, porém, esta função tem quase 8 anos.
timofey.com 25/07

51

Remova as caixas de meta padrão do Wordpress

Testado em: Wordpress 3.0.1

Este código permitirá remover Meta Boxes específicas que o wordpress adiciona por padrão às telas padrão Adicionar / Editar postagem e Adicionar / editar página.

// 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
De acordo com esta wordpress.stackexchange.com/questions/34030/... eu não iria esconder o slugdiv desta forma, mas usar este gist.github.com/1863830 vez

@CorvanNoorloos Seu link do github está quebrado.
user7003859

48

Remova o "Wordpress" para o filtro "WordPress"

Testado em: Wordpress 3.0.1

Foi adicionado um filtro com o WordPress versão 3.0 que converte automaticamente todas as instâncias do "Wordpress" (sem P maiúsculo) em "WordPress" (com P maiúsculo) no conteúdo da postagem, nos títulos das postagens e no texto do comentário. Algumas pessoas veem isso como intrusivo, eu só preciso interpretar incorretamente o WordPress de tempos em tempos e achei o filtro um pouco irritante.

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

ótimo pequeno achado. Uma das coisas que remove apenas um outro pedaço de código que não é necessário
NetConstructor.com

5
No WordPress 3.0.1, esse filtro é adicionado com prioridade 11 , portanto, você precisa adicionar 11como o terceiro parâmetro para removê-lo.
Jan Fabry

46

Personalizar o painel

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
   global $wp_meta_boxes;

Remova esses widgets do painel ...

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

Adicione um widget personalizado chamado 'Ajuda e suporte'

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

Este é o conteúdo do seu widget personalizado

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

44

Adicionar campos de perfil de usuário personalizados

Coloque o código abaixo no seu arquivo functions.php para adicionar campos de perfil de usuário personalizados. Edite ou adicione linhas como achar melhor.

Lembre-se de não remover a linha: retorne $ contactmethods; caso contrário, isso não funcionará.

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

Para exibir campos personalizados, você pode usar um dos dois métodos listados abaixo.

Opção 1:

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

Opção 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

Personalize a ordem do menu do administrador

testado em: Wordpress 3.0.1

Este código permitirá reorganizar a ordem dos elementos no menu do administrador. Tudo o que você precisa fazer é clicar em um link existente no menu do administrador e copiar tudo antes do URL / wp-admin /. A ordem abaixo representa a ordem que o novo menu de administrador terá.

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

Existe realmente um filtro principal chamado custom_menu_order? Eu não poderia encontrar um ...
kaiser


40

Função para alterar o tamanho do Exerpt

Testado em: Wordpress 3.0.1

Por padrão, todos os trechos estão limitados a 55 palavras. Utilizando o código abaixo, você pode substituir essas configurações padrão:

function new_excerpt_length($length) { 
    return 100;
}

add_filter('excerpt_length', 'new_excerpt_length');

Este exemplo altera o comprimento do trecho para 100 palavras, mas você pode usar o mesmo método para alterá-lo para qualquer valor.


@ user402 ... isso é limitado por palavras ou caracteres? Você poderia postar como fazer as duas coisas?
NetConstructor.com

3
@ NetConstructor.com Esta função (e o excerpt_lengthgancho) são limitados por palavras .
EAMann

Heh. Eu tenho esse filtro adicionado ao núcleo. :)
Dougal Campbell

38

Adicionar miniaturas na lista Gerenciar postagens / páginas

Você pode adicionar isso às suas funções para exibir na lista Gerenciar / Editar postagem e páginas uma nova coluna com a visualização em miniatura.

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

Como mover a coluna para a extrema esquerda?
Rich

38

Remova pings para o seu próprio blog

Testado em: 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' );

com que frequência e quando o wordpress efetua ping?
NetConstructor.com

Na verdade, tenho esse problema com bastante frequência. Se eu referenciar um link interno para outra postagem no meu blog do WP, recebo um trackback ou pingback (não lembro qual) de mim mesmo. É irritante.
Sahas Katta

O mesmo aqui. Eu tenho um blog de notícias / revistas e tenho links para outros artigos com bastante frequência.
13113 Steven

35

Ativar compactação de saída GZIP

Normalmente, o servidor deve ser configurado para fazer isso automaticamente, mas muitos hosts compartilhados não fazem isso (provavelmente para aumentar o uso da largura de banda do cliente)

 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

Exibir consultas de banco de dados, tempo gasto e consumo de memória

Testado em: 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} -->" ;
}

Em seguida, este código abaixo do código acima, que inserirá automaticamente o código acima no rodapé do site público (verifique se o tema está chamando wp_footer):

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

Pode ser chamado várias vezes.


para php <5.2 usememory_get_usage()
onetrickpony

31

Cancelar registro de widgets padrão do WP

Testado em: 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);

Eu usei na versão 3.1.4. Mas os widgets ainda estão lá. Alguém tem ideia?
precisa saber é o seguinte

Ainda funciona em WP 4.5 :)
Tim Malone

30

Extrair automaticamente a primeira imagem do conteúdo da postagem

Testado em: Wordpress 3.0.1

Esse código extrairá automaticamente a primeira imagem associada a uma postagem e permitirá que você a exiba / use chamando a função 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
Bom, mas a get_the_image também faz um bom trabalho com isso. wordpress.org/extend/plugins/get-the-image
artlung 15/09/2010

correto, mas este funciona de forma diferente e corrige vários problemas que get_the_image não levam em consideração
NetConstructor.com

3
O que faz diferente do script get_the_image?
matt

1
@matt - No wordpress, existem diferentes maneiras de adicionar imagens às postagens e acho que o script get_the_image olha apenas para uma delas. Isso verifica se há uma imagem em destaque e a usa primeiro, se disponível, depois acho que verifica a primeira imagem adicionada ao conteúdo da postagem e, se não for encontrada, verifica a galeria de mídia da imagem com a classificação mais alta ordem (pelo menos é assim que eu lembro da ordem).
NetConstructor.com

eu sugiro wordpress.org/extend/plugins/auto-post-thumbnail gerar automaticamente o Post Thumbnail (Destaque Miniatura) a partir da primeira imagem na pós, ou apenas qualquer tipo de pós personalizado se Post Thumbnail não está definido
Ünsal Korkmaz

27

Saída do arquivo de modelo de tema que uma postagem / página está usando no cabeçalho

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

Reduza a saída DIV padrão se o seu tema estiver usando post_class.

se o seu tema estiver usando algo como

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

Você pode ter divs longos e loucos na sua fonte que podem parecer assim ou até mais:

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

Isso pode realmente começar a bagunçar sua fonte e parecer bastante desnecessário na maioria dos casos, se você tiver 3-4 de profundidade, é bom o suficiente.

Para o exemplo principal, podemos dividir a saída da seguinte forma:

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

isso divide a saída para incluir apenas os 5 primeiros valores; portanto, o exemplo acima se torna:

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

Faça com que os arquivos de categoria exibam todas as postagens, independentemente do tipo de postagem: bom para tipos de postagem personalizados

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

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

Remover itens indesejados do painel

Isso já foi publicado, mas não tinha a lista completa de itens. Especialmente aqueles irritantes "links recebidos!"

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

Remova os saltos da página "Leia mais" **

em vez disso, retorne ao topo da página. Você sabe como quando você clica em "leia mais", ele pula para o local da página que pode ser irritante, isso faz com que apenas carregue a página normalmente, sem pular!

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

Restrinja os itens de menu ADMIN com base no nome de usuário , substitua o nome de usuário por um nome de usuário real.

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

// como alternativa, você pode usar if ($ current_user-> user_login! = 'admin'), provavelmente mais útil

Estilizar a nuvem de tags

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

Referência completa de opções aqui (existem muitas!) Http://codex.wordpress.org/Function_Reference/wp_tag_cloud

Alterar o timer de atualização do widget RSS padrão

(o padrão é 6 ou 12 horas, esqueço (1800 = 30min).

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

você poderia dividir cada uma delas em respostas separadas nas próximas semanas. Eu faria isso por você, mas não quis fazer parecer que estou recebendo crédito por suas respostas. De qualquer forma, estou tentando manter isso organizado para que os usuários possam encontrar facilmente as informações que estão procurando. Agradecemos antecipadamente
NetConstructor.com

Eu estava usando o código "Restringir itens de menu ADMIN com base no nome de usuário, substituir nome de usuário por um nome de usuário real", o que é ótimo, mas você pode atualizar o código para mostrar também como isso pode ser feito para uma "função de usuário" específica. Eu acho que isso seria muito útil!
NetConstructor.com 22/02

Desculpe NetConstructor, acabei de ver seu comentário agora. Para a função de usuário, eu usaria "current_user_can". Não tenho tempo para testá-lo, mas quando o fizer, vou adicioná-lo.
Wyck

valor padrão para wp_feed_cache_transient_lifetime é 43200 (12 horas)
brasofilo

26

Remover aviso de atualização de plug-in SOMENTE para plug-ins INATIVOS

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
Isso não é necessariamente uma boa ideia - um plug-in inativo ainda está presente no sistema de arquivos e um inseguro ainda pode ser utilizado para invadir o site. Os plug-ins devem sempre ser atualizados.
Tim Malone

25

Remova informações supérfluas e HTML dentro da <head>tag

// remove unnecessary header info
add_action( 'init', 'remove_header_info' );
function remove_header_info() {
    remove_action( 'wp_head', 'rsd_link' );
    remove_action( 'wp_head', 'wlwmanifest_link' );
    remove_action( 'wp_head', 'wp_generator' );
    remove_action( 'wp_head', 'start_post_rel_link' );
    remove_action( 'wp_head', 'index_rel_link' );
    remove_action( 'wp_head', 'adjacent_posts_rel_link' );         // for WordPress < 3.0
    remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head' ); // for WordPress >= 3.0
}

// remove extra CSS that 'Recent Comments' widget injects
add_action( 'widgets_init', 'remove_recent_comments_style' );
function remove_recent_comments_style() {
    global $wp_widget_factory;
    remove_action( 'wp_head', array(
        $wp_widget_factory->widgets['WP_Widget_Recent_Comments'],
        'recent_comments_style'
    ) );
}

23

Habilitar erro de depuração e log para usar em sites ao vivo

Este é um pedaço de código que escrevi para usar as constantes WP_DEBUG que normalmente são desabilitadas por padrão. Bem, eu criei uma maneira de não apenas ativar o WP_DEBUG para que você possa usá-lo em um site ao vivo sem efeitos colaterais negativos, mas também usei as outras constantes de depuração para forçar a exibição de erros e para criar um arquivo de log de os erros e avisos no diretório / wp-content.

Solte esse código no seu arquivo wp-config.php (APÓS SALVAR UM BACKUP APENAS NO CASO) e, em seguida, você poderá passar os parâmetros? Debug = 1, 2 ou 3 no final de qualquer URL do seu site.

? debug = 1 = mostra todos os erros / avisos? debug = 2 = força a serem exibidos? debug = 3 = cria um arquivo debug.log de todos os erros no diretório / wp-content.

/**
* Written by Jared Williams - http://new2wp.com
* @wp-config.php replace WP_DEBUG constant with this code
* Enable WP debugging for usage on a live site
* http://core.trac.wordpress.org/browser/trunk/wp-includes/load.php#L230
* Pass the '?debug=#' parameter at the end of any url on site
*
* http://example.com/?debug=1, /?debug=2, /?debug=3
*/
if ( isset($_GET['debug']) && $_GET['debug'] == '1' ) {
    // enable the reporting of notices during development - E_ALL
    define('WP_DEBUG', true);
} elseif ( isset($_GET['debug']) && $_GET['debug'] == '2' ) {
    // must be true for WP_DEBUG_DISPLAY to work
    define('WP_DEBUG', true);
    // force the display of errors
    define('WP_DEBUG_DISPLAY', true);
} elseif ( isset($_GET['debug']) && $_GET['debug'] == '3' ) {
    // must be true for WP_DEBUG_LOG to work
    define('WP_DEBUG', true);
    // log errors to debug.log in the wp-content directory
    define('WP_DEBUG_LOG', true);
}

Entro em mais detalhes no post de convidado que escrevi para o Comluv, se você estiver interessado, aqui: http://comluv.com/dev/enable-debugging-and-logging-for-live-site-usage/

Ainda estou trabalhando em uma maneira de tornar isso protegido por senha ou, de preferência, de alguma forma, fazê-lo funcionar com if (current_user_can ('manage_themes') e is_logged_in ().

Mas é aí que fica muito mais complicado.


Usamos algo semelhante para configurar detalhes de conexão de banco de dados ao vivo, teste e desenvolvimento.
Tom

20

Adicionar automaticamente títulos dinâmicos a páginas públicas

Testado em: Wordpress 3.0.1

A utilização do código abaixo criará automaticamente títulos de páginas dinâmicos com base nas páginas / postagens exibidas publicamente.

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

Novas funções e recursos - Execute apenas uma vez!

Eu mantenho estes à mão, este é o caminho certo para fazê-los sem um plugin. Eles definem um único campo (prefix_user_roles) no banco de dados de opções e você não precisa de um plugin para defini-los. Consulte a página Codex para obter uma lista de quais recursos estão disponíveis e descrições para o que eles fazem. Você só precisa descomentar um desses blocos, carregar qualquer página e depois comentá-los novamente! Aqui, estou criando uma função que possui os recursos necessários:

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

Às vezes, é útil adicionar / remover de uma função existente, em vez de remover e adicionar novamente uma. Novamente, você só precisa descomentar, recarregar uma página e comentar novamente. Isso armazenará a função / capacidade corretamente na tabela de opções. (Isso permite que você, o desenvolvedor, controle-os e remove a sobrecarga dos plug-ins volumosos que fazem a mesma coisa.) Aqui, estou alterando a função de autor para excluir as postagens publicadas (o padrão), mas permitindo que eles editem as postagens publicadas (o que não é possível para essa função por padrão) - usando * add_cap * ou * remove_cap *.

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

Eu mantenho uma planilha com a grade da página do Codex para sites que modificam dessa maneira, para que eu possa lembrar como as coisas são definidas, embora deixe o código comentado no seu arquivo functions.php funcione. Não deixe esses exemplos descomentados, ou eles serão gravados no banco de dados a cada carregamento da página!


As funções mencionadas acima gravam em um campo no banco de dados de opções. Comentar e descomentá-los é o caminho a percorrer. Existem plugins para funções de usuário, mas se você usar as funções mencionadas acima, não poderá deixar essas funções em execução e NÃO precisará defini-las mais de uma vez ou defini-las com base em se um usuário específico estiver acessando algo. Se você desejar, configure esse usuário com uma função específica e exclusiva. E consulte o codex, tudo o que escrevo acima é 100% correto se você o fizer sem um plug-in. Para quase todos os casos, você só precisa definir as funções de usuário uma vez.
precisa saber é o seguinte

@ tomcat23: Para ilustrar, envolvi-o em uma função para adicionar apenas a função, quando ela ainda não existe. Outra observação: acho que seria mais fácil colocar a função em algum lugar na hierarquia de funções, recuperando os limites de alguma função integrada e, em seguida, adicione / remova os recursos da função integrada. Tornaria mais claro e fácil lembrar se as tampas são colocadas em algum lugar entre ex. administrador e editor. - Espero que você não se importe que eu tenha editado sua resposta. Se o fizer, pls atue de volta. :)
kaiser

1
@ tomcat23 - Água sob a ponte neste momento. Tudo o que estou dizendo é que não estou interessado em culpar, apenas em ter paz para todos seguirem em frente. :)
MikeSchinkel 13/03/11

2
@MikeSchinkel Sim, você está certo. @kaiser Minhas desculpas se eu lhe causei insulto.
tomcat23

1
@ MikeSchinkel: obrigado por trazer a paz de volta. @ Tomcat23: Não, você não fez. Eu posso lidar com esse tipo de crítica. Minhas desculpas também.
kaiser

19

Rodapé de administrador personalizado do Wordpress

// personalizar o texto do rodapé do administrador
função custom_admin_footer () {
        echo 'adicione seu texto de rodapé personalizado e html aqui';
} 
add_filter ('admin_footer_text', 'custom_admin_footer');

Eu uso isso para sites clientes como um simples ponto de referência para entrar em contato comigo como desenvolvedor.


19

Ativar códigos de acesso em widgets

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

18

Função para desativar feeds RSS

Testado em: Wordpress 3.0.1

Você pode desativar os feeds RSS Se você deseja manter o site baseado em Wordpress como estático.

Você pode usar esta função:

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


Obrigado Toscho! a fonte também está disponível em inglês wpengineer.com/287/disable-wordpress-feed
bueltge

16

Altere a mensagem "Howdy" para "Welcome"

Com esta função, você pode personalizar a mensagem "Howdy" no canto superior direito da sua área de administração.
Esta função utiliza o JQuery para alterar a mensagem "Howdy" para "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;
}

Versão PHP, usando gettextfiltro:

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
Isso já não pode ser editado no lado do PHP para que ele não obtenha saída?
hakre

Está funcionando bem aqui nas versões 3.0+, com certeza, mas por que não nas versões mais antigas? Verifique se algum outro plugin que você usa é responsável por isso. O texto aqui foi substituído por JQuery, talvez um plugin JQuery?
Philip
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.