Uma boa estratégia para saber o quê os visitantes de um site estão interessados em saber é gerenciar as pesquisas feitas dentro desse site. Para inserir esse recurso ao WordPress você pode conferir aqui a criação de um plugin que fará o registros das pesquisas feitas e também apresentará os resultados no painel através de um Dashboard Widget.

O plugin quando inicializado criará (caso não exista) uma tabela própria para armazenar as pesquisas. Em seguida, a cada requisição de busca, armazenará a busca nessa tabela. E por fim um breve relatório será gerado logo na página inicial do dashboard.

Setup do Plugin e Criação da Tabela personalizada

Para gerar os logs de pesquisa no WordPress o plugin, logo após carregado, fará o setup da base de dados (incluindo a nova tabela) e também será responsável por disparar os ganchos wp e wp_dashboard_setup.

// Plugin Name: [wpdev] Log Search
class WPDEV_Log_Search
{
    public static function setup()
    {
        self::database();
        add_action( 'wp', array( 'WPDEV_Log_Search', 'check' ) );
        add_action( 'wp_dashboard_setup', array( 'WPDEV_Log_Search', 'dashboard' ) );
    }
}
add_action( 'plugins_loaded', array( 'WPDEV_Log_Search', 'setup' ) );

O método database atribui o nome da nova tabela que será utilizada para armazenar as pesquisas feitas na classe $wpdb e, na primeira execução do plugin, cria a tabela caso ela ainda não exista na base de dados.

private static function database()
{
    global $wpdb;
    $wpdb->log_search = $wpdb->prefix . 'log_search';

    if ( !get_option( 'log_search_table' ) ) {
        $sql = 'CREATE TABLE IF NOT EXISTS `'.$wpdb->log_search.'` (
            `search_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
            `user_ip` varchar(16) DEFAULT NULL,
            `search_query` varchar(128) NOT NULL DEFAULT "",
            `search_dt` datetime NOT NULL,
            PRIMARY KEY (`search_id`)
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8';
        $wpdb->query( $sql );
        update_option( 'log_search_table', true );
    }
}

Log de Buscas

Como você viu anteriormente, a função que inicializa o plugin dispara dois ganchos. O primeiro deles, o gancho wp, servirá para verificar a requisição feita. Caso o visitante esteja acessando a parte pública do site e esteja executando uma pesquisa um novo log será gerado.

public static function check()
{
    if ( !is_admin() && is_search() )
        self::exec();
}

private static function exec()
{
    $s = get_search_query();
    if ( !$s ) return false;

    $ip = $_SERVER[ 'REMOTE_ADDR' ];

    global $wpdb;
    $log = $wpdb->get_var(
        $wpdb->prepare(
            "SELECT search_id " .
            "FROM {$wpdb->log_search} " .
            "WHERE DATE_FORMAT( search_dt, '%%Y-%%m-%%d' )=%s " .
            "AND search_query=%s " .
            "AND user_ip=%s LIMIT 1",
            date( 'Y-m-d' ), $s, $ip
        )
    );

    if ( $log ) return false;

    $wpdb->insert(
        $wpdb->log_search,
        array(
            'user_ip'       => $ip,
            'search_query'  => $s,
            'search_dt'     => date( 'Y-m-d H:i:s' )
        )
    );
}

Com o endereço IP do usuário um filtro simples é demonstrado para evitar o registro de atualizações de página, paginação e também evidenciar o interesse de pessoas distintas.

Adicionar um Widget no Dashboard

A essa altura o plugin já está fazendo o log das pesquisas realizadas, falta fazer o uso do segundo gancho wp_dashboard_setup e com ele exibir o relatório que se pretende das informações coletadas.

public static function dashboard()
{
    wp_add_dashboard_widget(
        'log-search',
        'Registros de busca',
        array( 'WPDEV_Log_Search', 'metabox' )
    );
}

Como o formato escolhido foi apresentar esse relatório logo na tela inicial do painel administrativo, com a função wp_add_dashboard_widget. Também pode ser utilizada a função add_meta_box passando como quarto parâmetro ($screen) o valor dashboard.

add_meta_box(
    'log-search',
    'Registros de busca',
    array( 'WPDEV_Log_Search', 'metabox' ),
    'dashboard',
    'normal',
    'high'
);

Pesquisas mais Frequentes

A função callback da criação do Dashboard Widget será responsável por inserir o conteúdo a ele. Uma vez que o nome da tabela tenha sido criado na variável global $wpdb, a consulta SQL fica mais fácil de ser realizada sem atribuição do prefixo a cada chamada.

public static function metabox()
{
    ?>
    <div class="box">
        <div class="box-section">
            <b>Pesquisas frequentes</b>
            <?php
            global $wpdb;
            $freq = $wpdb->get_results(
                "SELECT search_query, 
                COUNT( search_id ) AS tot
                FROM {$wpdb->log_search}
                WHERE search_dt >= DATE_SUB( NOW(), INTERVAL 1 MONTH )
                GROUP BY search_query
                ORDER BY tot DESC, search_dt DESC LIMIT 10"
            );
            if ( !$freq ) {
                echo '<p>Nenhuma pesquisa no último mês</p>';
            } else {
                echo '<ol>';
                foreach ( $freq as $f ) {
                    printf(
                        '<li>[%d] %s</li>',
                        $f->tot, $f->search_query
                    );
                }
                echo '</ol>';
            } ?>
        </div>
    </div>
    <?php
}

No exemplo estão filtrados os últimos 10 resultados no período de um mês. Porém, uma vez que os dados estão armazenados, você pode sugerir variações para o seu relatório como por exemplo apresentar as últimas pesquisas realizadas.

$recent = $wpdb->get_results(
    "SELECT search_query, 
    DATE_FORMAT( search_dt, '%d/%m/%Y %H:%i' ) AS search_date
    FROM {$wpdb->log_search}
    WHERE search_dt >= DATE_SUB( NOW(), INTERVAL 1 MONTH )
    ORDER BY search_dt DESC, search_query LIMIT 10"
);

Clique aqui para fazer o download do plugin WPDEV_Log_Search