Esta es una lista de funciones útiles de WordPress a las que hago referencia a menudo para mejorar o limpiar mis sitios. Tenga cuidado y haga copias de seguridad.
Ocultar la molestia de actualización de WordPress para todos menos para los administradores
Utilice títulos de WordPress adecuados
Crear un widget de panel de WordPress personalizado
Eliminar todos los widgets del panel
Incluir menús de navegación
Insertar logotipo de inicio de sesión personalizado
Modificar el texto del pie de página del administrador
Estilos y secuencias de comandos en cola
Poner en cola las fuentes de Google
Modificar la longitud del extracto
Cambiar Leer más Enlace
Cambiar más extracto
Desactivar el desorden de emojis
Eliminar comentarios
Cambiar la URL de la galería multimedia
Crear tamaño de miniatura personalizado
Agregar categorías para archivos adjuntos
Agregar etiquetas para archivos adjuntos
Agregar extracto personalizado a las páginas
Crear una cadena global
Imágenes destacadas de soporte
Formulario de búsqueda de soporte
Excluir páginas de la búsqueda
Deshabilitar XMLRPC
Escapar de HTML en publicaciones
Crear configuraciones globales personalizadas
Eliminar la barra de administración de WordPress
Agregar metaetiquetas de Open Graph
Agregar tipo de publicación personalizada
Implementar la preconexión a Google Fonts en temas
Agregar columna de miniaturas a la lista de publicaciones
Agregar clase principal al primer párrafo
Excluir el tipo de publicación personalizada de la búsqueda
Eliminar cadena de consulta de recursos estáticos
Deshabilitar el campo del sitio web desde el formulario de comentarios
Modificar jQuery
Deshabilitar la API de descanso JSON
Tipo de poste de conmutación
Registrador PHP
Mostrar siempre la segunda barra en TinyMCE
Eliminar elementos del menú de administración según la función del usuario
Eliminar elementos del menú de administración según la dirección de correo electrónico (dominio)
Reordenar elementos del menú de administración
Excluir una categoría de los bucles de WordPress
Deshabilite el mensaje "JQMIGRATE: Migrate está instalado, versión 1.4.1"
Cargue scripts pesados de terceros más adelante para obtener un mejor rendimiento
/** * Ocultar la molestia de actualización de WordPress para todos menos para los 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 );
Asegúrese de eliminar la etiqueta <title>
de su encabezado.
/** * Utilice títulos de WordPress adecuados */add_theme_support( 'title-tag' );
/** * Crear un widget de panel de WordPress personalizado */ function panel_widget_function() { echo ' <h2>Widget de panel personalizado</h2> <p>Contenido personalizado aquí</p> '; }función add_dashboard_widgets() { wp_add_dashboard_widget( 'custom_dashboard_widget', 'Widget personalizado de Dashoard', 'dashboard_widget_function'); }add_action('wp_dashboard_setup', 'add_dashboard_widgets');
/** * Eliminar todos los widgets del panel */ 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_segundo']); remove_meta_box('dashboard_activity', 'dashboard', 'normal'); }add_action('wp_dashboard_setup', 'remove_dashboard_widgets');
/** * Incluir menús de navegación */function Register_my_menu() { Register_nav_menu( 'menú de navegación', __( 'Menú de navegación' ) ); }add_action('init', 'register_my_menu');
Inserte esto donde desee que aparezca y guarde el menú en Apariencia -> Menús .
wp_nav_menu( array( 'theme_location' => 'nav-menu' ) );
Aquí está el código para múltiples menús:
function registrar_mis_menús() { registrar_nav_menus( matriz( 'nuevo-menú' => __( 'Nuevo menú' ), 'otro-menú' => __( 'Otro menú' ), 'un-menú-extra' => __( 'Un menú extra' ), ) ); }add_action('init', 'register_my_menus');
/** * Insertar logotipo de inicio de sesión personalizado */ function custom_login_logo() { echo ' <estilo> .login h1 a { imagen de fondo: url(imagen.jpg) !importante; tamaño de fondo: 234px 67px; ancho: 234px; altura: 67 píxeles; mostrar:bloquear; } </estilo> '; }add_action('login_head', 'custom_login_logo');
/** * Modificar texto del pie de página del administrador */ function modificar_footer() { echo 'Creado por <a href="mailto:[email protected]">tú</a>.'; }add_filter('admin_footer_text', 'modify_footer');
/** * Poner en cola estilos y 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', verdadero); wp_enqueue_script( 'script', get_template_directory_uri() . '/js/script.js' ); }add_action('wp_enqueue_scripts', 'custom_scripts');
/** * Poner en cola Google Fonts */ 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');
/** * Modificar longitud del extracto */ function custom_excerpt_length( $length ) { return 25; }add_filter( 'excerpt_length', 'custom_excerpt_length', 999);
/** * Cambiar enlace Leer más */ function custom_read_more_link() { return '<a href="' . get_permalink() . '">Leer más</a>'; }add_filter('the_content_more_link', 'custom_read_more_link');
/** * Cambiar más extracto */ function custom_more_excerpt( $more ) { return '...'; }add_filter('excerpt_more', 'custom_more_excerpt');
/** * Desactivar el desorden de Emoji */ function enable_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' );función enable_emojicons_tinymce( $plugins ) { return is_array( $plugins )? array_diff( $complementos, matriz( 'wpemoji' ) ): matriz(); }
/** * Eliminar comentarios */ // Elimina de la función del menú de administración my_remove_admin_menus() { remove_menu_page( 'edit-comments.php' ); }add_action( 'admin_menu', 'my_remove_admin_menus' );// Elimina de la función de publicación y página remove_comment_support() { remove_post_type_support( 'publicación', 'comentarios' ); remove_post_type_support('página', 'comentarios'); }add_action( 'init', 'remove_comment_support', 100 );// Elimina de la función de barra de administración mytheme_admin_bar_render() { global $wp_admin_bar; $wp_admin_bar->remove_menu('comentarios'); }add_action('wp_before_admin_bar_render', 'mytheme_admin_bar_render');
/** * Cambiar URL de la galería multimedia */ if (vacío( get_option( 'upload_url_path' ) ) ) { update_option( 'upload_url_path', 'http://assets.website.com/wp-content/uploads' ); }
Además, puede filtrar el valor de la opción antes de recuperarlo de la base de datos, lo cual es un poco mejor:
/** * Cambiar URL de la galería multimedia */ add_filter( 'pre_option_upload_url_path', function() { return 'http://assets.website.com/wp-content/uploads'; });
/** * Crear tamaño de miniatura personalizado */ add_image_size( 'miniatura personalizada', 250, 250, true );
Recuperar miniatura
$pulgar = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'miniatura personalizada' );echo $pulgar[0];
Desde WordPress 4.4.0, puedes usar:
the_post_thumbnail_url( $tamaño );
/** * Agregar categorías para archivos adjuntos */ function add_categories_for_attachments() { Register_taxonomy_for_object_type( 'categoría', 'adjunto'); }add_action('init', 'add_categories_for_attachments');
/** * Agregar etiquetas para archivos adjuntos */ function add_tags_for_attachments() { Register_taxonomy_for_object_type( 'post_tag', 'attachment'); }add_action('init', 'add_tags_for_attachments');
/** * Agregar extracto personalizado a las páginas */ function add_page_excerpt() { add_post_type_support( 'página', array( 'excerpt' ) ); }add_action('init', 'add_page_excerpt');
/** * Crear una cadena global */ function global_string() { return 'String'; }
Recuperar campo
eco global_string();
/** * Admite imágenes destacadas */ add_theme_support( 'post-miniaturas' );
/** * Formulario de búsqueda de soporte */ add_theme_support( 'html5', array( 'formulario de búsqueda' ) );
/** * Excluyendo páginas de la búsqueda */ function excluir_pages_from_search() { global $wp_post_types; $wp_post_types['página']->exclude_from_search = verdadero; }add_action('init', 'exclude_pages_from_search');
/** * Deshabilitar xmlrpc.php */ add_filter( 'xmlrpc_enabled', '__return_false' );remove_action( 'wp_head', 'rsd_link' );remove_action( 'wp_head', 'wlwmanifest_link' );
/** * Escapar HTML en etiquetas <code> o <pre><code>. */ function escapeHTML($arr) { if (version_compare(PHP_VERSION, '5.2.3') >= 0) { $salida = htmlspecialchars($arr[2], ENT_NOQUOTES, get_bloginfo('charset'), false); } else { $specialChars = array( '&' => '&', '<' => '<', '>' => '>' ); // decodificar datos ya convertidos $data = htmlspecialchars_decode( $arr[2] ); // escapar de todos los datos dentro de <pre> $output = strtr( $data, $specialChars ); } if (! vacío($salida)) { return $arr[1] . $salida. $arr[3]; } else { return $arr[1] . $arr[2] . $arr[3]; } }function filterCode($data) { // Descomentar si desea escapar de algo dentro de una etiqueta <pre> //$modifiedData = preg_replace_callback( '@(<pre.*>)(.*)(</pre>) @isU', 'escapeHTML', $datos); $modifiedData = preg_replace_callback( '@(<código.*>)(.*)(</código>)@isU', 'escapeHTML', $datos); $modifiedData = preg_replace_callback( '@(<tt.*>)(.*)(</tt>)@isU', 'escapeHTML', $modifiedData ); devolver $datosmodificados; }add_filter( 'content_save_pre', 'filterCode', 9 );add_filter( 'excerpt_save_pre', 'filterCode', 9 );
Modificado de Escape HTML.
/** * Crear configuraciones globales personalizadas */ function custom_settings_page() { ?> <div clase="envoltura"> <h1>Configuración personalizada</h1> <form método="post" action="options.php"> <?php settings_fields( 'sección' ); do_settings_sections( 'opciones-tema' ); botón_enviar(); ?> </formulario> </div><?php }función custom_settings_add_menu() { add_theme_page( 'Configuraciones personalizadas', 'Configuraciones personalizadas', 'manage_options', 'configuraciones personalizadas', 'página_configuraciones personalizadas', nulo, 99 ); }add_action( 'admin_menu', 'custom_settings_add_menu' );// Ejemplo de función de configuración settings_twitter() { ?> <input type="text" name="twitter" id="twitter" value="<?php echo get_option('twitter'); ?>" /><?php }función custom_settings_page_setup() { add_settings_section( 'sección' , 'Todas las configuraciones', nulo, 'opciones de tema'); add_settings_field('twitter', 'Nombre de usuario de Twitter', 'setting_twitter', 'opciones de tema', 'sección'); Register_setting('sección', 'twitter'); }add_action('admin_init', 'custom_settings_page_setup');
Recuperar campo
echo get_option('twitter');
Modificado desde Crear una página de configuración de tema de WordPress con la API de configuración.
/** * Eliminar la barra de administración de WordPress */function remove_admin_bar() { remove_action( 'wp_head', '_admin_bar_bump_cb' ); }add_action('get_header', 'remove_admin_bar');
/** * Agregar metaetiquetas de Open Graph */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 ), 'miniatura'); } $extracto = strip_tags( $post->post_content); $extracto_more = ''; if ( strlen($extracto) > 155) { $extracto = substr( $extracto,0,155); $excerpt_more = ' ...'; } $extracto = str_replace( '"', '', $extracto ); $extracto = str_replace( "'", '', $extracto ); $extractopalabras = preg_split( '/[nrt ]+/ ', $extracto, -1, PREG_SPLIT_NO_EMPTY ); array_pop( $extractos ); $extracto = implosionar( ' ', $excerptwords ) $excerpt_more; ?><meta nombre="autor" contenido="Su nombre"> <meta nombre="descripción" contenido="<?php echo $extracto; ?>"> <meta propiedad="og:title" content="<?php echo the_title(); ?>"> <meta propiedad="og:descripción" contenido="<?php echo $extracto; ?>"> <meta propiedad="og:tipo" contenido="artículo"> <meta propiedad="og:url" content="<?php echo the_permalink(); ?>"> <meta property="og:site_name" content="Nombre de su sitio"> <meta propiedad="og:image" content="<?php echo $img_src[0]; ?>"><?php } más {retorno; } }add_action('wp_head', 'meta_og', 5);
/** * Agregar tipo de publicación personalizada */function create_custom_post() { Register_post_type( 'custom-post', // slug para tipo de publicación personalizada array( 'labels' => array( 'nombre' => __( 'Publicación personalizada' ), ), 'público' => verdadero, 'jerárquico' => verdadero, 'has_archive' => verdadero, 'soporta' => matriz ('título', 'editor', 'extracto', 'miniatura' ), 'can_export' => verdadero, 'taxonomías' => array( 'post_tag', 'categoría' ) )); }add_action('init', 'create_custom_post');
/** * Implementar la preconexión a Google Fonts en los temas */function veintefifteen_resource_hints( $urls, $relation_type ) { // Comprueba si el asunto lleva la fuente de las fuentes de Google y `$relation_type` es igual a la preconexión. // Reemplace `enqueue_font_id` por el `ID` utilizado al cargar la fuente. if ( wp_style_is( 'enqueue_font_id', 'queue' ) && 'preconnect' === $relation_type ) { // Comprueba si la versión de WordPress es mayor o igual a 4.7 // para garantizar la compatibilidad con versiones anteriores // porque 4.7 se ha vuelto necesario devolver una matriz en lugar de una cadena if ( version_compare( $GLOBALS['wp_version'], '4.7-alpha', '>=' ) ) { // Matriz con URL de Google Fonts y crossorigin $urls[] = array( 'href' => 'https://fonts.gstatic.com', 'crossorigin', ); } else { // Cadena con URL de Google Fonts $urls[] = 'https://fonts.gstatic.com'; } } devolver $url; }add_filter( 'wp_resource_hints', 'veinticinco_resource_hints', 10, 2);
/** * Agregar columna de miniaturas a la lista de publicaciones */add_image_size( 'admin-list-thumb', 80, 80, false );function wpcs_add_thumbnail_columns( $columns ) { if ( !is_array( $columnas ) ) $columnas = matriz(); $nuevo = matriz(); foreach( $columns as $key => $title ) { if ( $key == 'title' ) // Coloque la columna Miniatura antes de la columna Título $new['featured_thumb'] = __( 'Imagen'); $nuevo[$clave] = $título; } devolver $nuevo; }función wpcs_add_thumbnail_columns_data( $columna, $post_id ) { switch ($columna ) { case 'featured_thumb': echo '<a href="' . $post_id . '">'; echo the_post_thumbnail( 'admin-list-thumb' ); eco '</a>'; romper; } }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); }
/** * Agregar clase principal al primer párrafo */function first_paragraph( $content ) { return preg_replace( '/<p([^>]+)?>/', '<p$1 class="lead">', $contenido, 1 ); }add_filter('el_contenido', 'primer_párrafo');
Agrega una clase lead
al primer párrafo de the_content.
/** * Excluir el tipo de publicación personalizada de la búsqueda */function excluirPages( $query ) {if ($query->is_search ) { $query->set( 'post_type', 'post' ); } devolver $consulta; }add_filter('pre_get_posts','excludePages');
/** * Eliminar cadena de consulta de recursos estáticos */ function remove_cssjs_ver( $src ) { if ( strpos( $src, '?ver=' ) ) $src = remove_query_arg( 'ver', $src ); devolver $fuente; }add_filter( 'style_loader_src', 'remove_cssjs_ver', 10, 2); add_filter( 'script_loader_src', 'remove_cssjs_ver', 10, 2);
/** * Modificar jQuery */función 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');
/** * Deshabilitar el campo del sitio web desde el formulario de comentarios */function enable_website_field( $field ) { si( isset($campo['url']) ) { desarmado( $campo['url'] ); } devolver campo $; }add_filter('comment_form_default_fields', 'disable_website_field');
/** * Deshabilitar API REST JSON */add_filter('json_enabled', '__return_false');add_filter('json_jsonp_enabled', '__return_false');
/** * Cambiar tipo de publicación */function switch_post_type ($old_post_type, $new_post_type) { global $wpdb; // Ejecutar la consulta de actualización $wpdb->update( $wpdb->posts, // Establecer matriz( 'post_type' => $new_post_type), // Donde matriz( 'post_type' => $old_post_type ) ); }
/** * Registrador PHP */function php_logger( $datos ) { $salida = $datos; if ( is_array( $salida ) ) $salida = implosionar( ',', $salida ); // imprime el resultado en la consola de JavaScript echo "<script>console.log( 'PHP LOG: " . $output . "' );</script>"; }
/** * Mostrar siempre la segunda barra en TinyMCE */function show_tinymce_toolbar( $in ) { $in['wordpress_adv_hidden'] = false; devolver $en; }add_filter('tiny_mce_before_init', 'show_tinymce_toolbar');
/** * Clonar el rol de usuario administrador */function clone_admin_role() { global $wp_roles; if (! isset ($wp_roles)) $wp_roles = nuevo WP_Roles(); $adm = $wp_roles->get_role( 'administrador' ); // Agregar nuevo rol "Cliente" con todas las capacidades de administrador $wp_roles->add_role( 'client', 'Client', $adm->capabilities ); }add_action( 'init', 'clone_admin_role' );/** * Especifica qué elementos del menú de administración son visibles para los usuarios con el rol "Cliente" */function remove_dashboard_menus() { if ( current_user_can( 'cliente' ) ) { // Ocultar Actualizaciones en el menú del Panel remove_submenu_page( 'index.php', 'update-core.php' ); // Ocultar comentarios remove_menu_page( 'edit-comments.php' ); // Ocultar complementos remove_menu_page( 'plugins.php' ); // Ocultar temas, personalizador y widgets en el menú Apariencia remove_submenu_page( 'themes.php', 'themes.php' ); remove_submenu_page( 'themes.php', 'customize.php?return=' . urlencode( $_SERVER['REQUEST_URI'] ) ); remove_submenu_page('themes.php', 'widgets.php'); // Ocultar herramientas remove_menu_page( 'tools.php' ); // Ocultar configuración general remove_menu_page( 'options-general.php' ); } }add_action('admin_menu', 'remove_dashboard_menus');
/** * Especifique qué usuarios pueden ver los elementos del menú de administración según su dirección de correo electrónico */function remove_dashboard_menus() { $user_data = get_userdata( get_current_user_id() ); $usuario_correo electrónico = isset ($usuario_datos->usuario_correo electrónico)? $datos_usuario->correo_correo_usuario : ''; if (! strpos( $user_email, '@yourcompany.com' ) ) { // Ocultar actualizaciones en el menú del Panel remove_submenu_page( 'index.php', 'update-core.php' ); // Ocultar comentarios remove_menu_page( 'edit-comments.php' ); // Ocultar complementos remove_menu_page( 'plugins.php' ); // Ocultar temas, personalizador y widgets en el menú Apariencia remove_submenu_page( 'themes.php', 'themes.php' ); remove_submenu_page( 'themes.php', 'customize.php?return=' . urlencode( $_SERVER['REQUEST_URI'] ) ); remove_submenu_page('themes.php', 'widgets.php'); // Ocultar herramientas remove_menu_page( 'tools.php' ); // Ocultar configuración general remove_menu_page( 'options-general.php' ); } }add_action('admin_menu', 'remove_dashboard_menus');
/** * Reordenar el menú de administración */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=[your_post_type_slug]', 'upload.php', 'edit-comments.php', 'separator2', 'themes.php', 'plugins.php', 'users.php', 'herramientas .php', 'opciones-general.php' ); } }add_filter( 'orden_menú_personalizado', 'orden_menú_personalizado' );add_filter( 'orden_menú_personalizado', 'orden_menú_personalizado' );
/** * Excluir una categoría de todos los bucles de WordPress */add_action( 'pre_get_posts', function( $query ) { // devolución de llamada anónima global $wp_query; // ID de categoría codificada, pero puede ser dinámica: esc_attr(get_option('your-cat-id')); $excluded_cat_id = 25; // agrega ID de categoría a la existente, evita sobrescribirla $cat[] = $query->get( 'cat' ); $gato[] = "-" . $excluido_cat_id; $consulta->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 y herramientas de análisis de rendimiento similares siempre se quejan de secuencias de comandos (y estilos) que bloquean el procesamiento, TTL de caché corto, etc. La mayoría de estas secuencias de comandos y estilos provienen de fuentes de terceros que no podemos controlar: el propio Tag Manager y Analytics de Google, Facebook. Pixel, otros rastreadores y scripts de chat, etc. Sin embargo, podemos cargarlos solo cuando un usuario real interactúa con una página, lo que reduce significativamente la métrica de tiempo de interacción y obtiene resultados de rendimiento mucho más altos.
Dependiendo de dónde le guste que estén estos scripts de terceros, puede usar la acción wp_footer
para imprimir el código en el pie de página o colocarlo en su script app.js
principal que, a su vez, se pone en cola en la acción wp_enqueue_scripts
.
<script>var disparado = falso; window.addEventListener('scroll', () => { if (despedido === falso) { despedido = verdadero; setTimeout(() => { // Los scripts de marketing van aquí. }, 1000) // 1000 ms o 1 s funciona bien, pero puedes ajustar este tiempo de espera. }});</script>