La mejor colección de código para tu archivo 'functions.php'

9 sept 2010, 11:29:00
Vistas: 169K
Votos: 346

Al igual que muchos otros que ahora están viendo esta publicación, he estado leyendo varios blogs, foros y grupos de discusión para aprender y mejorar mis habilidades en WordPress. Durante los últimos 12 meses, me he propuesto sustituir el uso de plugins añadiendo código a mi archivo functions.php.

Si bien estoy completamente de acuerdo en que los plugins son muy útiles en muchas situaciones, mi experiencia demostró que en el 90% de los casos, aunque existe un plugin, utilizarlo podría crear complicaciones innecesarias y problemas de compatibilidad. Además, en muchos casos, estos plugins añadían menús y otros elementos administrativos que no quiero ni necesito.

En la mayoría de los casos, he descubierto que al analizar el código de los plugins, pude extraer el fragmento de código que quería e implementarlo directamente en mi functions.php. Esto me proporcionó exactamente la funcionalidad que necesitaba sin tener que incluir elementos innecesarios.

Así que el propósito de esta publicación es mi intento de involucrarte a ti, el lector/administrador/desarrollador, a compartir conmigo y con otros aquí cualquier fragmento de código que encuentres útil y hayas añadido al archivo functions.php de tu tema para extender o mejorar WordPress sin utilizar un plugin.

Cuando envíes una respuesta aquí, por favor, dale un título a cada fragmento de código, háznoslo saber con qué versión de WordPress sabes que es compatible, incluye cualquier descripción que consideres que mejor describe su función y (si corresponde) incluye un enlace al plugin original o la fuente donde encontraste la información.

Espero con interés todas vuestras respuestas y, por supuesto, continuaré añadiendo mis propios descubrimientos cuando los encuentre.

Por favor, vota la pregunta y cualquier respuesta que encuentres útil haciendo clic en la flecha hacia arriba en el lado izquierdo de la pregunta o respuesta.

25
Comentarios

Por favor, añade también tus hallazgos antiguos y existentes.

hakre hakre
9 sept 2010 11:38:16

Hola @NetConstructor: Me preocupa esta pregunta porque es una pregunta de "Lista de X" sobre la que la gente de StackExchange nos ha advertido: http://meta.stackexchange.com/questions/57226/should-we-have-a-list-of-x-close-reason Mi mayor preocupación es que cuando pienso en tu pregunta, puedo imaginar un número casi infinito de respuestas y, como tal, me preocupa que esta pregunta resulte en una colección de respuestas aleatorias pero nada definitivo. Quiero obtener las opiniones de otros antes de (votar para) cerrarla, ya que no quiero ser demasiado estricto, solo tengo dudas.

MikeSchinkel MikeSchinkel
9 sept 2010 14:00:40

Mi voto es cerrarla o convertirla en wiki comunitaria

Chris_O Chris_O
9 sept 2010 15:37:41

Considerando que las primeras 5 respuestas fueron del autor de la pregunta y que la pregunta parece estar más orientada a recopilar un conjunto de respuestas en lugar de una única respuesta definitiva, esto debería ser un wiki comunitario.

EAMann EAMann
9 sept 2010 17:43:16

Parece que no se puede simplemente modificar una pregunta para convertirla en wiki. ¿Es esto correcto?

NetConstructor.com NetConstructor.com
9 sept 2010 18:31:53

Sin embargo, esto es útil (he encontrado 2 fragmentos de código que usaré mucho). Si va a ser un wiki comunitario y hay que empezar desde cero para hacerlo, ¿quizás podríamos simplemente trasladar el contenido de aquí allí?

Lemon Bacon Lemon Bacon
10 sept 2010 02:58:46

@NetConstructor.com ... Convertí la pregunta en un wiki cuando escribí mi último comentario. Perdón si eso causó alguna confusión. Normalmente, tú (como el autor original) puedes convertir una pregunta en wiki en cualquier momento.

EAMann EAMann
10 sept 2010 03:56:15

@EAMann gracias... Estaba buscando esa opción pero no estaba seguro de dónde estaba ubicada. ¿Tal vez después de que la convertiste ya no pude ver la opción?

NetConstructor.com NetConstructor.com
10 sept 2010 08:37:41

@NetConstructor.com - Exacto. Una vez que se convierte, ya está convertida... la opción se establece y desaparece de la página.

EAMann EAMann
10 sept 2010 17:23:26

Considero que esto es un mal estilo y prefiero los plugins. a) Están construidos por desarrolladores dedicados b) se mantienen y actualizan fácilmente. Para pequeños fragmentos de código personalizados, recomiendo el plugin Shortcode Exec PHP que ofrece una forma muy limpia y portable de personalizar tu Wordpress.

Raphael Raphael
10 nov 2010 11:43:21

Aunque interesante, creo que la mayoría estaría de acuerdo en que cuando desarrollas temas, prefieres tener las cosas localizadas dentro de un archivo functions.php

NetConstructor.com NetConstructor.com
24 nov 2010 19:01:50

@NetConstructor - Si vas a editar las entradas de otros, por favor ten cuidado al hacerlo, arruinaste la indentación en mi publicación. Siempre me esfuerzo por mantener la indentación para mejor legibilidad. También agradecería que te tomaras el tiempo de explicar las ediciones que haces (no pude ver ninguna razón para que editaras mi entrada - y no hubo un resumen de la edición).

t31os t31os
28 ene 2011 18:53:26

@t31os -- Lo edité para mantenerlo consistente con todas las entradas

NetConstructor.com NetConstructor.com
7 feb 2011 15:53:20

Todas las respuestas no relacionadas con un tema deberían ser eliminadas. Este hilo es un buen ejemplo de malas prácticas de codificación.

fuxia fuxia
13 jun 2011 15:09:56

Tendría que discrepar. La pregunta no estaba relacionada con el tema. Todas las modificaciones de functions.PHP aplicables son bienvenidas y los usuarios deberían votar arriba/abajo en consecuencia.

NetConstructor.com NetConstructor.com
14 jun 2011 07:56:23

Es interesante que no se mencione en ningún lugar que el archivo functions.php es el que está en el directorio de tu tema, lo que lleva a confusión, como esta: http://wordpress.stackexchange.com/questions/25341/error-after-editing-functions-php

scribu scribu
9 ago 2011 03:07:10

Creo que sería mejor animar a la gente a crear un plugin de funcionalidad personalizado en lugar de usar el functions.php de su tema

Ian Dunn Ian Dunn
16 ene 2012 20:49:10

@rarst - Con respecto a tu comentario sobre cerrar este hilo, ¿no es esta la razón por la que está listado en la wiki de la comunidad?

User User
19 feb 2012 15:35:19

@Cor van Noorloos el uso del estatus de wiki comunitaria se ha reducido considerablemente y es desalentado por la red. En pocas palabras, la excusa de "no es realmente adecuado para preguntas y respuestas, pero es una wiki comunitaria" ya no es válida. Las respuestas aquí se convirtieron en un desorden mal mantenido, solo visitado por el factor diversión/curiosidad. Ha habido mucho movimiento en toda la red para eliminar preguntas como esta.

Rarst Rarst
19 feb 2012 15:43:03

@rarst - Entendible. Punto tomado.

User User
19 feb 2012 15:55:04

En relación al cierre de esta "wiki" específica, voto porque se reabra. Obviamente esta publicación wiki es muy popular, como lo demuestra el hecho de que tiene 30,000 visitas, que es tres veces más que CUALQUIER otra pregunta o wiki en este sitio, y el tema en sí ha recibido 119 votos positivos, el doble que cualquier otra pregunta o tema. Si estás de acuerdo con su valor, por favor vota para reabrirlo haciendo clic en el enlace "reopen".

NetConstructor.com NetConstructor.com
20 feb 2012 13:12:40

