Funciones interesantes para WordPress

WordPress es un gestor de contenidos muy flexible que prácticamente permite hacer cualquier cosa. Y entre ellas está la posibilidad de aplicar algunas funciones para retocar el sistema. Si alguna de estas te es útil, crea un plugin o añádelo a tu fichero de funciones.

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 Tinymce HTML 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 '';
  }
}
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 '<meta name="description" content="'.$meta.'">';
}
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 Tinymce HTML:

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');
Categorías WordPress

Deja un comentario