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 website, permitindo desta forma não só possibilitar aos visitantes que criem e submetam conteúdo para o seu website, com o formato de guest posts, como também lhe dá a oportunidade de criar um website do gênero de diretórios, websites de comunidades, websites de Q&A (Ex.: perguntas e respostas sobre WordPress), portais de partilha de fotografias ou outro tipo de mídia. Estas versatilidade reforça ainda mais a capacidade do WordPress de se afirmar como uma solução framework sólida e fiá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 e introduzida na sua instalação através da instalação de plugins, e embora seja contra o que normalmente tenho vindo a defender, neste caso vamos utilizar um plugin. Assim, neste tutorial vamos-lhe ensinar como criar a funcionalidade de 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 estar a fazer e quais as funções nativas do WordPress que vamos estar a 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 mais em detalhe 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 irão ser necessárias para a conclusão deste artigo, nomeadamente wp_set_post_termsadd_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 tipos de artigos, 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 poderem 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 website que seja do gênero de diretórios, websites de comunidades, websites 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 diretorio de plugins da sua instalação WordPress:

Criar artigos a partir da front end do WordPress

De seguida dirija-se ao painel de administraçao do WordPress e ative o plugin:

Criar artigos a partir da front end do WordPress

Depois de ativado o plugin, dirija-se a uma página existente ou crie uma nova página e insira o shortcode:

Criar artigos a partir da front end do WordPress

Dirija-se à pagina e observe o resultado:

Criar artigos a partir da front end do WordPress

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!