@NetConstructor.com El número puro de visitas a la página no es un indicador de calidad. Deberíamos fomentar preguntas específicas con respuestas específicas y buenas prácticas de codificación. Este hilo es lo opuesto.

fuxia fuxia
22 feb 2012 04:44:30

@toscho - Esa es precisamente la razón por la que esto se configuró como un wiki y, por lo tanto, esta publicación es perfectamente válida. El punto que mencioné respecto a las visitas se mencionó porque este tema obviamente es 3 veces más popular que cualquier otro en este sitio. Este sitio web es popular específicamente debido a preguntas como estas y, por lo tanto, no tiene sentido cerrarlo. No creo que se pueda debatir esto a menos que el interés de la comunidad en temas como estos no tenga valor para los administradores.

NetConstructor.com NetConstructor.com
24 feb 2012 18:38:34

Agregaré un comentario más aquí basado en unos cálculos que acabo de hacer. Hay menos de 790 usuarios registrados en este sitio web con una calificación de "1" o más. Asumiendo que este grupo de individuos representa a aquellos que realmente votan y/o contribuyen en este sitio (y siendo 790 increíblemente justo), entonces 117 personas que votaron positivamente esta pregunta representan más del 14% de todos los usuarios activos que encontraron este tema útil. Voten para reabrir el tema, por favor.

NetConstructor.com NetConstructor.com
24 feb 2012 18:47:01

@NetConstructor.com Discútelo en Meta donde la gente podrá ver mejor tus argumentos. :)

fuxia fuxia
24 feb 2012 19:10:14
Mostrar los 20 comentarios restantes
Todas las respuestas a la pregunta 30
2
109

Activar función oculta de administración para mostrar todos los ajustes del sitio

Probado en: WordPress 3.1 RC3

Este pequeño fragmento de código hace algo bastante interesante. Añadirá una opción adicional a tu menú de ajustes con un enlace a "todos los ajustes" que te mostrará una lista completa de todos los parámetros que tienes en tu base de datos relacionados con tu sitio WordPress. El código de abajo solo hará visible este enlace para usuarios administradores y lo ocultará para el resto de usuarios.

// ENLACE PERSONALIZADO EN EL MENÚ DE ADMINISTRACIÓN PARA TODOS LOS AJUSTES
   function all_settings_link() {
    add_options_page(__('Todos los ajustes'), __('Todos los ajustes'), 'administrator', 'options.php');
   }
   add_action('admin_menu', 'all_settings_link');
10 sept 2010 12:28:54
Comentarios

¡Fantástico para desarrollo! Uso frecuentemente la tabla de opciones para almacenar versiones de la base de datos en mis plugins... usar phpMyAdmin para revertir a una versión antigua de la BD y probar un script de actualización es engorroso... ¡esto lo hará mucho más fácil!!!

EAMann EAMann
15 sept 2010 19:03:00

También puedes acceder a la misma página de opciones (cuando has iniciado sesión) yendo a tusitio/wp-admin/options.php

j08691 j08691
9 oct 2015 22:55:01
0
89

Modificar el Logo de Inicio de Sesión y el Enlace de la URL de la Imagen

Probado en: WordPress 3.0.1

Este código te permitirá modificar fácilmente el Logo de la página de Inicio de Sesión de WordPress, así como el enlace href y el texto del título de este logo.

add_filter( 'login_headerurl', 'namespace_login_headerurl' );
/**
 * Reemplaza la URL del logo en el encabezado de inicio de sesión
 *
 * @param $url
 */
function namespace_login_headerurl( $url ) {
    $url = home_url( '/' );
    return $url;
}

add_filter( 'login_headertitle', 'namespace_login_headertitle' );
/**
 * Reemplaza el título del logo en el encabezado de inicio de sesión
 *
 * @param $title
 */
function namespace_login_headertitle( $title ) {
    $title = get_bloginfo( 'name' );
    return $title;
}

add_action( 'login_head', 'namespace_login_style' );
/**
 * Reemplaza el logo en el encabezado de inicio de sesión
 */
function namespace_login_style() {
    echo '<style>.login h1 a { background-image: url( ' . get_template_directory_uri() . '/images/logo.png ) !important; }</style>';
}

EDITAR: Si deseas usar el logo del sitio para reemplazar el logo de inicio de sesión, puedes usar lo siguiente para obtener esa información dinámicamente (probado en 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;
}
10 sept 2010 12:01:29
3
81

Incluir tipos de contenido personalizados en los resultados de búsqueda.

// HACER QUE LOS TIPOS DE CONTENIDO PERSONALIZADOS SEAN BUSCABLES
function searchAll( $query ) {
 if ( $query->is_search ) { $query->set( 'post_type', array( 'site', 'plugin', 'theme', 'person' )); } 
 return $query;
}
add_filter( 'the_search_query', 'searchAll' );

Añadir tipos de contenido personalizados al feed RSS principal del sitio por defecto.

// AÑADIR TIPOS DE CONTENIDO PERSONALIZADOS AL FEED RSS POR DEFECTO
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 contenido personalizados en el widget "Ahora mismo" del panel de administración

Esto incluirá tus tipos de contenido personalizados y el recuento de publicaciones para cada tipo en el widget del panel de control "Ahora mismo".

// AÑADIR TIPOS DE CONTENIDO PERSONALIZADOS AL WIDGET 'AHORA MISMO' DEL PANEL
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' );
9 nov 2010 05:27:05
Comentarios

En relación al último fragmento de esta respuesta. Es una gran adición ya que estaba añadiendo esto manualmente para cada tipo de publicación. El único problema que tengo con esto es que añade los datos después de las entradas predeterminadas de "categoría" y "etiqueta". ¿Podrías actualizar tu respuesta para mover las predeterminadas de "categoría" o "etiqueta" más abajo o eliminarlas para que se puedan añadir manualmente?

NetConstructor.com NetConstructor.com
22 feb 2011 22:06:34

@NetConstructor.com No creo que entienda tu solicitud. Si es así, creo que sería algo más difícil de hacer, y realmente no tengo tiempo ahora mismo para averiguar cómo hacerlo.

jaredwilli jaredwilli
23 feb 2011 03:01:27

Incluir tipos de publicaciones personalizados en los resultados de búsqueda - Supongo que ahora puedes hacer esto con el parámetro exclude_from_search de register_post_type...

Krzysiek Dróżdż Krzysiek Dróżdż
16 dic 2013 18:13:55
12
77

Eliminar notificaciones de actualización para todos los usuarios excepto ADMINISTRADOR

Probado en: WordPress 3.0.1

Este código asegura que ningún usuario excepto "admin" reciba notificaciones de WordPress cuando hay actualizaciones disponibles.

// ELIMINAR LA NOTIFICACIÓN DE ACTUALIZACIÓN DE WORDPRESS PARA TODOS LOS USUARIOS EXCEPTO SYSADMIN
   global $user_login;
   get_currentuserinfo();
   if ($user_login !== "admin") { // Cambiar admin por el nombre de usuario que debe recibir las actualizaciones
    add_action( 'init', create_function( '$a', "remove_action( 'init', 'wp_version_check' );" ), 2 );
    add_filter( 'pre_option_update_core', create_function( '$a', "return null;" ) );
   }

Versión modificada para mostrar notificaciones de actualización solo a usuarios administradores (en lugar de solo al usuario 'admin'):

// ELIMINAR LA NOTIFICACIÓN DE ACTUALIZACIÓN DE WORDPRESS PARA TODOS LOS USUARIOS EXCEPTO SYSADMIN
       global $user_login;
       get_currentuserinfo();
       if (!current_user_can('update_plugins')) { // Verifica si el usuario actual puede actualizar 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;" ) );
       }
9 sept 2010 17:19:40
Comentarios

