A criação de artigos não tem, obrigatoriamente, de se limitar ao backoffice do WordPress, podendo utilizar um formato de criação de artigos no front end do seu site, possibilitando aos visitantes que criem e submetam conteúdo para o seu site, com o formato de guest posts, como também lhe dá a oportunidade de criar um site do gênero de diretórios, sites de comunidades, sites de Q&A (por exemplo, perguntas e respostas sobre WordPress), portais de partilha de fotografias ou outro tipo de mídia. Esta versatilidade reforça ainda mais a capacidade do WordPress de se afirmar como uma solução framework sólida e confiável ou como uma plataforma para a criação de aplicativos web. A funcionalidade de criar artigos através da front end da sua instalação WordPress pode ser alcançada através da instalação de plugins, e embora seja contra o que normalmente o que costumo defender, neste caso vamos utilizar um plugin. Assim, hoje vamos ensinar como criar artigos a partir da front end do WordPress sem a utilização de plugins, introduzindo alterações necessárias a alguns ficheiros.
1. Conhecer o WP_INSERT_POST()
Antes de avançarmos para a codificação da nossa funcionalidade, é necessário ter algumas noções sobre aquilo que vamos fazer e quais as funções nativas do WordPress que vamos utilizar. A função wp_insert_post() faz a inserção dos artigos e páginas no banco de dados, sanitiza as variáveis, faz algumas verificações e preenche variáveis que estejam em falta, como a data e hora. A sintaxe da utilização desta função é bastante simples, e vamos utilizar o exemplo abaixo para lhe explicar com detalhes a utilização da função:
<?php wp_insert_post( $post, $wp_error ); ?>
Neste caso, o parâmetro $post é um array, que em termos rápidos é o que contém os elementos de um artigo, em que o conteúdo desse array depende do quanto você irá confiar nos valores standard que são atribuídos às variáveis que estão em falta. Para uma lista completa, vertifique o WordPress Codex relativamente ao wp_insert_post.
Existem ainda outras funções que serão necessárias para a conclusão deste artigo, que são wp_set_post_terms, add_post_meta e wp_insert_attachment. O wp-set_post_terms serve para adicionar e fazer atualização dos termos do artigo, o add_post_meta serve para adicionar um custom field para qualquer tipo de artigo, e o wp_insert_attachment serve para que se possa anexar ficheiros ao artigo.
2. Usuários com login ou convidados?
Este é um passo importante na definição da funcionalidade de inserção de artigos na front end do WordPress. Permitir o envio de artigos como convidado ou com o registo e login efetuados vai depender da finalidade que pretende dar ao seu website. Neste caso, vamos fazer com que seja necessário os utilizadores fazerem login para enviar algum conteúdo através do formulário de artigo presente na front end do WordPress.
3. Código necessário
O código necessário para a introdução desta funcionalidade irá fazer com que, para inserir o formulário de criação de artigo na front end do WordPress, seja necessário apenas inserir o shortcode em uma página e o formulário irá ser apresentado. Então, para isso basta você pegar no código abaixo e criar um ficheiro com um nome à sua escolha - neste caso utilizámos o nome artigo_fep.php. O código deste plugin foi fornecido pelos colegas do Cozmo Labs.
<?php
/*
Plugin Name: Simple Front End Posting
Plugin URI: http://cozmoslabs.com/
Description: Método simples para criação de artigos no Front End do WordPress
Author: Cristian Antohe
Version: 0.1
Author URI: http://cozmoslabs.com/
*/
function simple_fep($content = null) {
global $post;
ob_start();
?>
<style>
#fep-new-post label{display:inline-block;width:15%;}
#fep-new-post input{width:60%;}
#fep-new-post input[type="submit"]{margin-left:15%;width:30%;padding:7px;}
#fep-new-post textarea{ display:inline-block;width:80%;vertical-align:top;}
</style>
<div id="simple-fep-postbox" class="<?php if(is_user_logged_in()) echo 'closed'; else echo 'loggedout'?>">
<?php do_action( 'simple-fep-notice' ); ?>
<div class="simple-fep-inputarea">
<?php if(is_user_logged_in()) { ?>
<form id="fep-new-post" name="new_post" method="post" action="<?php the_permalink(); ?>">
<p><label>Title *</label><input type="text" id ="fep-post-title" name="post-title" /></p>
<p><label>Content *</label><textarea class="fep-content" name="posttext" id="fep-post-text" tabindex="1" rows="4" cols="60"></textarea></p>
<p><label>Tags</label><input id="fep-tags" name="tags" type="text" tabindex="2" autocomplete="off" value="<?php esc_attr_e( 'Adicionar tags', 'simple-fep' ); ?>" onfocus="this.value=(this.value=='<?php echo esc_js( __( 'Adicionar tags', 'simple-fep' ) ); ?>') ? '' : this.value;" onblur="this.value=(this.value=='') ? '<?php echo esc_js( __( 'Adicionar tags', 'simple-fep' ) ); ?>' : this.value;" /></p>
<input id="submit" type="submit" tabindex="3" value="<?php esc_attr_e( 'Artigo', 'simple-fep' ); ?>" />
<input type="hidden" name="action" value="post" />
<input type="hidden" name="empty-description" id="empty-description" value="1"/>
<?php wp_nonce_field( 'new-post' ); ?>
</form>
<?php } else { ?>
<h4>Por favor faça login para criar artigo</h4>
<?php } ?>
</div>
</div> <!-- #simple-fep-postbox -->
<?php
$output = ob_get_contents();
ob_end_clean();
if (is_page()) return $output;
}
add_shortcode('simple-fep', 'simple_fep');
function simple_fep_errors(){
?>
<style>
.simple-fep-error{border:1px solid #CC0000;border-radius:5px;background-color: #FFEBE8;margin: 0 0 16px 0px;padding: 12px;}
</style>
<?php
global $error_array;
foreach($error_array as $error){
echo '<p class="simple-fep-error">' . $error . '</p>';
}
}
function simple_fep_notices(){
?>
<style>
.simple-fep-notice{ border:1px solid #E6DB55;border-radius:5px;background-color: #FFFBCC;margin: 0 0 16px 0px;padding: 12px;}
</style>
<?php
global $notice_array;
foreach($notice_array as $notice){
echo '<p class="simple-fep-notice">' . $notice . '</p>';
}
}
function simple_fep_add_post(){
if ( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == 'post' ){
if ( !is_user_logged_in() )
return;
global $current_user;
$user_id = $current_user->ID;
$post_title = $_POST['post-title'];
$post_content = $_POST['posttext'];
$tags = $_POST['tags'];
global $error_array;
$error_array = array();
if (empty($post_title)) $error_array[]='Por favor adicione um título.';
if (empty($post_content)) $error_array[]='Por favor adicione conteúdo.';
if (count($error_array) == 0){
$post_id = wp_insert_post( array(
'post_author' => $user_id,
'post_title' => $post_title,
'post_type' => 'post',
'post_content' => $post_content,
'tags_input' => $tags,
'post_status' => 'publish'
) );
global $notice_array;
$notice_array = array();
$notice_array[] = "Obrigado por criar o artigo. O seu conteúdo foi publicado. ";
add_action('simple-fep-notice', 'simple_fep_notices');
} else {
add_action('simple-fep-notice', 'simple_fep_errors');
}
}
}
add_action('init','simple_fep_add_post');
Embora seja bastante fácil conseguir inserir este plugin na sua instalação WordPress, é um plugin que poderá ser extremamente útil para um site que seja do gênero de diretórios, sites de comunidades, sites de Q&A (perguntas e respostas), portais de partilha de fotografias ou outro tipo de mídia. Para inserir o plugin, envie o ficheiro artigo_fep.php para o diretório de plugins da sua instalação WordPress:
Em seguida, dirija-se ao painel de administraçao do WordPress e ative o plugin:
Depois de ativado o plugin, dirija-se a uma página existente ou crie uma nova página e insira o shortcode:
Dirija-se à pagina e observe o resultado:
Desta forma é possível você criar um editor Front-End para que os seus usuários enviem conteúdo para o seu site gratuitamente, participando e/ou estimulando a participação deles. Você recebe conteúdo de graça, e seus usuários ganham reconhecimento!
Abraço!