Funciones para potenciar tu WordPress

A través del Twitter de Javier Casares he leído en los últimos días una interesante serie de códigos que convenientemente añadidos pueden ayudar a mejorar funciones de WordPress alojado en tu propio servidor: funciones interesantes para WordPress, más funciones interesantes para WordPress y aún más funciones interesantes para WordPress todo ellos sin echar mano de plugins, sólo agregandolas a tu .

Como estaban en 3 post distintos, me he decidido a unificarlos en uno sólo, más que nada por comodidad y así tenerlo todo juntito y a mano.


Como supongo que que ya sabréis y si no lo sabéis os lo cuento yo, WordPress tiene habitualmente en la carpeta del “theme” un fichero llamado functions.php en el que se pueden incluir una serie de funciones que se pueden ejecutar en cualquier lugar del diseño, funciones que sobreescriban, eliminen o amplíen algunas de las que ya vienen por defecto en esta estupenda plataforma personal de publicación semántica.
No es muy recomendable pasarse agregando todas las funciones de golpe (ya que aumentarán las necesidades de recursos de la máquina y llegarían a enlentecer tu WordPress hasta un punto insufrible) pero sí que es interesante tener en cuenta algunas de estas por si te pueden ser útiles en algún momento y en algún lugar:

Añadir tu propio CSS en wp_nav_menu:

function custom_nav_class($classes, $item) {
  $classes[] = "custom-class";
  return $classes;
}
add_filter('nav_menu_css_class' , 'custom_nav_class' , 10 , 2);

Eliminar la versión de WordPress del RSS/Atom:

function remove_feed_generator() {
  return '';
}
add_filter('the_generator', 'remove_feed_generator');

Añadir un campo para Twitter y Facebook en la ficha del usuario, y mostrarlo en el listado de usuarios:

function add_contactmethods($contactmethods) {
  $contactmethods['twitter'] = 'twitter';
  $contactmethods['facebook'] = 'facebook';
  return $contactmethods;
}
add_filter('user_contactmethods','add_contactmethods',10,1);
function profile_links($actions, $user_object) {
  $actions['website'] = '<a href="'.$user_object->user_url.'">web</a>';
  $actions['facebook'] = '<a href="'.$user_object->facebook.'">fb</a>';
  $actions['twitter'] = '<a href="'.$user_object->twitter.'">tw</a>';
  return $actions;
}
add_filter('user_row_actions', 'profile_links', 10, 2);

Cambiar el color de las entradas en el panel de administración según su estado:

function posts_status_color() {
?>
  <style>
  .status-draft { background: #FCE3F2 !important; }
  .status-pending { background: #87C5D6 !important; }
  .status-publish { /* por defecto */ }
  .status-future { background: #C6EBF5 !important; }
  .status-private { background: #F2D46F; }
  </style>
<?php
}
add_action('admin_footer','posts_status_color');

Enviar al resultado cuando sólo hay uno en una búsqueda:

function single_result() {
  if(is_search()) {
    global $wp_query;
    if($wp_query->post_count == 1) {
      wp_redirect(get_permalink($wp_query->posts['0']->ID ));
    }
  }
}
add_action('template_redirect', 'single_result');

Añadir ancho y alto en el listado de contenidos multimedia:

function tamany_column($cols) {
  $cols["dimensions"] = "Dim (Wid × Hei)";
  return $cols;
}
function tamany_value($column_name, $id) {
  $meta = wp_get_attachment_metadata($id);
  if(isset($meta['width']))
    echo $meta['width'].' × '.$meta['height'];
}
add_filter('manage_media_columns', 'tamany_column');
add_action('manage_media_custom_column', 'tamany_value', 10, 2);

Limitar la subida de ficheros a GIF, JPG y PNG:

function restrict_mime($mimes) {
  $mimes = array(
    'gif' => 'image/gif',
    'jpg|jpeg|jpe' => 'image/jpeg',
    'png' => 'image/png'
  );
  return $mimes;
}
add_filter('upload_mimes', 'restrict_mime');

Habilitar el editor HTML Tinymce sólo para algunos usuarios:

function disable_html_editor_wps() {
  global $current_user;
  get_currentuserinfo();
  $users = array("admin", "juan", "maria");
  if(!in_array($current_user->user_login, $users)) {
    echo '%MINIFYHTML0327e4285542a41d2de3d0496e846a7a6%';
  }
}
add_filter('wp_default_editor', create_function('', 'return "tinymce";'));
add_action('admin_head', 'disable_html_editor_wps');

Crea un meta-description con el texto del contenido:

function create_meta_description() {
  global $post;
  if(!is_single()) { return; }
  $meta = strip_tags($post->post_content);
  $meta = strip_shortcodes($post->post_content);
  $meta = str_replace(array("\n", "\r", "\t"), ' ', $meta);
  $meta = substr($meta, 0, 160);
  echo '';
}
add_action('wp_head', 'create_meta_description');

Cambia la cantidad de elementos por página en el panel de administración:

function admin_pagination() {
  global $wp_query;
  $per_page = 50;
  $wp_query->query('showposts='.$per_page);
}
add_action('admin_head', 'admin_pagination');

Eliminar palabras de menos de 3 letras en la URL al crearse:

function remove_short_words($slug) {
  if (!is_admin()) return $slug;
  $slug = explode('-', $slug);
  foreach ($slug as $k => $word) {
    if (strlen($word) < 3) {
      unset($slug[$k]);
    }
  }
  return implode('-', $slug);
}
add_filter('sanitize_title', 'remove_short_words');

Mostrar un bloque con la URL corta de cada entrada en su panel:

function shortlink_add_column($cols) {
  $cols['shortlink'] = 'Enlace Corto';
  return $cols;
}
function shortlink_add_value($column_name, $post_id) {
  if ('shortlink' == $column_name) {
    echo '<input type="text" value="'.wp_get_shortlink($post_id).'" onclick="this.focus(); this.select();">';
  }
}
function shortlink_sortable_column($columns) {
  $columns['shortlink'] = 'Enlace Corto';
  return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'shortlink_sortable_column');
add_filter('manage_posts_columns', 'shortlink_add_column');
add_action('manage_posts_custom_column', 'shortlink_add_value', 10, 2);

Los usuarios (no admin) sólo pueden ver su librería multimedia:

function my_files_only($wp_query) {
  if(strpos($_SERVER['REQUEST_URI'], '/wp-admin/upload.php') !== false) {
    if(!current_user_can('level_5')) {
      global $current_user;
      $wp_query->set('author', $current_user->id);
    }
  }
}
add_filter('parse_query', 'my_files_only');

Los usuarios (no admin) sólo pueden ver sus entradas:

function posts_for_current_author($query) {
  global $pagenow;
  if('edit.php' != $pagenow || !$query->is_admin)
    return $query;
  if(!current_user_can('manage_options')) {
    global $user_ID;
    $query->set('author', $user_ID);
  }
  return $query;
}
add_filter('pre_get_posts', 'posts_for_current_author');

Ver más botones en el editor de HTML Tinymce:

function fb_change_mce_options($initArray) {
  $ext = 'pre[id|name|class|style],iframe[align|longdesc|name|width|height|frameborder|scrolling|marginheight|marginwidth|src]';
  if(isset($initArray['extended_valid_elements'])) {
    $initArray['extended_valid_elements'] .= ','.$ext;
  } else {
    $initArray['extended_valid_elements'] = $ext;
  }
  return $initArray;
}
add_filter('tiny_mce_before_init', 'fb_change_mce_options');

Si te gustó ya sabes lo que toca, haz click en los votos positivos, publica tu comentario, compartelo en tu blog o red social favorita y/o díselo al propio Durky en cualquiera de los medios que pone a tu alcance, agradeciendole tan valiosa aportación de conocimiento útil y práctico en torno a WordPress.

Deja tu comentario, no te cortes

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s