Esto está lejos de ser ideal. Solo funcionará si el inicio de sesión del administrador sigue siendo el predeterminado 'admin', lo cual no debería ser por razones de seguridad. En su lugar, deberías verificar una capacidad específica que deseas que las personas tengan para ver los mensajes.

jerclarke jerclarke
11 sept 2010 23:28:32

Es decir, if (!current_user_can('manage_options')) {...add_filter...} -- Disculpa por el comentario doble, olvidé que al presionar enter se envían los comentarios)

jerclarke jerclarke
11 sept 2010 23:29:31

Por eso añadí el comentario al código donde puedes cambiar el nombre de usuario del administrador. ¿Cómo lo mejorarías/reescribirías?

NetConstructor.com NetConstructor.com
12 sept 2010 12:07:31

La mejor manera es eliminar el global $user_login y get_currentuserinfo() y en su lugar usar current_user_can en tu cláusula if. Es solo 1 línea en lugar de 3 y es la forma estándar. Puedes verificar la capacidad específica que se necesitaría para ACTUAR sobre los mensajes, en este caso hay 'update_core' y 'update_plugins'.

jerclarke jerclarke
12 sept 2010 17:00:38

entonces: if (!current_user_can('update_plugins')) {/ELIMINAR MENSAJES/}

jerclarke jerclarke
12 sept 2010 17:01:51

entonces, ¿cómo se vería el código completo?

NetConstructor.com NetConstructor.com
14 sept 2010 02:24:38

@Jeremy Clarke entonces, ¿este código sería la forma correcta de hacerlo? Pero, si solo quisieras permitir que un nombre de usuario específico reciba los avisos, ¿el código anterior sería la mejor manera?

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

NetConstructor.com NetConstructor.com
17 sept 2010 09:41:47

Si quisieras verificar un nombre de usuario específico, supongo que tu código en la respuesta original es aceptable, aunque podría haber una forma ligeramente más efectiva. El código completo usando mi solución se vería como lo que tienes en tu último comentario. Es lo mismo que tu respuesta pero con la verificación current_user_can() en lugar de $user_login !== 'admin'.

jerclarke jerclarke
22 sept 2010 21:48:42

Edté la respuesta y añadí la versión que usa current_user_can('update_plugins')

Travis Northcutt Travis Northcutt
27 sept 2010 07:03:32

Esta lógica debe ir dentro del núcleo

Atif Atif
27 dic 2010 06:45:28

Acabo de probar los códigos. Pero me aparece una página de error al usar los códigos. El mismo problema con ambos códigos

user391 user391
29 jun 2011 13:50:42

Creo que este fragmento ha perdido relevancia con los años. En WordPress actual, el administrador es el único que ve las notificaciones de actualización.

netblognet netblognet
28 ago 2014 11:21:54
Mostrar los 7 comentarios restantes
8
73

Cargar jQuery desde el CDN de Google

Probado en: WordPress 3.0.1

// Una inclusión de jQuery aún más inteligente :)
add_action( 'init', 'jquery_register' );

// Registrar desde Google y para el 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' );
    }
}

Eliminar la información de versión de WordPress por seguridad

Probado en: WordPress 3.0.1

// Eliminar información de versión del head y feeds
function complete_version_removal() {
    return '';
}
add_filter('the_generator', 'complete_version_removal');

Añadir enlaces de Spam y Eliminar a los comentarios en el Front End

Probado en: WordPress 3.0.1

Esto facilita mucho la gestión de comentarios desde el front end al añadir enlaces de spam y eliminar.**

// Enlaces de spam y eliminar para todas las versiones de 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.'">eliminar</a> ';
        echo '| <a href="'.get_bloginfo('wpurl').'/wp-admin/comment.php?action=cdc&dt=spam&c='.$id.'">spam</a>';
    }
}

Retrasar la publicación pública en el Feed RSS

Probado en: WordPress 3.0.1

Finalmente, me gusta retrasar la publicación en mis feeds RSS durante 10-15 minutos porque siempre encuentro al menos un par de errores en mi texto. Otros usos son en caso de que quieras que el contenido sea exclusivo de tu sitio durante un día o una semana antes de enviarlo a tus lectores de RSS.

// Retrasar la actualización del feed
function publish_later_on_feed($where) {
    global $wpdb;

    if (is_feed()) {
        // Marca de tiempo en formato WordPress
        $now = gmdate('Y-m-d H:i:s');

        // Valor de espera; + dispositivo
        $wait = '10'; // entero

        // http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timestampdiff
        $device = 'MINUTE'; // MINUTE, HOUR, DAY, WEEK, MONTH, YEAR

        // Añadir sintaxis SQL al $where predeterminado
        $where .= " AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, '$now') > $wait ";
    }
    return $where;
}
add_filter('posts_where', 'publish_later_on_feed');
16 sept 2010 19:06:46
Comentarios

fuente en mi publicación: http://wpengineer.com/320/publish-the-feed-later/ con más información

bueltge bueltge
17 sept 2010 11:29:42

También puedes simplemente eliminar el filtro del generador: remove_action('wp_head', 'wp_generator');

Gipetto Gipetto
18 sept 2010 10:01:39

¿Por qué no usamos CDN de Google para el admin también? No lo entiendo

Ünsal Korkmaz Ünsal Korkmaz
5 nov 2010 20:30:06

@Derek Perkins - ¿Puedes hacer que cada uno de estos fragmentos de código sea una respuesta diferente para que se pueda votar por separado?

MikeSchinkel MikeSchinkel
6 nov 2010 11:52:20

http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js caduca después de solo una hora. Siempre usa la información completa de versión como http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js - que caduca después de un año.

fuxia fuxia
10 nov 2010 16:41:52

¿Puedes dividir cada una de estas entradas wiki en entradas separadas en las próximas semanas? Quería hacerlo por ti pero no quería que pareciera que estoy tratando de obtener puntos por información que compartiste.

NetConstructor.com NetConstructor.com
26 ene 2011 16:23:17

El código "Eliminar la información de versión de WordPress por seguridad" en realidad no hace nada para aumentar la seguridad de tu sitio. Ni siquiera evita que se exponga la versión de WP que estás utilizando.

Joseph Scott Joseph Scott
11 feb 2011 08:38:13

No es cierto Joseph, si la versión de WordPress está expuesta, las personas pueden ver si estás ejecutando una versión antigua, exponiendo así tus vulnerabilidades. Siempre es una buena decisión eliminar esto de todas las instalaciones de WordPress. Personalmente, ni siquiera sé por qué lo incluyeron en primer lugar, ya que ES un problema de seguridad.

Jeremy Jeremy
12 may 2014 18:51:08
Mostrar los 3 comentarios restantes
4
60

Establece un número máximo de revisiones de entradas para evitar la saturación de la base de datos.

Probado en: WordPress 3.0.1

Por defecto es infinito, y esto lo configurará para que solo recuerde las últimas cinco ediciones:

/**
 * Establece las revisiones de entradas a menos que la constante ya esté definida en wp-config.php
 */
if (!defined('WP_POST_REVISIONS')) define('WP_POST_REVISIONS', 5);

Por si sirve de algo, hay muchas ideas geniales para CONSTANTES que se pueden configurar en la página del Codex Editando wp-config.php.

11 sept 2010 23:35:56
Comentarios

¿Se puede configurar esto por tipo de publicación?

NetConstructor.com NetConstructor.com
12 sept 2010 12:17:31

Al analizar su uso en wp_save_post_revision() no parece haber una forma de distinguir según los tipos de publicación. No hay ningún filtro ni nada en el valor, aunque probablemente debería haberlo.

jerclarke jerclarke
12 sept 2010 17:24:43

gracias Jeremy - Para cualquier otra persona, si sabes cómo hacer esto por favor publícalo aquí.

NetConstructor.com NetConstructor.com
14 sept 2010 10:18:10

personalmente prefiero 10. Sé que es el doble, pero siempre que necesito una revisión, suele ser más antigua que 5

