Como desactivar XMLRPC en WordPress

XMLRPC esta activado por defecto desde la versión 3.5 de WordPress sin la posibilidad de desactivarlo desde el panel de administración.

Recientemente se publicó un artículo en el blog de Sucuri sobre Ataques de fuerza bruta contra XMLRPC en WordPress, donde recomiendan desactivar xmlrcp en nuestras instalaciones de WordPress.

Puedes desactivarlo a través de un hook

add_filter('xmlrpc_enabled', '__return_false');

Pero yo diría que la mejor manera de hacer esto es bloqueando las peticiones desde el archivo .htaccess antes de que dichas peticiones lleguen a WordPress.
Para garantizar el funcionamiento de los plugins que usan xmlrpc ( en caso de tener alguno instalado ) puedes denegar completamente el acceso excepto para la IP que necesita acceder.

# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order deny,allow
deny from all
allow from ( hosting IP )
</Files>

Como usar los filtros plugin_action_links y plugin_row_meta

En la lista de plugins instalados en el panel de administración de WordPress se pueden encontrar enlaces bajo el nombre del plugin a la izquierda (Desactivar, Editar) y otros enlaces bajo la descripción del plugin a la derecha, junto a otra información como la versión del plugin (Por el autor, Ver detalles).

default_action_links_es

Los enlaces que aparecen en la imagen encima de estas líneas son los que WordPress muestra por defecto, con excepción del enlace del autor que se define en el archivo principal del plugin donde se dan todos los detalles sobre el mismo Plugin Name, Description, Version, Author, Author URI…

No hace mucho publiqué un snippet de código muy sencillo para añadir enlaces debajo del nombre del plugin, como Ajustes o FAQ (o ambos). Pero con este snippet sólo se pueden añadir los enlaces al final de los ya existentes por defecto.

Tal vez lo que necesitas, además de mostrar enlaces adicionales, es la posibilidad de elegir si los quieres al principio o al final de los ya existentes. Y también puede que quieras añadir enlaces justo debajo de la descripción del plugin (a la derecha).

Hay disponibles 2 filtros diferentes para hacer esto, plugin_action_links para añadir enlaces debajo del nombre del plugin y plugin_row_meta para añadirlos debajo de la descripción del plugin.

additional_action_links_es

En el siguiente código veremos como usar los filtros plugin_action_links y plugin_row_meta. Las funciones my_add_action_links y my_plugin_row_meta, básicamente harían lo mismo, así que he creado una tercera función plugin_action_links que será convocada por las dos primeras, donde se pueden pasar como argumentos un array de los enlaces a mostrar y la posición de los mismos (antes o después de los enlaces por defecto).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
add_filter( 'plugin_action_links', 'my_add_action_links', 10, 5 );
add_filter( 'plugin_row_meta',     'my_plugin_row_meta', 10, 2 );
 
/**
 * my_add_action_links
 */
 
function my_add_action_links( $actions, $plugin_file ) {
 
 $action_links = array(
 
   'settigns' => array(
      'label' => __('Settings', 'my_domain'),
      'url'   => get_admin_url(null, 'options-general.php?page=my-plugin-options')
    ), 
 
   'faq' => array(
      'label' => __('FAQ', 'my_domain'),
      'url' => 'http://www.my-plugins-site.com/faq'
       )
   );
 
  return plugin_action_links( $actions, $plugin_file, $action_links, 'before');
}
 
/**
 * my_plugin_row_meta
 */
 
function my_plugin_row_meta( $actions, $plugin_file ) {
 
 $action_links = array(
 
   'donate' => array(
      'label' => __('Donate', 'my_domain'),
      'url'   => 'http://www.my-plugins-site.com/donate'
    ));
 
  return plugin_action_links( $actions, $plugin_file, $action_links, 'after');
}
 
/**
 * plugin_action_links
 */
 
function  plugin_action_links ( $actions, $plugin_file,  $action_links = array(), $position = 'after' ) { 
 
  static $plugin;
 
  if( !isset($plugin) ) {
      $plugin = plugin_basename( __FILE__ );
  }
 
  if( $plugin == $plugin_file && !empty( $action_links ) ) {
 
     foreach( $action_links as $key => $value ) {
 
        $link = array( $key => '<a href="' . $value['url'] . '">' . $value['label'] . '</a>' );
 
         if( $position == 'after' ) {
 
            $actions = array_merge( $actions, $link );    
 
         } else {
 
            $actions = array_merge( $link, $actions );
         }
 
 
      }//foreach
 
  }// if
 
  return $actions;
 
}

Añade funcionalidad a Contact Form 7

Puedes añadir funcionalidad extra en el plugin Contact Form 7 después de que tomen lugar algunas acciones, por ejemplo cuando un email se ha enviado correctamente.
Contact Form 7 dispara una serie de eventos JavaScript a los que puedes acceder fácilmente, aquí hay un ejemplo usando JQuery.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if( $('.wpcf7').length > 0 ) {
 
  $(document).on('spam.wpcf7', function () {
    console.log('submit.wpcf7 triggered!');
  });
 
  $(document).on('invalid.wpcf7', function () {
    console.log('invalid.wpcf7 triggered!');
  });
 
  $(document).on('mailsent.wpcf7', function () {
    console.log('mailsent.wpcf7 triggered!');
  });
 
  $(document).on('mailfailed.wpcf7', function () { 
    console.log('mailfailed.wpcf7 triggered!');
  });
}

Como truncar el título de un post

1
2
3
4
5
6
7
8
9
10
11
12
$limit = 50;
 
$title = get_the_title(); 
$length = strlen($title);
 
$the_title = substr($title, 0, $limit);
if ($length > $limit) $the_title .= '...';
 
echo $the_title;
 
// get_the_title puede ser reemplazado por $post->post_title;
// reemplazar el valor deseado en $limit

Instala Jetpack sin conectar con WordPress.com

Puedes usar Jetpack en su modo Desarrollo para poder trabajar sin activar el plugin con WordPress.com.

Existen dos métodos para hacer esto, añadiendo una línea en el archivo wp-config.php

define( 'JETPACK_DEV_DEBUG', true);

O bien a través del filtro:

add_filter( 'jetpack_development_mode', '__return_true' );