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

Deja una respuesta