janw janw
4 sept 2012 15:04:12
2
59

Herramientas de perfilado para WordPress

Me gusta añadir herramientas de perfilado en un archivo separado, que luego incluyo desde functions.php cuando es necesario:

<?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 consultas - {$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 aciertos de caché / " . ( $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, "Carga");
        '), 10000000);
    add_action('template_redirect', create_function('$in', '
        return add_stop($in, "Consulta");
        '), -10000000);
    add_action('wp_footer', create_function('$in', '
        return add_stop($in, "Visualización");
        '), 10000000);
    add_action('admin_footer', create_function('$in', '
        return add_stop($in, "Visualización");
        '), 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(
                'Archivo/Línea: ' . $trace['file'] . ', ' . $trace['line'],
                'Función / Clase: ' . $trace['function'] . ', ' . $trace['class']
                );
    } # dump_trace()
    if ( $_GET['debug'] == 'http' )
        add_filter('http_request_args', 'dump_http', 0, 2);
?>
28 nov 2010 13:59:08
Comentarios

¿hay alguna forma rápida de modificar esto para que el script solo se llame cuando eres administrador Y añadir algo a la URL para mostrar la información de depuración?

NetConstructor.com NetConstructor.com
22 feb 2011 21:58:01

Así es como se hace en mi tema: http://www.semiologic.com/software/sem-reloaded/ -- el /inc/debug.php es incluido por /functions.php o /inc/init.php (no recuerdo exactamente ahora mismo).

Denis de Bernardy Denis de Bernardy
23 feb 2011 11:50:15
4
56

Enfocar imágenes redimensionadas (solo JPEG)

Esta función enfoca las imágenes JPEG redimensionadas. Un ejemplo de la diferencia:

Comparación de imagen JPEG antes y después de aplicar el enfoque

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', __('No se pudo leer el tamaño de la imagen'), $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);
4 dic 2011 23:33:43
Comentarios

mucho mejores jpegs, ¡muchas gracias! probado en 3.4-alpha

brasofilo brasofilo
2 abr 2012 15:07:18

si quieren esto como plugin: http://wordpress.org/extend/plugins/sharpen-resized-images/

Ünsal Korkmaz Ünsal Korkmaz
3 abr 2012 12:38:39

¿dónde va esta función?

StevieD StevieD
18 mar 2019 04:04:20

@StevieD - como sugiere el título, va dentro de functions.php, en tu plantilla. Sin embargo, tendría cuidado, esta función tiene casi 8 años.

Timofey Drozhzhin Timofey Drozhzhin
25 jul 2019 10:54:23
2
51

Eliminar las Meta Boxes predeterminadas de WordPress

Probado en: WordPress 3.0.1

Este código te permitirá eliminar Meta Boxes específicas que WordPress añade por defecto en las pantallas de Añadir/Editar Entrada y Añadir/Editar Página.

// ELIMINAR META BOXES DE LA PANTALLA DE ENTRADAS PREDETERMINADA
function remove_default_post_screen_metaboxes() {
    remove_meta_box( 'postcustom','post','normal' ); // Meta Box de Campos Personalizados
    remove_meta_box( 'postexcerpt','post','normal' ); // Meta Box de Extracto
    remove_meta_box( 'commentstatusdiv','post','normal' ); // Meta Box de Comentarios
    remove_meta_box( 'trackbacksdiv','post','normal' ); // Meta Box de Retroenlaces
    remove_meta_box( 'slugdiv','post','normal' ); // Meta Box de Slug
    remove_meta_box( 'authordiv','post','normal' ); // Meta Box de Autor
}
add_action('admin_menu', 'remove_default_post_screen_metaboxes');


// ELIMINAR META BOXES DE LA PANTALLA DE PÁGINAS PREDETERMINADA
function remove_default_page_screen_metaboxes() {
    remove_meta_box( 'postcustom','page','normal' ); // Meta Box de Campos Personalizados
    remove_meta_box( 'postexcerpt','page','normal' ); // Meta Box de Extracto
    remove_meta_box( 'commentstatusdiv','page','normal' ); // Meta Box de Comentarios
    remove_meta_box( 'trackbacksdiv','page','normal' ); // Meta Box de Retroenlaces
    remove_meta_box( 'slugdiv','page','normal' ); // Meta Box de Slug
    remove_meta_box( 'authordiv','page','normal' ); // Meta Box de Autor
}
add_action('admin_menu', 'remove_default_page_screen_metaboxes');
9 sept 2010 11:45:50
Comentarios

Según este http://wordpress.stackexchange.com/questions/34030/cant-change-permalink-url-after-hitting-ok-and-update/37779#37779 no ocultaría el slugdiv de esta manera, sino que usaría este https://gist.github.com/1863830 en su lugar

User User
19 feb 2012 15:25:07

@CorvanNoorloos Tu enlace de github está roto.

comesuccingfuccslot comesuccingfuccslot
26 feb 2017 18:54:27
2
48

Filtro para eliminar la corrección de "Wordpress" a "WordPress"

Probado en: WordPress 3.0.1

Se agregó un filtro en la versión 3.0 de WordPress que convierte automáticamente todas las instancias de "Wordpress" (sin la P mayúscula) a "WordPress" (con la P mayúscula) en el contenido de las publicaciones, títulos de entradas y texto de comentarios. Algunas personas lo ven como intrusivo, pero a veces necesito escribir mal intencionalmente WordPress y encontré este filtro algo molesto.

// Eliminar el molesto filtro de la P mayúscula
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 );
}
15 sept 2010 18:51:15
Comentarios

gran pequeño descubrimiento. Una de esas cosas que simplemente elimina otro trozo de código que no es necesario

NetConstructor.com NetConstructor.com
17 sept 2010 09:50:07

En WordPress 3.0.1, este filtro se añade con prioridad 11, así que necesitas añadir 11 como tercer parámetro para eliminarlo.

Jan Fabry Jan Fabry
6 nov 2010 01:01:03
0
47

Personalizar el Escritorio

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
   global $wp_meta_boxes;

Eliminar estos widgets del escritorio...

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

Añadir un widget personalizado llamado 'Ayuda y Soporte'

   wp_add_dashboard_widget('custom_help_widget', 'Ayuda y Soporte', 'custom_dashboard_help');
}

Este es el contenido para tu widget personalizado

 function custom_dashboard_help() {
    echo '<p>Lorum ipsum delor sit amet et nunc</p>';
}
21 oct 2010 17:52:25
0
43

Añadir campos personalizados al perfil de usuario

Coloca el siguiente código en tu archivo functions.php para añadir campos personalizados al perfil de usuario. Edita o añade líneas según necesites.

Recuerda no eliminar la línea: return $contactmethods; de lo contrario no funcionará.

// CAMPOS PERSONALIZADOS DE PERFIL DE USUARIO
   function my_custom_userfields( $contactmethods ) {

    // AÑADIR CAMPOS PERSONALIZADOS DE CONTACTO
    $contactmethods['contact_phone_office']     = 'Teléfono de oficina';
    $contactmethods['contact_phone_mobile']     = 'Teléfono móvil';
    $contactmethods['contact_office_fax']       = 'Fax de oficina';

    // AÑADIR CAMPOS PERSONALIZADOS DE DIRECCIÓN
    $contactmethods['address_line_1']       = 'Línea de dirección 1';
    $contactmethods['address_line_2']       = 'Línea de dirección 2 (opcional)';
    $contactmethods['address_city']         = 'Ciudad';
    $contactmethods['address_state']        = 'Estado/Provincia';
    $contactmethods['address_zipcode']      = 'Código postal';
    return $contactmethods;
   }
   add_filter('user_contactmethods','my_custom_userfields',10,1);

Para mostrar los campos personalizados puedes usar uno de los dos métodos que se indican a continuación.

Opción 1:

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

Opción 2:

<?php $current_author = get_userdata(get_query_var('author')); ?>
<p><a href="<?php echo esc_url($current_author->contact_phone_office);?>" title="telefono_oficina"> Teléfono de oficina</a></p>
16 nov 2010 06:51:32
2
41

Personalizar el orden del menú de administración

Probado en: WordPress 3.0.1

Este código te permitirá reorganizar el orden de los elementos en el menú de administración. Todo lo que necesitas hacer es hacer clic en un enlace existente en el menú de administración y copiar todo lo que aparece antes de la URL /wp-admin/. El orden que se muestra a continuación representa el orden que tendrá el nuevo menú de administración.

// PERSONALIZAR EL ORDEN DEL MENÚ DE ADMINISTRACIÓN
function custom_menu_order($menu_ord) {
    if (!$menu_ord)
        return true;
    return array(
     'index.php', // Esto representa el enlace del escritorio
     'edit.php?post_type=events', // Este es un menú de tipo de entrada personalizado
     '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', // Este es el menú predeterminado de páginas
     'edit.php', // Este es el menú de administración de ENTRADAS predeterminado
 );
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
9 sept 2010 11:37:11
Comentarios

¿Existe realmente un filtro core llamado custom_menu_order? No pude encontrarlo...

kaiser kaiser
1 mar 2011 18:55:35

@kaiser documentado aquí http://codex.wordpress.org/Plugin_API/Filter_Reference/custom_menu_order

Manny Fleurmond Manny Fleurmond
18 ago 2012 20:08:42
3
41

Función para cambiar la longitud del Extracto

Probado en: WordPress 3.0.1

Por defecto, todos los extractos están limitados a 55 palabras. Utilizando el código siguiente puedes sobrescribir esta configuración predeterminada:

function new_excerpt_length($length) { 
    return 100;
}

add_filter('excerpt_length', 'new_excerpt_length');

Este ejemplo cambia la longitud del extracto a 100 palabras, pero puedes usar el mismo método para cambiarlo a cualquier valor.

12 sept 2010 10:32:19
Comentarios

@user402... ¿esto limita por palabras o caracteres? ¿Podrías publicar cómo hacer ambos?

NetConstructor.com NetConstructor.com
12 sept 2010 12:14:18

@NetConstructor.com Esta función (y el hook excerpt_length) limita por palabras.

EAMann EAMann
15 sept 2010 20:53:24

Je. Conseguí que ese filtro se añadiera al núcleo. :)

Dougal Campbell Dougal Campbell
8 mar 2011 21:22:49
1
40

Añadir Miniaturas en la Lista de Entradas/Páginas

Puedes añadir esto a tus funciones para mostrar en la lista de gestión/edición de entradas y páginas una nueva columna con la vista previa de la miniatura.

/****** Añadir Miniaturas en la Lista de Entradas/Páginas ******/
if ( !function_exists('AddThumbColumn') && function_exists('add_theme_support') ) {
 
    // para entradas y páginas
    add_theme_support('post-thumbnails', array( 'post', 'page' ) );
 
    function AddThumbColumn($cols) {
 
        $cols['thumbnail'] = __('Miniatura');
 
        return $cols;
    }
 
    function AddThumbValue($column_name, $post_id) {
 
            $width = (int) 35;
            $height = (int) 35;
 
            if ( 'thumbnail' == $column_name ) {
                // miniatura de WP 2.9
                $thumbnail_id = get_post_meta( $post_id, '_thumbnail_id', true );
                // imagen de la galería
                $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 __('Ninguna');
                    }
            }
    }
 
    // para entradas
    add_filter( 'manage_posts_columns', 'AddThumbColumn' );
    add_action( 'manage_posts_custom_column', 'AddThumbValue', 10, 2 );
 
    // para páginas
    add_filter( 'manage_pages_columns', 'AddThumbColumn' );
    add_action( 'manage_pages_custom_column', 'AddThumbValue', 10, 2 );
}
28 dic 2010 08:39:19
Comentarios

¿Cómo mover la columna al extremo izquierdo?

730wavy 730wavy
8 oct 2013 20:10:45
3
39

Eliminar pings a tu propio blog

Probado en: WordPress 3.0.1

// Eliminar pings a uno mismo
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' );
15 sept 2010 17:36:31
Comentarios

¿Con qué frecuencia y cuándo WordPress se hace ping a sí mismo?

NetConstructor.com NetConstructor.com
17 sept 2010 09:54:03

Realmente tengo ese problema con bastante frecuencia. Si hago referencia a un enlace interno hacia otra publicación en mi blog de WP, recibo un trackback o pingback (no recuerdo cuál) de mí mismo. Es molesto.

Sahas Katta Sahas Katta
19 dic 2010 01:12:01

Lo mismo aquí. Tengo un blog de noticias/revista y enlazo a otros artículos con bastante frecuencia.

Steven Steven
13 feb 2011 15:24:50
0
36

Habilitar compresión GZIP de salida

Normalmente el servidor debería estar configurado para hacer esto automáticamente, pero muchos hosts compartidos no lo hacen (probablemente para incrementar el uso de ancho de banda de los clientes).

 if(extension_loaded("zlib") && (ini_get("output_handler") != "ob_gzhandler"))
   add_action('wp', create_function('', '@ob_end_clean();@ini_set("zlib.output_compression", 1);'));
23 dic 2010 14:13:26
1
32

Mostrar Consultas de la Base de Datos, Tiempo de Ejecución y Consumo de Memoria

Probado en: WordPress 3.0.1

function performance( $visible = false ) {

    $stat = sprintf( '%d consultas en %.3f segundos, usando %.2fMB de memoria',
            get_num_queries(),
            timer_stop( 0, 3 ),
            memory_get_peak_usage() / 1024 / 1024
        );

    echo $visible ? $stat : "<!-- {$stat} -->" ;
}

Luego este código debajo del código anterior que insertará automáticamente el código de arriba en el pie de página de tu sitio web público (asegúrate de que tu tema esté llamando a wp_footer):

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

Puede ser llamado múltiples veces.

15 sept 2010 20:43:57
Comentarios

para php < 5.2 usa memory_get_usage()

onetrickpony onetrickpony
23 ene 2011 10:23:30
6
31

Extraer Automáticamente la Primera Imagen del Contenido del Post

Probado en: WordPress 3.0.1

Este código extraerá automáticamente la primera imagen asociada a un post y te permitirá mostrarla/usarla llamando a la función getImage.

// EXTRAER AUTOMÁTICAMENTE LA PRIMERA IMAGEN DEL 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;
}
10 sept 2010 09:26:37
Comentarios

