Como adicionar um feed RSS personalizado no painel do WordPress
A Internet está cheia de ótimos recursos e é difícil dar uma olhada em tudo. Claro que existe o Twitter para ficar de olho nas tendências, ou softwares leitores de RSS, mas você é como eu muito ocupado, às vezes é chato ter 20 softwares abertos ao mesmo tempo. É por isso que decidi usar meu painel do WordPress como uma plataforma global para ter acesso rápido a esses feeds. Um exemplo que quero compartilhar hoje é como criar uma metabox RSS personalizada no painel do WordPress.
Aqui está o resultado final do que vamos criar:
Etapa 1: o plug-in
Para adicionar esta metabox precisamos criar um plugin. Então, simplesmente crie uma nova pasta chamada “my-dashboard-metaboxes” em wp-content/plugins/ e dentro da nova pasta crie um arquivo chamado my-dashboard-metaboxes.php. Este arquivo será o arquivo de plugin principal. Abra-o em seu editor principal. O código abaixo é o código que irá gerar o plugin. Nada realmente complexo aqui:
<?php
/*
Plugin Name: My Dashboard Metaboxes
Plugin URL: http://remicorson.com/
Description: Adds custom meta boxes on the main admin dashboard
Version: 0.1
Author: Remi Corson
Author URI: http://remicorson.com
Contributors: corsonr
Text Domain: rc_mdm
*/
Passo 2: Registrando a Metabox
Agora que temos um plugin vazio (quero dizer um plugin que não faz nada), precisamos registrar pelo menos uma metabox para ser exibida no painel do WordPress. Para isso, temos que criar uma nova função que vai ligar o gancho “ wp_dashboard_setup ”. Vamos chamar esta função de “rc_mdm_register_widgets()”. Dentro desta função precisamos dizer ao WordPress que queremos adicionar uma nova metabox, e este é o objetivo da função “ wp_add_dashboard_widget() ”. Esta função aceita 4 parâmetros:
1 – $widget_id (inteiro) (obrigatório) um slug de identificação para seu widget. Isso será usado como sua classe css e sua chave no array de widgets.
Padrão: Nenhum
2 – $widget_name (string) (obrigatório) este é o nome que seu widget exibirá em seu cabeçalho.
Padrão: Nenhum
3 – $callback (string) (obrigatório) O nome de uma função que você cria que exibirá o conteúdo real do seu widget.
Padrão: Nenhum
4 – $control_callback (string) (opcional) O nome de uma função que você cria que tratará do envio de formulários de opções de widget (configuração), e também exibirá os elementos do formulário.
O importante aqui é o terceiro parâmetro, é aquele que define as funções que serão carregadas na metabox. Neste exemplo é chamado “rc_mdm_create_my_rss_box()”.
/**
* Register all dashboard metaboxes
*
* @access public
* @since 1.0
* @return void
*/
function rc_mdm_register_widgets() {
global $wp_meta_boxes;
wp_add_dashboard_widget(‘widget_freelanceswitch’, __(‘My RSS Feeds’, ‘rc_mdm’), ‘rc_mdm_create_my_rss_box’);
}
add_action(‘wp_dashboard_setup’, ‘rc_mdm_register_widgets’);
Passo 3: O Conteúdo Metabox
Se você ativar o plug-in e acessar o painel do WordPress, deverá ver uma nova metabox vazia. Agora precisamos preencher seu conteúdo. Coisas importantes para esta função é incluir o arquivo “feed.php” embutido no WordPress para poder usar a função “fetch_feed()”. Observe que estamos usando “fetch_feed()” porque “fetch_rss()”, “get_rss()” e “wp_rss()” estão obsoletos. Pela primeira vez, incluí todos os comentários diretamente no código, mas gostaria de chamar sua atenção para alguns recursos interessantes que estou usando dentro da função metabox.
Em primeiro lugar, há a função “ fetch_feed() ”. Este é usado para obter e analisar o conteúdo dos feeds. Esta função está usando a classe SimplePie , então você pode aproveitar quase todas as funções incluídas nela.
Temos então a função “human_time_diff()” que é usada para exibir a hora como “ human_time_diff() ”, por exemplo para exibir algo como “2 horas atrás”, “4 dias atrás” etc… é uma função do WordPress.
E finalmente temos “ wp_html_excerpt() ” para encurtar o conteúdo de cada feed.
Todas as outras funções são funções bem conhecidas do WordPress ou estão incluídas na classe Simple Pie.
Aqui está o código:
/**
* Creates the RSS metabox
*
* @access public
* @since 1.0
* @return void
*/
function rc_mdm_create_my_rss_box() {
// Get RSS Feed(s)
include_once(ABSPATH . WPINC . ‘/feed.php’);
// My feeds list (add your own RSS feeds urls)
$my_feeds = array(
‘http://feeds.feedburner.com/FSAllJobs’,
‘http://www.wphired.com/feed/?post_type=job_listing’
);
// Loop through Feeds
foreach ( $my_feeds as $feed) :
// Get a SimplePie feed object from the specified feed source.
$rss = fetch_feed( $feed );
if (!is_wp_error( $rss ) ) : // Checks that the object is created correctly
// Figure out how many total items there are, and choose a limit
$maxitems = $rss->get_item_quantity( 3 );
// Build an array of all the items, starting with element 0 (first element).
$rss_items = $rss->get_items( 0, $maxitems );
// Get RSS title
$rss_title = ‘<a href=”‘.$rss->get_permalink().'” target=”_blank”>’.strtoupper( $rss->get_title() ).'</a>’;
endif;
// Display the container
echo ‘<div class=”rss-widget”>’;
echo ‘<strong>’.$rss_title.'</strong>’;
echo ‘<hr style=”border: 0; background-color: #DFDFDF; height: 1px;”>’;
// Starts items listing within <ul> tag
echo ‘<ul>’;
// Check items
if ( $maxitems == 0 ) {
echo ‘<li>’.__( ‘No item’, ‘rc_mdm’).’.</li>’;
} else {
// Loop through each feed item and display each item as a hyperlink.
foreach ( $rss_items as $item ) :
// Uncomment line below to display non human date
//$item_date = $item->get_date( get_option(‘date_format’).’ @ ‘.get_option(‘time_format’) );
// Get human date (comment if you want to use non human date)
$item_date = human_time_diff( $item->get_date(‘U’), current_time(‘timestamp’)).’ ‘.__( ‘ago’, ‘rc_mdm’ );
// Start displaying item content within a <li> tag
echo ‘<li>’;
// create item link
echo ‘<a href=”‘.esc_url( $item->get_permalink() ).'” title=”‘.$item_date.'”>’;
// Get item title
echo esc_html( $item->get_title() );
echo ‘</a>’;
// Display date
echo ‘ <span class=”rss-date”>’.$item_date.'</span><br />’;
// Get item content
$content = $item->get_content();
// Shorten content
$content = wp_html_excerpt($content, 120) . ‘ […]’;
// Display content
echo $content;
// End <li> tag
echo ‘</li>’;
endforeach;
}
// End <ul> tag
echo ‘</ul></div>’;
endforeach; // End foreach feed
}
Na linha 15 há um array onde você pode colocar quantos feeds quiser. Você também pode definir o número de cada item de feed a ser exibido na linha 27. Finalmente, na linha 50 e 54, você pode optar por exibir uma data humana ou uma data normal. Você decide.
Conclusão
Ok, então criamos uma metabox simples, mas agora você tem o básico para criar suas próprias metaboxes com seu próprio conteúdo. Você também pode remover metaboxes padrão do WordPress e, para ter uma compreensão completa da API de widgets do painel , recomendo que você, como sempre, dê uma olhada no codex .