Esta é uma lista de funções úteis do WordPress que costumo consultar para aprimorar ou limpar meus sites. Tenha cuidado e faça backups.
Ocultar a atualização do WordPress para todos, exceto administradores
Utilize títulos WordPress adequados
Crie um widget de painel WordPress personalizado
Remover todos os widgets do painel
Incluir menus de navegação
Insira logotipo de login personalizado
Modificar texto do rodapé do administrador
Enfileirar estilos e scripts
Enfileirar fontes do Google
Modificar comprimento do trecho
Alterar link Leia mais
Alterar mais trecho
Desativar bagunça de emojis
Remover comentários
Alterar URL da Galeria de Mídia
Crie um tamanho de miniatura personalizado
Adicionar categorias para anexos
Adicionar tags para anexos
Adicionar trecho personalizado às páginas
Crie uma string global
Imagens em destaque de suporte
Formulário de pesquisa de suporte
Excluindo páginas da pesquisa
Desabilitar XMLRPC
Escape de HTML em postagens
Crie configurações globais personalizadas
Remover barra de administração do WordPress
Adicionar metatags de gráfico aberto
Adicionar tipo de postagem personalizado
Implementar o Preconnect to Google Fonts em temas
Adicionar coluna de miniatura à listagem de postagens
Adicionar classe lead ao primeiro parágrafo
Excluir tipo de postagem personalizada da pesquisa
Remover string de consulta de recursos estáticos
Desativar campo do site no formulário de comentários
Modificar jQuery
Desativar API JSON Rest
Trocar tipo de postagem
Registrador PHP
Sempre mostrar a segunda barra no TinyMCE
Remover itens do menu do administrador dependendo da função do usuário
Remover itens do menu Admin dependendo do endereço de e-mail (domínio)
Reordenar itens do menu do administrador
Excluir uma categoria dos loops do WordPress
Desabilite a mensagem "JQMIGRATE: Migrate está instalado, versão 1.4.1"
Carregue scripts pesados de terceiros posteriormente para obter melhor desempenho
/** * Ocultar aviso de atualização do WordPress para todos, exceto administradores */ function hide_update_notice_to_all_but_admin() { if ( !current_user_can( 'update_core' ) ) { remove_action( 'admin_notices', 'update_nag', 3 ); } }add_action( 'admin_head', 'hide_update_notice_to_all_but_admin', 1);
Certifique-se de remover a tag <title>
do seu cabeçalho.
/** * Utilize títulos WordPress adequados */add_theme_support( 'title-tag' );
/** * Criar widget de painel personalizado do WordPress */ function dashboard_widget_function() { echo ' <h2>Widget de painel personalizado</h2> <p>Conteúdo personalizado aqui</p> '; }function add_dashboard_widgets() { wp_add_dashboard_widget( 'custom_dashboard_widget', 'Widget Dashoard personalizado', 'dashboard_widget_function' ); }add_action( 'wp_dashboard_setup', 'add_dashboard_widgets' );
/** * Remover todos os widgets do painel */ function remove_dashboard_widgets() { global $wp_meta_boxes; unset( $wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press'] ); unset( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links'] ); unset( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now'] ); unset( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins'] ); unset( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_drafts'] ); unset( $wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments'] ); unset( $wp_meta_boxes['dashboard']['side']['core']['dashboard_primary'] ); unset( $wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary'] ); remove_meta_box('painel_atividade', 'painel', 'normal'); }add_action( 'wp_dashboard_setup', 'remove_dashboard_widgets' );
/** * Inclui menus de navegação */function Register_my_menu() { Register_nav_menu( 'nav-menu', __( 'Navigation Menu' ) ); }add_action( 'init', 'register_my_menu' );
Insira-o onde deseja que apareça e salve o menu em Appearance -> Menus .
wp_nav_menu( array( 'theme_location' => 'nav-menu' ));
Aqui está o código para vários menus:
function register_my_menus() { register_nav_menus( array( 'new-menu' => __( 'Novo Menu' ), 'outro-menu' => __( 'Outro Menu' ), 'an-extra-menu' => __( 'Um menu extra'), ) ); }add_action( 'init', 'register_my_menus' );
/** * Inserir logotipo de login personalizado */ function custom_login_logo() { echo ' <style> .login h1 a { background-image: url(image.jpg) !important; tamanho do fundo: 234px 67px; largura:234px; altura:67px; exibição: bloco; } </style> '; }add_action( 'login_head', 'custom_login_logo' );
/** * Modificar o texto do rodapé do administrador */ function modificar_footer() { echo 'Criado por <a href="mailto:[email protected]">você</a>.'; }add_filter( 'admin_footer_text', 'modify_footer' );
/** * Enfileirar estilos e scripts */ function custom_scripts() { wp_enqueue_style( 'bootstrap', get_template_directory_uri() . '/css/bootstrap.min.css', array(), '3.3.6' ); wp_enqueue_style('estilo', get_template_directory_uri(). '/css/style.css'); wp_enqueue_script( 'bootstrap', get_template_directory_uri() . '/js/bootstrap.min.js', array('jquery'), '3.3.6', true ); wp_enqueue_script('script', get_template_directory_uri(). '/js/script.js'); }add_action( 'wp_enqueue_scripts', 'custom_scripts' );
/** * Enfileirar fontes do Google */ function google_fonts() { wp_register_style( 'OpenSans', '//fonts.googleapis.com/css?family=Open+Sans:400,600,700,800' ); wp_enqueue_style('OpenSans'); }add_action( 'wp_print_styles', 'google_fonts' );
/** * Modifica o comprimento do trecho */ function custom_excerpt_length( $length ) { return 25; }add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );
/** * Alterar link Leia mais */ function custom_read_more_link() { return '<a href="' . get_permalink() . '">Leia mais</a>'; }add_filter( 'the_content_more_link', 'custom_read_more_link' );
/** * Alterar mais trecho */ function custom_more_excerpt( $more ) { return '...'; }add_filter( 'excerpt_more', 'custom_more_excerpt' );
/** * Desativar bagunça de Emoji */ function disable_wp_emojicons() { remove_action( 'admin_print_styles', 'print_emoji_styles' ); remove_action('wp_head', 'print_emoji_detection_script', 7); remove_action('admin_print_scripts', 'print_emoji_detection_script'); remove_action('wp_print_styles', 'print_emoji_styles'); remove_filter('wp_mail', 'wp_staticize_emoji_for_email'); remove_filter('the_content_feed', 'wp_staticize_emoji'); remove_filter('comment_text_rss', 'wp_staticize_emoji'); add_filter('tiny_mce_plugins', 'disable_emojicons_tinymce'); add_filter('emoji_svg_url', '__return_false'); }add_action( 'init', 'disable_wp_emojicons' );função desabilitar_emojicons_tinymce( $plugins ) { return is_array( $plugins ) ? array_diff($plugins, array( 'wpemoji' ) ): array(); }
/** * Remover comentários */ // Remove do menu adminfunction my_remove_admin_menus() { remove_menu_page( 'edit-comments.php' ); }add_action( 'admin_menu', 'my_remove_admin_menus' );// Remove da postagem e das páginasfunction remove_comment_support() { remove_post_type_support( 'post', 'comments' ); remove_post_type_support('página', 'comentários'); }add_action( 'init', 'remove_comment_support', 100 );// Remove do admin barfunction mytheme_admin_bar_render() { global $wp_admin_bar; $wp_admin_bar->remove_menu( 'comentários'); }add_action( 'wp_before_admin_bar_render', 'mytheme_admin_bar_render' );
/** * Alterar URL da Galeria de Mídia */ if ( vazio( get_option( 'upload_url_path' ) ) ) { update_option( 'upload_url_path', 'http://assets.website.com/wp-content/uploads' ); }
Além disso, você pode filtrar o valor da opção antes de recuperá-lo do banco de dados, o que é um pouco melhor:
/** * Alterar URL da Galeria de Mídia */ add_filter( 'pre_option_upload_url_path', function() { return 'http://assets.website.com/wp-content/uploads'; });
/** * Criar tamanho de miniatura personalizado */ add_image_size( 'custom-thumbnail', 250, 250, true );
Recuperar miniatura
$thumb = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'miniatura personalizada' );echo $thumb[0];
Desde o WordPress 4.4.0, você pode usar:
the_post_thumbnail_url($tamanho);
/** * Adicionar categorias para anexos */ function add_categories_for_attachments() { register_taxonomy_for_object_type( 'category', 'attachment' ); }add_action( 'init', 'add_categories_for_attachments');
/** * Adicionar tags para anexos */ function add_tags_for_attachments() { register_taxonomy_for_object_type( 'post_tag', 'attachment' ); }add_action( 'init', 'add_tags_for_attachments');
/** * Adicionar trecho personalizado às páginas */ function add_page_excerpt() { add_post_type_support( 'page', array( 'excerpt' ) ); }add_action( 'init', 'add_page_excerpt' );
/** * Cria uma string global */ function global_string() { return 'String'; }
Recuperar campo
eco global_string();
/** * Suporta imagens em destaque */ add_theme_support( 'post-thumbnails' );
/** * Suporte ao formulário de pesquisa */ add_theme_support( 'html5', array( 'search-form' ) );
/** * Excluindo páginas da pesquisa */ function exclude_pages_from_search() { global $wp_post_types; $wp_post_types['page']->exclude_from_search = verdadeiro; }add_action( 'init', 'exclude_pages_from_search' );
/** * Desativar xmlrpc.php */ add_filter( 'xmlrpc_enabled', '__return_false' );remove_action( 'wp_head', 'rsd_link' );remove_action( 'wp_head', 'wlwmanifest_link' );
/** * Escape do HTML nas tags <code> ou <pre><code>. */ function escapeHTML($arr) { if (version_compare(PHP_VERSION, '5.2.3') >= 0) { $output = htmlspecialchars($arr[2], ENT_NOQUOTES, get_bloginfo('charset'), false); } else { $specialChars = array( '&' => '&', '<' => '<', '>' => '>' ); // decodifica dados já convertidos $data = htmlspecialchars_decode( $arr[2] ); // escapa de todos os dados dentro de <pre> $output = strtr( $data, $specialChars ); } if (! vazio($saída)) { return $arr[1] . $saída. $arr[3]; } else { return $arr[1] . $arr[2] . $arr[3]; } }function filterCode($data) { // Remova o comentário se quiser escapar de qualquer coisa dentro de uma tag <pre> //$modifiedData = preg_replace_callback( '@(<pre.*>)(.*)(</pre>) @isU', 'escapeHTML', $dados); $modifiedData = preg_replace_callback( '@(<code.*>)(.*)(</code>)@isU', 'escapeHTML', $data ); $modifiedData = preg_replace_callback( '@(<tt.*>)(.*)(</tt>)@isU', 'escapeHTML', $modifiedData ); retornar $dadosmodificados; }add_filter( 'content_save_pre', 'filterCode', 9 );add_filter( 'excerpt_save_pre', 'filterCode', 9 );
Modificado de Escape HTML.
/** * Criar configurações globais personalizadas */ function custom_settings_page() { ?> <div class="wrap"> <h1>Configurações personalizadas</h1> <form method="post" action="options.php"> <?php settings_fields( 'seção' ); do_settings_sections('opções de tema'); enviar_botão(); ?> </form> </div><?php }function custom_settings_add_menu() { add_theme_page( 'Configurações personalizadas', 'Configurações personalizadas', 'manage_options', 'custom-settings', 'custom_settings_page', null, 99 ); }add_action( 'admin_menu', 'custom_settings_add_menu' );// Exemplo de configuraçãofunction setting_twitter() { ?> <input type="text" name="twitter" id="twitter" value="<?php echo get_option('twitter'); ?>" /><?php }function custom_settings_page_setup() { add_settings_section( 'seção' , 'Todas as configurações', null, 'opções de tema' ); add_settings_field('twitter', 'Nome de usuário do Twitter', 'setting_twitter', 'opções de tema', 'seção' ); registrar_setting('seção', 'twitter'); }add_action( 'admin_init', 'custom_settings_page_setup' );
Recuperar campo
eco get_option('Twitter');
Modificado em Criar uma página de configurações de tema WordPress com a API de configurações.
/** * Remover barra de administração do WordPress */function remove_admin_bar() { remove_action( 'wp_head', '_admin_bar_bump_cb' ); }add_action( 'get_header', 'remove_admin_bar' );
/** * Adicionar metatags de gráfico aberto */function meta_og() { global $post; if ( is_single() ) { if( has_post_thumbnail( $post->ID ) ) { $img_src = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'thumbnail' ); } $excerto = strip_tags( $post->post_content ); $excerto_mais = ''; if ( strlen($excerto ) > 155) { $excerto = substr( $excerto,0,155 ); $excerto_mais = '...'; } $excerpt = str_replace( '"', '', $excerpt ); $excerpt = str_replace( "'", '', $excerpt ); $excerptwords = preg_split( '/[nrt ]+/ ', $excerto, -1, PREG_SPLIT_NO_EMPTY ); implode( ' ', $excerptwords ) $excerpt_more;><meta name="autor" content="Seu nome">. <meta name="descrição" content="<?php echo $excerpt; ?>"> <meta property="og:title" content="<?php echo the_title(); ?>"> <meta property="og:description" content="<?php echo $excerpt; ?>"> <meta propriedade = "og:type" content = "artigo"> <meta property="og:url" content="<?php echo the_permalink(); ?>"> <meta property="og:site_name" content="Nome do seu site"> <meta property="og:image" content="<?php echo $img_src[0]; ?>"><?php } senão { retornar; } }add_action('wp_head', 'meta_og', 5);
/** * Adicionar tipo de postagem personalizada */function create_custom_post() { register_post_type( 'custom-post', // slug para tipo de postagem personalizada array( 'labels' => array( 'name' => __( 'Custom Post' ), ), 'público' => verdadeiro, 'hierárquico' => verdadeiro, 'has_archive' => true, 'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail' ), 'can_export' => true, 'taxonomias' => array( 'post_tag', 'categoria' ) )); }add_action('init', 'create_custom_post');
/** * Implementar pré-conexão com Google Fonts em temas */function twentyfifteen_resource_hints( $urls, $relation_type ) { // Verifica se o assunto está carregando a fonte das fontes google e o `$relation_type` é igual a pré-conexão. // Substitua `enqueue_font_id` pelo `ID` usado no carregamento da fonte. if ( wp_style_is( 'enqueue_font_id', 'queue' ) && 'preconnect' === $relation_type ) { // Verifica se a versão do WordPress é maior ou igual a 4.7 // para garantir compatibilidade com versões mais antigas // porque o 4.7 tornou-se necessário retornar um array em vez de string if ( version_compare( $GLOBALS['wp_version'], '4.7-alpha', '>=' ) ) { // Array com url google fonts e crossorigin $urls[] = array( 'href' => 'https://fonts.gstatic.com', 'crossorigin', ); } else { // String com url google fonts $urls[] = 'https://fonts.gstatic.com'; } } return $urls; }add_filter( 'wp_resource_hints', 'vinte e quinze_resource_hints', 10, 2 );
/** * Adicionar coluna de miniatura à listagem de postagens */add_image_size( 'admin-list-thumb', 80, 80, false );function wpcs_add_thumbnail_columns( $columns ) { if ( !is_array( $colunas ) ) $colunas = array(); $novo = array(); foreach( $columns as $key => $title ) { if ( $key == 'title' ) // Coloque a coluna Miniatura antes da coluna Título $new['featured_thumb'] = __( 'Image'); $novo[$chave] = $título; } retornar $ novo; }função wpcs_add_thumbnail_columns_data( $column, $post_id ) { switch ( $column ) { case 'featured_thumb': echo '<a href="' . $post_id . '">'; echo the_post_thumbnail('admin-list-thumb'); eco '</a>'; quebrar; } }if (function_exists( 'add_theme_support' ) ) { add_filter( 'manage_posts_columns' , 'wpcs_add_thumbnail_columns' ); add_action( 'manage_posts_custom_column', 'wpcs_add_thumbnail_columns_data', 10, 2); }
/** * Adicionar classe principal ao primeiro parágrafo */function first_paragraph( $content ) { return preg_replace( '/<p([^>]+)?>/', '<p$1 class="lead">', $conteúdo, 1); }add_filter( 'the_content', 'first_paragraph' );
Adiciona uma classe lead
ao primeiro parágrafo em the_content.
/** * Excluir tipo de postagem personalizada da pesquisa */function excludePages( $query ) {if ( $query->is_search ) { $query->set( 'post_type', 'post' ); } retornar $consulta; }add_filter( 'pre_get_posts','excludePages' );
/** * Remover string de consulta de recursos estáticos */ function remove_cssjs_ver( $src ) { if ( strpos( $src, '?ver=' ) ) $src = remove_query_arg( 'ver', $src ); retornar $src; }add_filter( 'style_loader_src', 'remove_cssjs_ver', 10, 2 );add_filter( 'script_loader_src', 'remove_cssjs_ver', 10, 2 );
/** * Modificar jQuery */function modificar_jquery() { wp_deregister_script( 'jquery' ); wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js', falso, '3.2.1'); wp_enqueue_script('jquery'); }if (!is_admin()) add_action('wp_enqueue_scripts', 'modify_jquery');
/** * Desativa o campo do site no formulário de comentários */function disable_website_field( $field ) { if( isset($campo['url']) ) { unset($campo['url']); } return $campo; }add_filter('comment_form_default_fields', 'disable_website_field');
/** * Desativar API JSON REST */add_filter('json_enabled', '__return_false');add_filter('json_jsonp_enabled', '__return_false');
/** * Alternar tipo de postagem */function switch_post_type ( $old_post_type, $new_post_type ) { global $wpdb; // Execute a consulta de atualização $wpdb->update( $wpdb->posts, // Definir array( 'post_type' => $new_post_type), // Onde array( 'post_type' => $old_post_type ) ); }
/** * PHP Logger */function php_logger( $data ) { $output = $data; if (is_array($saída)) $saída=implode(',', $saída); // imprime o resultado no console JavaScript echo "<script>console.log( 'PHP LOG: " . $output . "' );</script>"; }
/** * Sempre mostra a segunda barra no TinyMCE */function show_tinymce_toolbar( $in ) { $in['wordpress_adv_hidden'] = false; retornar $in; }add_filter( 'tiny_mce_before_init', 'show_tinymce_toolbar' );
/** * Clonar a função de usuário administrador */function clone_admin_role() { global $wp_roles; if ( ! isset( $wp_roles ) ) $wp_roles = new WP_Roles(); $adm = $wp_roles->get_role( 'administrador' ); // Adiciona nova função "Cliente" com todos os recursos administrativos $wp_roles->add_role( 'client', 'Client', $adm->capabilities ); }add_action( 'init', 'clone_admin_role' );/** * Especifique quais itens do menu de administração são visíveis para usuários com função "Cliente" */function remove_dashboard_menus() { if ( current_user_can( 'client' ) ) { // Ocultar Atualizações no menu Dashboard remove_submenu_page( 'index.php', 'update-core.php' ); // Ocultar comentários remove_menu_page( 'edit-comments.php' ); // Ocultar plug-ins remove_menu_page( 'plugins.php' ); // Ocultar temas, personalizador e widgets no menu Aparência remove_submenu_page( 'themes.php', 'themes.php' ); remove_submenu_page('themes.php', 'customize.php?return='.urlencode($_SERVER['REQUEST_URI'])); remove_submenu_page('temas.php', 'widgets.php'); // Ocultar ferramentas remove_menu_page( 'tools.php' ); // Ocultar configurações gerais remove_menu_page( 'options-general.php' ); } }add_action( 'admin_menu', 'remove_dashboard_menus' );
/** * Especifique quais usuários podem ver os itens do menu do administrador com base em seus endereços de e-mail */function remove_dashboard_menus() { $user_data = get_userdata( get_current_user_id() ); $user_email = isset( $user_data->user_email ) ? $user_data->user_email: ''; if ( ! strpos( $user_email, '@yourcompany.com' ) ) { // Ocultar atualizações no menu do painel remove_submenu_page( 'index.php', 'update-core.php' ); // Ocultar comentários remove_menu_page( 'edit-comments.php' ); // Ocultar plug-ins remove_menu_page( 'plugins.php' ); // Ocultar temas, personalizador e widgets no menu Aparência remove_submenu_page( 'themes.php', 'themes.php' ); remove_submenu_page('themes.php', 'customize.php?return='.urlencode($_SERVER['REQUEST_URI'])); remove_submenu_page('temas.php', 'widgets.php'); // Ocultar ferramentas remove_menu_page( 'tools.php' ); // Ocultar configurações gerais remove_menu_page( 'options-general.php' ); } }add_action( 'admin_menu', 'remove_dashboard_menus' );
/** * Reordenar menu de administração */function custom_menu_order( $menu_ord ) { if ( ! $menu_ord ) { return true; } return array( 'index.php', 'separator1', 'edit.php?post_type=page', 'editar.php', 'edit.php?post_type=[seu_post_type_slug]', 'upload.php', 'edit-comments.php', 'separator2', 'themes.php', 'plugins.php', 'users.php', 'ferramentas .php', 'opções-geral.php' ); } }add_filter( 'custom_menu_order', 'custom_menu_order' );add_filter( 'menu_order', 'custom_menu_order' );
/** * Excluir uma categoria de todos os loops do WordPress */add_action( 'pre_get_posts', function( $query ) { // retorno de chamada anônimo $wp_query global; // ID da categoria codificado, mas pode ser dinâmico: esc_attr(get_option('your-cat-id')); $excluído_cat_id = 25; // adiciona o ID da categoria ao existente, evitando sobrescrevê-lo $cat[] = $query->get( 'cat' ); $gato[] = "-" . $excluído_cat_id; $query->set('gato', $gato); } });
add_action('wp_default_scripts', function ($scripts) { if (!empty($scripts->registered['jquery'])) { $scripts->registered['jquery']->deps = array_diff($scripts-> registrado['jquery']->deps, ['jquery-migrate']); } });
Lighthouse e ferramentas de análise de desempenho semelhantes sempre reclamam de scripts (e estilos) de bloqueio de renderização, TTL de cache curto, etc. A maioria desses scripts e estilos vem de fontes de terceiros que não podemos controlar - o próprio Tag Manager e Analytics do Google, Facebook Pixel, outros rastreadores e scripts de bate-papo, etc. No entanto, só podemos carregá-los quando um usuário real interage com uma página, reduzindo significativamente a métrica Time To Interactive e obtendo resultados de desempenho muito mais elevados.
Dependendo de onde você deseja que esses scripts de terceiros estejam, você pode usar a ação wp_footer
para imprimir o código no rodapé ou colocá-lo em seu script app.js
principal que, por sua vez, é enfileirado na ação wp_enqueue_scripts
.
<script>var disparado = false; window.addEventListener('scroll', () => { if (disparado === falso) { disparado = verdadeiro; setTimeout(() => { // Os scripts de marketing vão aqui. }, 1000) // 1000ms ou 1s funcionam bem, mas você pode ajustar esse tempo limite. }});</script>