Bien, pero get_the_image también hace un muy buen trabajo con esto. http://wordpress.org/extend/plugins/get-the-image/

artlung artlung
15 sept 2010 18:56:56

correcto, pero este funciona de forma diferente y soluciona varios problemas que get_the_image no tiene en cuenta

NetConstructor.com NetConstructor.com
30 sept 2010 14:19:05

¿Qué hace diferente al script get_the_image?

matt matt
5 dic 2010 06:47:10

@matt -- En WordPress hay diferentes formas de agregar imágenes a las publicaciones y creo que el script get_the_image solo verifica una de ellas. Esto verifica si hay una imagen destacada y la usa primero si está disponible, luego creo que verifica la primera imagen agregada al contenido de la publicación y si no se encuentra, revisa la galería multimedia en busca de la imagen con el orden de clasificación más alto (al menos así recuerdo que funciona el orden).

NetConstructor.com NetConstructor.com
22 feb 2011 22:01:44

Sugiero http://wordpress.org/extend/plugins/auto-post-thumbnail/ Genera automáticamente la imagen destacada (Post Thumbnail) a partir de la primera imagen en la publicación o cualquier tipo de publicación personalizada, solo si no se ha establecido una imagen destacada.

Ünsal Korkmaz Ünsal Korkmaz
8 may 2011 15:47:41

