April 4, 2019

Crea tus propias sugerencias de plugins en el buscador al estilo Jetpack

Hay un poco de drama desde que «Jetpack» en su versión 7.1 añadiera sugerencias dentro de la busqueda de plugins que puedes realizar desde el admin de tu instalación WordPress… pero NO entiendo el problema 🙂 ¡todos podemos hacerlo!


Según su changelog: «General: add feature suggestions to the plugin search screen.»

A raiz de esto tan molón he analizado cómo podríamos hacer algo parecido partiendo de esta gran idea de «Automattic».

Te presento un código que puedes añadir a tus plugins o directamente instalarlo como plugin en las instalaciones de tus clientes para sugerirles los mejores plugins del repositorio según sus busquedas… o en general muy útil como forma de hacer «spam» o «sugerencias» de tus otros plugins.

 /**
 * Plugin Name: Inject plugins suggestions
 * Plugin URI:  https://sumapress.com
 * Description: Inject custom suggestions in the plugin search results :)
 * Version:     1.0.0
 * Author:      SumaPress
 * Author URI:  https://sumapress.com
 * License:     GPL2
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 */

/**
* If this file is called directly, abort.
*/
if ( ! defined( 'ABSPATH' ) ) {
	die( "Oh, silly, there's nothing to see here." );
}

/**
 * The code that runs during plugin activation.
 */
register_activation_hook( __FILE__ , function() {

    require_once ABSPATH . 'wp-admin/includes/plugin-install.php';

    $plugins_suggestion = [
        [
            'slug'  => 'simple-cookie-control',
            'keys'  => 'simple, cookie, rgpd, gdpr'
        ],
        [
            'slug'  => 'simple-code-block',
            'keys'  => 'simple, code, dev, block'
        ],
        [
            'slug'  => 'simple-ajax-search',
            'keys'  => 'simple, ajax, search'
        ]
    ];

    $custom_plugins_data = [];

    foreach ( $plugins_suggestion as $plugin ) {
        $custom_plugins_data[ $plugin['slug'] ] = (array) plugins_api(
            'plugin_information',
            array(
                'slug'   => sanitize_file_name( $plugin['slug'] ),
                'fields' => array(
                    'short_description' => true,
                    'sections'          => false,
                    'requires'          => false,
                    'downloaded'        => true,
                    'last_updated'      => true,
                    'added'             => false,
                    'tags'              => false,
                    'compatibility'     => false,
                    'homepage'          => false,
                    'donate_link'       => false,
                    'icons'             => true,
                    'banners'           => true,
                ),
            )
        );

        $custom_plugins_data[ $plugin['slug'] ]['keys'] = $plugin['keys'];

    }

    update_option('custom_plugins_data_suggestions', $custom_plugins_data );

} );

/**
 * Add custom plugins data
 */
add_action( 'admin_init', function(){

    add_action( 'current_screen', function( $screen ){

        if ( 'plugin-install' === $screen->base  ) {

            add_filter( 'plugins_api_result', function( $result, $action, $args ){

                if ( ! empty( $args->search ) && strlen( $args->search ) >= 3 ) {

                    $custom_plugins_data = get_option( 'custom_plugins_data_suggestions' );

                    foreach ( $custom_plugins_data as $custom_plugin_data ) {

                        if ( false !== stripos( $custom_plugin_data['keys'], $args->search ) ) {
                            array_unshift( $result->plugins, $custom_plugin_data );
                        }

                    }

                }

                return $result;

            }, 10, 3 );

        }

    } );

} );
  • En primer lugar al activarse el plugin guardamos los datos de nuestros plugins preferidos que queremos recomendar… para ello solo tienes que modificar en la línea 31 la variable $plugins_suggestion y poner tantos plugins como quieras teniendo en cuenta el «slug» oficial del repositorio WordPress.org y un listado de palabras claves con las que quieres que se muestre.
  • Luego simplemente se hace uso de un filtro plugins_api_result para alterar los resultados de busqueda y en función del termino de busqueda «colar» nuestro plugin al inicio del todo. 🙂
  • Como los datos sólo se capturan una vez al activarse el plugin puedes programar una tarea de cron para que se actualicen con la frecuencia que consideres e incluso aunque no es muy correcto hacerlo, puedes alterar los datos referentes a nº descargas, valoraciones, etc… pero esto ya no es muy ético que digamos.

A partir de aquí con esta idea y las propias que nos sugiere «Automattic» si revisais el código de «Jetpack», se pueden hacer variaciones según los objetivos que nos podamos plantear a la hora de sugerir los mejores plugins ( a nuestro criterio ) para las instalaciones de nuestros clientes y/o allí donde instalen alguno de nuestros plugins, no dejando que se olviden del resto.


Quitar «sugerencias» de Jetpack

Por último señalar el código que puedes usar para eliminar las «sugerencias» que hace el plugin «Jetpack» en el caso de que hayas considerado usarlo… y quieras evitar que aparezcan esas sugerencias en las busquedas de plugins.

add_filter( 'jetpack_show_promotions', '__return_false', 20 );

pd: lo curioso es que el código para quitar estas «sugerencias» parezca más bien que hace alusión a promociones… lo que viene a ser anuncios o spam 🙂

Si te ha gustado... ¡Compártelo!