No veo ninguna verificación para la imagen en miniatura - ¿estás seguro?

Sagive Sagive
22 feb 2012 01:55:05
Mostrar los 1 comentarios restantes
2
31

Desregistrar los Widgets Predeterminados de WordPress

Probado en: WordPress 3.0.1

// Desregistrar todos los Widgets predeterminados de WordPress
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);
15 nov 2010 01:05:16
Comentarios

Lo he usado en la versión 3.1.4. Pero los widgets siguen ahí. ¿Alguien tiene alguna idea?

user391 user391
1 jul 2011 17:22:37

Sigue funcionando en WP 4.5 :)

Tim Malone Tim Malone
19 abr 2016 06:26:07
4
28

Mostrar qué archivo de plantilla de tema está usando una entrada/página en el encabezado

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

Acortar la salida DIV predeterminada si tu tema usa post_class.

Si tu tema está usando algo como:

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

Puedes tener divs extremadamente largos en tu código fuente que podrían verse así o incluso más largos:

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

Esto realmente puede empezar a saturar tu código fuente y parece bastante innecesario en la mayoría de los casos, con 3-4 niveles es suficiente.

Para el primer ejemplo podemos cortar la salida así:

// Cortar salidas DIV extremadamente largas
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');

Esto corta la salida para incluir solo los primeros 5 valores, por lo que el ejemplo anterior se convierte en:

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

Hacer que los archivos de categoría muestren todas las entradas, independientemente del tipo de entrada: útil para tipos de entrada 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');

Eliminar elementos no deseados del panel de control

Esto ya se había publicado pero no incluía la lista completa de elementos. Especialmente esos molestos "enlaces entrantes!"

add_action('wp_dashboard_setup', 'my_custom_dashboard_widgets');

function my_custom_dashboard_widgets() {
    global $wp_meta_boxes;

    // Right Now - Comentarios, Entradas, Páginas de un vistazo
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);

    // Comentarios recientes
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']);

    // Enlaces entrantes
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);

    // Plugins - Populares, nuevos y recientemente actualizados
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);

    // Blog de desarrollo de WordPress
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);

    // Otras noticias de WordPress
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);

    // Formulario de publicación rápida
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']);

    // Lista de borradores recientes
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_recent_drafts']);
}

Eliminar saltos de página "Leer más"

En su lugar, volver a la parte superior de la página. Ya sabes, cuando haces clic en "leer más" salta al lugar en la página, lo cual puede ser molesto, esto hace que cargue la página normalmente, ¡sin saltos!

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

Restringir elementos del menú de ADMINISTRACIÓN basado en nombre de usuario, reemplaza username con el nombre de un usuario real.

function remove_menus()
{
    global $menu;
    global $current_user;
    get_currentuserinfo();

    if($current_user->user_login == 'username')
    {
        $restricted = array(__('Entradas'),
                            __('Medios'),
                            __('Enlaces'),
                            __('Páginas'),
                            __('Comentarios'),
                            __('Apariencia'),
                            __('Plugins'),
                            __('Usuarios'),
                            __('Herramientas'),
                            __('Ajustes')
        );
        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');

//alternativamente puedes usar if($current_user->user_login != 'admin') en su lugar, probablemente más útil

Estilizar la nube de etiquetas

// Personalización de nube de etiquetas
add_filter('widget_tag_cloud_args', 'style_tags');
function style_tags($args) {
    $args = array(
         'largest'    => '10',
         'smallest'   => '10',
         'format'     => 'list',
         );
    return $args;
}

Una referencia completa de opciones está aquí (¡hay muchas!) http://codex.wordpress.org/Function_Reference/wp_tag_cloud

Cambiar el intervalo de actualización predeterminado del Widget RSS

(El predeterminado es 6 o 12 horas - no recuerdo (1800 = 30 minutos).

add_filter( 'wp_feed_cache_transient_lifetime', create_function('$fixrss', 'return 1800;') );
10 nov 2010 00:18:07
Comentarios

¿Podrías dividir cada uno de estos en respuestas separadas en las próximas semanas? Iba a hacerlo por ti pero no quería que pareciera que me estoy atribuyendo el crédito de tus respuestas. En cualquier caso, estoy intentando mantener esto organizado para que los usuarios puedan encontrar fácilmente la información que buscan. Gracias de antemano

NetConstructor.com NetConstructor.com
26 ene 2011 16:25:16

Estaba usando el código "Restringir elementos del menú de ADMIN basado en nombre de usuario, reemplaza nombre de usuario con el nombre de un usuario real" que es genial, pero ¿podrías actualizar el código para que también muestre cómo se puede hacer esto para un "rol de usuario" específico? ¡Creo que sería muy útil!

NetConstructor.com NetConstructor.com
22 feb 2011 22:13:04

Lo siento NetConstructor, acabo de ver tu comentario ahora. Para el rol de usuario usaría "current_user_can". No tengo tiempo para probarlo ahora, pero cuando lo haga, lo agregaré.

Wyck Wyck
4 mar 2011 05:47:47

el valor predeterminado para wp_feed_cache_transient_lifetime es 43200 (12 horas)

brasofilo brasofilo
3 abr 2012 01:15:46
1
27

Eliminar el aviso de actualización de plugins SOLO para plugins INACTIVOS

function update_active_plugins($value = '') {
    /*
    El array $value pasado contiene la lista de plugins con marcas de tiempo
    de la última vez que se verificó la coincidencia de versiones del grupo.
    El nodo $value->response contiene un array de los elementos que están
    desactualizados. Este nodo response es usado por el menú 'Plugins'
    por ejemplo para indicar que hay actualizaciones. También en el listado
    real de plugins para mostrar el cuadro amarillo debajo de un plugin
    que indica que se requiere una acción por parte del usuario.
    */
    if ((isset($value->response)) && (count($value->response))) {

        // Obtener la lista de plugins activos actuales
        $active_plugins = get_option('active_plugins');    
        if ($active_plugins) {
           
            // Aquí comenzamos a comparar los elementos $value->response
            // verificando cada uno contra la lista de plugins activos.
            foreach($value->response as $plugin_idx => $plugin_item) {

                // Si el elemento de respuesta no es un plugin activo, lo eliminamos.
                // Esto evitará que WordPress indique que el plugin necesita acciones de actualización.
                if (!in_array($plugin_idx, $active_plugins))
                    unset($value->response[$plugin_idx]);
            }
        }
        else {
             // Si no hay plugins activos, ignoramos los inactivos desactualizados.
            foreach($value->response as $plugin_idx => $plugin_item) {
                unset($value->response);
            }          
        }
    }  
    return $value;
}
add_filter('transient_update_plugins', 'update_active_plugins');    // Hook para 2.8.+
//add_filter( 'option_update_plugins', 'update_active_plugins');    // Hook para 2.7.x
14 nov 2010 19:11:58
Comentarios

Esto no es necesariamente una buena idea: un plugin inactivo sigue presente en el sistema de archivos, y uno inseguro aún puede ser utilizado para hackear el sitio. Los plugins siempre deben mantenerse actualizados.

Tim Malone Tim Malone
11 abr 2016 23:45:44
0
25

Eliminar información y HTML superfluo dentro de la etiqueta <head>

// eliminar información innecesaria del encabezado
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' );         // para WordPress < 3.0
    remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head' ); // para WordPress >= 3.0
}

// eliminar CSS extra que inyecta el widget 'Comentarios recientes'
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'
    ) );
}
9 nov 2010 11:48:50
1
24

Activar Depuración de Errores y Registro para Uso en Sitios en Producción

Este es un fragmento de código que escribí para hacer uso de las constantes WP_DEBUG que normalmente están desactivadas por defecto. Bueno, creé una forma no solo de activar WP_DEBUG para que puedas usarlo en un sitio en producción sin efectos secundarios negativos, sino que también hice uso de otras constantes de depuración para forzar que se muestren los errores y para crear un archivo de registro de los errores y Notices en el directorio /wp-content.

Coloca este código en tu archivo wp-config.php (DESPUÉS DE HACER UNA COPIA DE SEGURIDAD POR SI ACASO) y luego puedes pasar los parámetros ?debug=1, 2 o 3 al final de cualquier URL en tu sitio.

?debug=1 = muestra todos los errores/notices ?debug=2 = fuerza que se muestren ?debug=3 = crea un archivo debug.log con todos los errores en el directorio /wp-content.

/**
* Escrito por Jared Williams - http://new2wp.com
* @wp-config.php reemplaza la constante WP_DEBUG con este código
* Activa la depuración de WP para uso en un sitio en producción
* http://core.trac.wordpress.org/browser/trunk/wp-includes/load.php#L230
* Pasa el parámetro '?debug=#' al final de cualquier URL del sitio
*
* http://ejemplo.com/?debug=1, /?debug=2, /?debug=3
*/
if ( isset($_GET['debug']) && $_GET['debug'] == '1' ) {
    // Habilita el reporte de notices durante el desarrollo - E_ALL
    define('WP_DEBUG', true);
} elseif ( isset($_GET['debug']) && $_GET['debug'] == '2' ) {
    // Debe ser true para que WP_DEBUG_DISPLAY funcione
    define('WP_DEBUG', true);
    // Fuerza la visualización de errores
    define('WP_DEBUG_DISPLAY', true);
} elseif ( isset($_GET['debug']) && $_GET['debug'] == '3' ) {
    // Debe ser true para que WP_DEBUG_LOG funcione
    define('WP_DEBUG', true);
    // Registra errores en debug.log en el directorio wp-content
    define('WP_DEBUG_LOG', true);
}

Entro en más detalles en la publicación que escribí como invitado para Comluv si estás interesado, aquí: http://comluv.com/dev/enable-debugging-and-logging-for-live-site-usage/

Todavía estoy trabajando en una forma de hacer esto protegido por contraseña, o preferiblemente hacer que funcione con if (current_user_can('manage_themes') and is_logged_in().

Pero ahí es donde se vuelve mucho más complicado.

13 nov 2010 12:26:27
Comentarios

Utilizamos algo similar para configurar los detalles de conexión de las bases de datos en producción, staging y desarrollo.

Tom Tom
7 mar 2011 19:14:36
0
21

Agregar Títulos Dinámicos Automáticamente a Páginas Públicas

Probado en: WordPress 3.0.1

Utilizando el código siguiente se crearán automáticamente títulos dinámicos basados en las páginas/entradas que se estén visualizando públicamente.

/* Títulos Dinámicos **/
// Esto configura tu <title> dependiendo de la página en la que estés, para mejor formato y SEO
// Necesitas establecer la variable $longd con algún texto personalizado al inicio de la función
function dynamictitles() {
    $longd = __('Ingresa tu descripción larga aquí.', '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(' | '.__('Autor', 'texdomainstring'));

    } else if ( is_category() ) {
          bloginfo('name');
          wp_title(' | '.__('Archivo para', 'texdomainstring'));

    } else if ( is_tag() ) {
          echo get_bloginfo('name').' | '.__('Archivo de etiqueta para', 'texdomainstring');
          wp_title('');

    } else if ( is_archive() ) {
          echo get_bloginfo('name').' | '.__('Archivo para', 'texdomainstring');
          wp_title('');

    } else if ( is_search() ) {
          echo get_bloginfo('name').' | '.__('Resultados de Búsqueda', 'texdomainstring');
    } else if ( is_404() ) {
          echo get_bloginfo('name').' | '.__('Error 404 (Página No Encontrada)', 'texdomainstring');

    } else if ( is_home() ) {
          echo get_bloginfo('name').' | '.get_bloginfo('description');

    } else {
          echo get_bloginfo('name').' | '.($blog_longd);
    }
}
10 sept 2010 03:49:55
13
21

Nuevos Roles y Capacidades - ¡Ejecutar solo una vez!

Mantengo estos códigos a mano, esta es la forma correcta de hacerlo sin un plugin. Establecen un solo campo (prefix_user_roles) en la base de datos de opciones, y no necesitas un plugin para configurarlos. Consulta la página del Codex para obtener una lista de capacidades disponibles y descripciones de lo que hacen. ¡Solo necesitas descomentar uno de estos bloques, cargar cualquier página y luego volver a comentarlos! Aquí estoy creando un rol que tiene las capacidades que necesito:

/* Capacidades */

// Para agregar el nuevo rol, usando 'international' como nombre corto y
// 'International Blogger' como nombre mostrado en la lista de Usuarios y página de edición:
/*
add_role('international', 'International Blogger', array(
    'read' => true, // True permite esa capacidad, False específicamente la elimina.
    'edit_posts' => true,
    'delete_posts' => true,
    'edit_published_posts' => true,
    'publish_posts' => true,
    'edit_files' => true,
    'import' => true,
    'upload_files' => true //¡El último en el array no necesita coma!
));
*/


// Para eliminar un rol completamente o eliminar uno de los predeterminados:
/* 
remove_role('international');
*/

A veces es útil agregar/eliminar de un rol existente en lugar de eliminar y volver a agregar uno. Nuevamente, solo necesitas descomentarlo, recargar una página y luego volver a comentarlo. Esto almacenará el rol/capacidad correctamente en la tabla de opciones. (Esto te permite a ti, el desarrollador, controlarlos y elimina la sobrecarga de los plugins voluminosos que hacen lo mismo.) Aquí estoy modificando el rol de autor para eliminar sus publicaciones (el predeterminado), pero permitiéndoles la capacidad de editar sus publicaciones (que no es posible para este rol por defecto) - usando *add_cap* o *remove_cap*.

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

Mantengo una hoja de cálculo con la cuadrícula de la página del Codex para sitios que modifican de esta manera, para recordar cómo están configuradas las cosas, aunque dejar el código comentado en tu archivo functions.php también funcionará. ¡No dejes estos ejemplos sin comentar, o escribirá en la base de datos con cada carga de página!

9 nov 2010 09:39:14
Comentarios

Las funciones que menciono anteriormente escriben en un campo de la base de datos de opciones. Comentarlas y descomentarlas es el camino a seguir. Existen plugins para roles de usuario, pero si usas las funciones mencionadas anteriormente, no puedes dejar estas funciones ejecutándose, y NO NECESITAS configurarlas más de una vez, ni configurarlas basándote en si un usuario específico está accediendo a algo. Si deseas eso, configura ese usuario con un rol específico y único. Y consulta el codex, todo lo que escribo arriba es 100% correcto si lo haces sin un plugin.

Para casi todos los casos, solo necesitas configurar los roles de usuario una vez.

tomcat23 tomcat23
2 feb 2011 10:58:14

@tomcat23: Para ilustrar, lo envolví en una función para agregar el rol solo cuando no existe previamente. Otra nota: Supongo que sería más fácil colocar el rol en algún lugar de la jerarquía de roles, obteniendo las capacidades de algún rol incorporado y luego agregar/eliminar las capacidades del rol incorporado. Haría que sea más claro y fácil de recordar si sus capacidades se colocan entre, por ejemplo, admin y editor. - Espero que no te moleste que haya editado tu respuesta. Si es así, por favor reviértelo. :)

kaiser kaiser
1 mar 2011 18:25:59

Mantengo mi respuesta como la dejé. Tu función no capta el punto y no proporciona la misma respuesta que mi texto. Además, me parece bastante grosero de tu parte cambiar mi código y respuesta.

tomcat23 tomcat23
12 mar 2011 01:50:11

No solo eso, sino que tu función no hace lo mismo que mi código. ¡Tu función deja solo una verificación más en su lugar, get_role('international', que no es necesaria! Usé este código para migrar un cliente que tenía un servidor que usaba php4 y por lo tanto no podía usar el plugin role scoper que habían estado usando, el cual era solo para php5. (Y era el único plugin que necesitaba php5 en su instalación). Como desarrollador, vi que la única razón por la que lo necesitaban era para configurar un par de roles y cambiar algunas capacidades. ¡Y este código, mi respuesta original aquí, es cómo se hace!

tomcat23 tomcat23
12 mar 2011 02:04:34

No necesitas, ni deberías, envolver esto en una función. Solo necesitas configurar correctamente los roles y capacidades. Si quieres experimentar con ellos, hay algunos plugins geniales (aunque inflados) para eso.

Si entiendes los roles y capacidades en WordPress y no solo estás probando cosas, y no estás escribiendo tu propio plugin, entonces esta es la forma correcta de hacerlo. Por favor no edites mi código. Lo he revertido. Tu envoltura de función está en el historial para que cualquiera la vea, aunque no estoy de acuerdo con lo que has hecho.

tomcat23 tomcat23
12 mar 2011 02:06:37

Para aclarar más, no necesitas envolver esto en una función ni hacer verificaciones de administrador. add_role(), remove_role(), add_cap() y remove_cap(), como muestro en mi respuesta original, no necesitan ejecutarse una y otra vez -- solo establecen un campo en la tabla de opciones que no necesita escribirse repetidamente -- por eso tu envoltura de función es incorrecta. Lo sé, estás agregando una acción a after_setup_theme, pero configurar un rol con ese hook no es de lo que trataba mi respuesta. (Y generalmente los roles no necesitan venir empaquetados con temas).

tomcat23 tomcat23
12 mar 2011 02:17:34

Uf... Como escribí: "Espero que no te importe que haya editado tu respuesta. Si es así, por favor reviértelo. :)". Lo revertiste, explicaste tu razón y adivina qué: Está bien. Así que tranquilo. Pero para ofrecerte la misma cantidad de explicación: Siempre envuelvo las cosas en funciones y las agrego a mi carpeta de archivos de prueba de mi tema. De esta manera puedo probar cosas fácilmente, por ej. respuestas de WA y agregarlas rápidamente si necesito algo, así que envolverlo en una función está bien. Además es más fácil desactivar (solo la llamada add_action) y permitir comentarios de documentación con /**/ en lugar de comentarios multilínea //. Eso es todo sobre mi "por qué".

kaiser kaiser
12 mar 2011 17:35:37

@tomcat23 - Ten en cuenta que somos una comunidad que se apoya mutuamente, no una que se desafía excepto de manera académica. Como ves en la respuesta de @kaiser, él solo estaba intentando ayudar.

MikeSchinkel MikeSchinkel
12 mar 2011 23:48:51

@MikeSchinkel Recuerdo que hubo dos comentarios de @kaiser el 1 de Feb, por eso respondí como lo hice en ese momento. (Eres moderador, ¿puedes ver si él lo hizo? Porque no creo que me equivoque al pensar que él hizo 2 comentarios sobre que mi uso simplemente no le parecía bien). No sentí que mi código o explicación necesitaran ayuda y se lo dije el 1 de Feb. Vuelvo algún tiempo después y encuentro que él ha cambiado mi código -- mi primera exposición al aspecto "wiki" de este sitio -- y estaba, en mi opinión, justificadamente molesto de que mientras mi texto y comentarios discutían una cosa, el código en sí era diferente.

tomcat23 tomcat23
13 mar 2011 05:50:54

Mi respuesta está en el espíritu de la pregunta original. Este es mi código útil, esto es lo que funciona bien para mí y no lo uso envuelto en una función. Si @kaiser hubiera querido responder esta pregunta con el código envuelto en una función y adjunto a un hook, todavía es libre de hacerlo.

De nuevo, @kaiser lo que hiciste al cambiar mi código pero no mi texto fue perjudicial para otras personas que vendrían aquí, lo verían y encontrarían que mi discusión sobre el código no tenía sentido. Por eso siento que fue grosero de tu parte hacer lo que hiciste y por qué respondí ayer de manera tan dura.

tomcat23 tomcat23
13 mar 2011 05:51:33

@tomcat23 - Agua pasada en este punto. Todo lo que digo es que no estoy interesado en echar culpas, solo en tener paz para todos de ahora en adelante. :)

MikeSchinkel MikeSchinkel
13 mar 2011 08:55:27

@MikeSchinkel Sí, tienes razón.

@kaiser Mis disculpas si te he causado algún insulto.

tomcat23 tomcat23
13 mar 2011 10:08:50

@MikeSchinkel: gracias por traer la paz de vuelta. @tomcat23: No, no lo hiciste. Puedo lidiar con ese tipo de críticas. Mis disculpas también.

kaiser kaiser
13 mar 2011 19:44:19
Mostrar los 8 comentarios restantes
0
20

Activar shortcodes en widgets

// shortcode en widgets
if ( !is_admin() ){
    add_filter('widget_text', 'do_shortcode', 11);
}
14 nov 2010 15:59:37
0
20

Pie de página personalizado en el administrador de WordPress

// personalizar el texto del pie de página del administrador
function custom_admin_footer() {
        echo 'agrega aquí tu texto y html personalizado para el pie de página';
} 
add_filter('admin_footer_text', 'custom_admin_footer');

Utilizo esto en los sitios de clientes como una simple referencia para contactarme como desarrollador.

28 dic 2010 02:45:15
2
19

Función para Desactivar los Feeds RSS

Probado en: Wordpress 3.0.1

Puedes desactivar los feeds RSS si deseas mantener tu sitio web basado en Wordpress como estático.

Puedes usar esta función:

function fb_disable_feed() {
wp_die( __('No hay feed disponible, por favor visita nuestra <a href="'. get_bloginfo('url') .'">página de inicio</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);
12 sept 2010 10:24:32
Comentarios

Fuente: http://bueltge.de/wordpress-feeds-deaktivieren/794/ (Frank Bueltge)

fuxia fuxia
16 sept 2010 13:06:04

¡Gracias Toscho! la fuente también está disponible en inglés http://wpengineer.com/287/disable-wordpress-feed/

bueltge bueltge
17 sept 2010 11:27:47
2
16

Cambiar el mensaje "Howdy" por "Bienvenido"

Con esta función puedes personalizar el mensaje "Howdy" en la parte superior derecha de tu área de administración.
Esta función utiliza jQuery para cambiar el mensaje "Howdy" por "Bienvenido".

/****** Personalizar el mensaje de administración "Howdy" a "Bienvenido" ******/
$nohowdy = "Bienvenido";

if (is_admin()) {
    add_action('init', 'artdev_nohowdy_h');
    add_action('admin_footer', 'artdev_nohowdy_f');
}
// Cargar jQuery
function artdev_nohowdy_h() {
    wp_enqueue_script('jquery');
}
// Modificar
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;
}

Versión PHP, usando el filtro gettext:

add_filter('gettext', 'change_howdy', 10, 3);

function change_howdy($translated, $text, $domain) {

    if (!is_admin() || 'default' != $domain)
        return $translated;

    if (false !== strpos($translated, 'Howdy'))
        return str_replace('Howdy', 'Bienvenido', $translated);

    return $translated;
}
28 dic 2010 08:46:48
Comentarios

¿No se puede editar esto ya en el lado de PHP para que no se muestre en absoluto?

hakre hakre
14 feb 2011 21:13:33

Funciona bien aquí en versiones 3.0+ sin duda, pero ¿por qué no en versiones más antiguas? Comprueba si algún otro plugin que uses es responsable de esto. El texto aquí reemplazado con jQuery, ¿quizás un plugin de jQuery?

Philip Philip
14 feb 2011 22:25:52