Tutorial: Como adicionar um painel de opções ao seu tema WordPress

  • Autor Autor mrv89
  • Data de início Data de início
Este tópico foi traduzido automaticamente do espanhol. Ver original
M

mrv89

Beta
Usuário com poucas negociações! Use sempre o saldo do ForoBeta!
Escrevo este tutorial porque, há algum tempo, comecei a desenvolver temas para WordPress com licenças comerciais e, de imediato, surgiu a necessidade de incorporar um painel de opções de personalização para cada tema. Ao buscar informações sobre painéis de usuário (opções) para WordPress, encontrei poucos tutoriais bons, e a maioria incluía muito, mas muito código mesmo. Este tutorial baseia-se em incorporar um painel de opções para temas WordPress utilizando um framework chamado NHP Theme Options Panel, que é o framework que utilizo atualmente e com o qual obtive resultados muito bons.

Para que serve um painel de opções?

Ver o anexo 11925

Um painel de opções oferece aos usuários distintos níveis de personalização que, de outra forma, só seriam possíveis modificando o código-fonte do tema. O painel permite alterar logos, cores, fundos, títulos, fontes e uma infinidade de opções.

O NHP Theme Options Framework está disponível para download no GitHub e pode ser utilizado tanto para projetos comerciais quanto pessoais.

Instalação do Framework

Passo 1
: Baixar do GitHub.

Passo 2: Extrair os arquivos; neles você encontrará um documento chamado “nhp-options.php” e uma pasta com o nome “opt”.

Passo 3: Copie os arquivos para o diretório raiz do seu tema, ex: (wp-content/themes/seu-tema)

Ver o anexo 11928

Passo 4: Vá ao arquivo “functions.php” do seu tema e escreva a seguinte linha de código:

PHP:
// NHP Theme Options Panel
if (is_admin()) {
require('nhp-options.php' );
}

Passo 5: Pronto!, agora o painel está instalado e pronto para trabalhar.

Ver o anexo 11926

Agora vem a parte boa..

Passo 7: Abrir o arquivo que incluímos no diretório do tema (nhp-options.php); na linha 103 aproximadamente, encontraremos este código:

PHP:
//Choose a custom option name for your theme options, the default is the theme name in lowercase with spaces replaced by underscores
$args['opt_name'] = 'twenty_eleven';

Importante: Aqui devemos substituir onde diz ‘twenty_eleven’ pelo nome do nosso tema, ou qualquer nome que desejarem.

Passo 8: Personalizar, personalizar!

Agora vem o importante: não adianta nada ter um painel repleto de opções que nunca vamos utilizar, por isso é preciso decidir o que vamos precisar e o que não.

A partir da linha 153 aprox., encontraremos as opções do framework; tudo o que adicionarmos ou removermos aqui será refletido no painel de opções.

Ver o anexo 11927

Na imagem anterior podemos ver como funciona o painel; as opções estão armazenadas em arrays, então, por exemplo, na segunda seção pode-se ver o seguinte (Versão simplificada):

PHP:
$sections[] = array(
               'icon' => NHP_OPTIONS_URL.'img/glyphicons/glyphicons_107_text_resize.png', // EL ÍCONO QUE LLEVARÁ LA SECCIÓN
               'title' => __('Text Fields', 'nhp-opts'), //EN NOMBRE QUE LLEVARÁ LA SECCIÓN
               'desc' => __('<p class="description">This is the Description. Again HTML is allowed2</p>', 'nhp-opts'), //LA DESCRIPCIÓN
               'fields' => array( //AQUÍ COMIENZAN LOS CAMPOS DE LA SECCIÓN
                   array(
                       'id' => '1', //EL ID DEL CAMPO (Puede ser en texto por ejemplo: txt_titulo_principal)
                       'type' => 'text', // TIPO DE CAMPO (En este caso es un text)
                       'title' => __('Text Option', 'nhp-opts'), //EL TITULO
                       'sub_desc' => __('La descripción del campo', 'nhp-opts'),
                       'desc' => __('Otra descripción para información adicional', 'nhp-opts'),
                       'std' => '', //EL VALOR POR DEFECTO (Si el usuario lo deja vacio, o el valor con el que vendrá el theme)
                        ),
                  // más campos de aquí hacia abajo...

Agora, a título de exemplo, vou adicionar uma seção que utilizarei em um dos meus temas:

PHP:
$sections[] = array(
				'icon' => NHP_OPTIONS_URL.'img/glyphicons/glyphicons_023_cogwheels.png',
				'title' => __('Opciones Generales', 'nhp-opts'),
				'desc' => __('', 'nhp-opts'),
				'fields' => array(
					array(
                                                //Select para decidir si se usara una imagen como logo o no.
						'id' => 'slc_logo', //El id del campo
						'type' => 'select', //Campo del tipo Select
						'title' => __('Utilizar un logo para el theme?', 'nhp-opts'), //Titulo
						'sub_desc' => __('Selecciona entre si o no', 'nhp-opts'), //Descripción (Opcional)
						'desc' => __('', 'nhp-opts'), //Otra descripción (Opcional)
						'options' => array('1' => 'No','2' => 'Si'),//Valores del Select (No es = 1 y Si es = 2) IMPORTANTE!
						'std' => '1' //El valor por defecto es 1 (Es decir No)
						),
					array(
                                                 //Text para la url de la imagen
						'id' => 'logo_url', //El ID será logo_url
						'type' => 'text', //Campo tipo texto
						'title' => __('Logo URL', 'nhp-opts'), //Titulo
						'sub_desc' => __('Ingresa la URL de tu logo', 'nhp-opts'), //Descripción (Opcional)
						'desc' => __('Deja este campo vacío si no quieres usar una imagen como logo', 'nhp-opts'), //Otra descripción (Opcional)
						'std' => '' //Valor por defecto vacío
						)
					)
				);

No código acima, criamos uma seção chamada "Opciones Generales"; dentro dessa seção vão dois campos, um do tipo SELECT e outro do tipo TEXT. O primeiro servirá como estrutura de controle para decidir se utilizaremos ou não uma imagem como logo. Caso contrário, mostraremos o título do Blog (definido nas opções gerais do WordPress).

Então, ao salvar o arquivo e atualizar, minha nova seção deveria ficar assim:

seccion de prueba.webp

E agora, como diabos utilizo isso no meu tema?, simples:

No passo 7 definimos um nome para as opções, agora devemos inserir este código no lugar que você desejar do tema (header.php de preferência, mas teste em outras seções caso não funcione):

PHP:
<?php $options = get_option('el_nombre_que_elegiste'); ?>

Isso armazena todas as nossas opções do tema em $options, e poderemos acessar a elas definindo seu índice ou ID que utilizamos para cada campo. Quando criamos o select para decidir se utilizamos ou não uma imagem como logo, foi atribuído o id de 'slc_logo'.

E agora utilizamos a seção que criamos:


No meu caso e para as minhas necessidades, o código ficou assim:

PHP:
<div id="header">
	<h1>
          <?php if($options['slc_logo'] == 2): ?>
           <a href="<?php echo get_option('home'); ?>/"><img class="logot" src="<?php $options['logo_url'] ?>" /></a>
          <?php else: ?>
           <a href="<?php echo get_option('home'); ?>"><?php bloginfo('name'); ?></a>
       </h1>
</div>

No código acima, tenho uma div que define o header do tema, depois vem o h1 onde estará o título do blog ou o logo; para determinar isso, utilizamos as opções do tema. Utilizando um if bastante simples, verificamos qual valor está atribuído ao select que criamos no painel. Caso o select tenha atribuído o valor "2" (que significa "sim"), vamos mostrar uma imagem como logo; a url da imagem será a que o usuário inseriu no segundo dos nossos campos, o text. Chamamos o valor através do seu ID 'logo_url'. Se o select tiver um valor diferente de 2, dentro do h1 irá o título do blog, isso através da função do WordPress bloginfo('name').

Como veem, é questão de experimentar; o framework vem com todas as opções possíveis, campos para gerar degradês, cores, datas, selecionar posts, texto, etc., etc., etc. É só baixar e testar.

Não custa dizer que este é o primeiro tutorial que faço na minha vida, não tenho experiência ensinando e, se ficou muito confuso, podem me consultar; não tenho problemas em responder qualquer tipo de dúvida a respeito.

Bom, espero que isso sirva para alguém, abraços.
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
Excelente contribuição! :encouragement:
 
Obrigado pela contribuição, será muito útil para muitos. Abraços.
 
Obrigado, muito interessante!
 
Justo estava procurando por isso, obrigado :3
 
Parece genial. Já vamos conferir com calma. Muito obrigado. Enviado do meu SGS3 Mini usando Tapatalk 2
 
Obrigado pela informação, mas já não está disponível
 
Muito promissor, prometo conferir...
 
Este painel de opções está muito bom, e testando notei um probleminha, que é o fato de colocar aspas no resultado. Por exemplo, se crio uma opção para que possam inserir um iframe ou o código para a publicidade,
PHP:
<?php echo $options['1'];?>
me retorna
PHP:
"
<script type="text/javascript"><!--
google_ad_width = 300;
google_ad_height = 250;
//-->
</script>
<script type="text/javascript"
src="how_ads.js">
</script>

"
e ao inserir o código entre aspas, ele não executa o código e só o considera como texto, isso não acontece comigo com os campos personalizados ou com o menu de opções que crio manualmente. Fazendo testes, notei que isso só ocorre com os textarea, com os campos text funciona corretamente. Alguma sugestão?
 
Última edição:
"Arquivo em anexo especificado inválido. Se você seguiu um link válido, por favor notifique o administrador"
 
Está super o tutorial, penso em implantá-lo em um dos meus sites 😀 Obrigado, boa contribuição!
 
não consigo fazer com que me mostre algo
Tenho o seguinte
Modifiquei a linha 103 como você menciona

Inserir CODE, HTML ou PHP:
$args['opt_name'] = 'movistrap';

Isto é o que inseri no head depois de <body>

Inserir CODE, HTML ou PHP:
<?php $options = get_option('movistrap'); ?>

este é o código personalizado que eu criei e que desejo que mostre as urls que inserem nos campos

Inserir CODE, HTML ou PHP:
$sections[] = array(
				'icon' => NHP_OPTIONS_URL.'img/glyphicons/glyphicons_093_crop.png',
				'title' => __('Redes Sociales', 'nhp-opts'),
				'desc' => __('<p class="description">Agrega las url que utilizaran los botonos de redes sociales en el sidebar</p>', 'nhp-opts'),
				'fields' => array(
					array(
						'id' => '1',
						'type' => 'text',
						'title' => __('Url de Facebook', 'nhp-opts'), 
						'sub_desc' => __('Ejemplo: https://www.facebook.com/Kerneleros', 'nhp-opts'),
						'desc' => __('Colca aqui la url de tu fanpage o perfil de facebook .', 'nhp-opts')
						),
					array(
						'id' => 'gourl',
						'type' => 'text',
						'title' => __('Google + Url', 'nhp-opts'), 
						'sub_desc' => __('Ejemplo: https://www.facebook.com/Kerneleros', 'nhp-opts'),
						'desc' => __('Colca aqui la url de tu pagina de Google+ del sitio o personal.', 'nhp-opts')
						),
					array(
						'id' => 'tweturl',
						'type' => 'text',
						'title' => __('Twitter Site Url', 'nhp-opts'), 
						'sub_desc' => __('ejemplo: http://twitter.com/kerneleros', 'nhp-opts'),
						'desc' => __('Colca aqui la url de tu cuenta de twitter o la del sitio.', 'nhp-opts')
						),
					array(
						'id' => 'yuturl',
						'type' => 'text',
						'title' => __('Youtube Url', 'nhp-opts'), 
						'sub_desc' => __('Ejemplo: http://www.youtube.com/user/MsDarkcr', 'nhp-opts'),
						'desc' => __('Cola la url de tu canal de youtube.', 'nhp-opts')
						),
					array(
						'id' => 'dailurl',
						'type' => 'text',
					'title' => __('dailymotion Url', 'nhp-opts'), 
						'sub_desc' => __('Ejemplo: http://www.dailymotion.com/darkcrizt', 'nhp-opts'),
						'desc' => __('Coloca la Url de tu canal de dailymotion.', 'nhp-opts')
						),
                        array(
						'id' => 'askurl',
						'type' => 'text',
						'title' => __('Ask.fm url', 'nhp-opts'), 
						'sub_desc' => __('Ejemplo: http://ask.fm/darkcrizt', 'nhp-opts'),
						'desc' => __('Coloca la url de tu perfil de Ask.fm.', 'nhp-opts')
						),	
                       array(
						'id' => 'fdburl',
						'type' => 'text',
						'title' => __('Feedburner url', 'nhp-opts'), 
						'sub_desc' => __('Ejemplo: http://feeds.feedburner.com/kerneleros', 'nhp-opts'),
						'desc' => __('Coloca la url de tu feedburner.', 'nhp-opts')
						),	
                        array(
						'id' => 'pinurl',
						'type' => 'text',
					'title' => __('Pinterest url', 'nhp-opts'), 
						'sub_desc' => __('ejemplo:http://pinterest.com/darkcrizt/', 'nhp-opts'),
						'desc' => __('Coloca la url de tu Pinterest.', 'nhp-opts')
						),	
                       array(
						'id' => 'vimurl',
						'type' => 'text',
					'title' => __('Vimeo Url', 'nhp-opts'), 
						'sub_desc' => __('Ejemplo: https://vimeo.com/darkcrizt', 'nhp-opts'),
						'desc' => __('Coloca la url de tu canal de Vimeo.', 'nhp-opts')
						)							
					)
				);

E desejo que se mostre no seguinte código html que tenho na minha sidebar

Inserir CODE, HTML ou PHP:
	<!--Boton Facebook-->  		
<div class="botones-social">        
<a class="f-bg" href="<?php echo $options['1'] ;?>">     
<i class="icon-social f-lg"></i> Kerneleros en Facebook                
</a>    </div>    
<!--Boton twitter-->    
<div class="botones-social">        
<a class="t-bg" href="<?php echo $options['tweturl']; ?>">    
<i class="icon-social t-lg"></i> Kerneleros en Twitter</a>    </div>    
<!--Boton Google plus--> 
<span itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><span itemprop="name"> <div class="botones-social">        
<a class="g-bg" href="<?php echo $options['gourl'] ;?>">      
<i class="icon-social g-lg"></i> Kerneleros en Google +</a></div>  </span> </span> 
 <!--Boton Youtube-->    
 <div class="botones-social">        
 <a class="y-bg" href="<?php echo $options['yuturl'] ;?>">     
 <i class="icon-social y-lg"></i> Kerneleros en Youtube            
 </a>    </div><!--Boton Dailymotion-->    
 <div class="botones-social">        
 <a class="f-bg" href="<?php echo $options['dailurl'] ;?>">     
 <i class="icon-social dai-lg"></i> Dailimotion de Kerneleros           
 </a>    </div>    <!--Boton RSS-->    
 <div class="botones-social">        
 <a class="pt-bg" href="<?php echo $options['fdburl'] ;?>">      
 <i class="icon-social fe-lg"></i> FeedBunner de Kerneleros   
 </a>    </div>    <!--Boton Pinterest-->    
 <div class="botones-social">        
 <a class="g-bg" href="<?php echo $options['pinurl'] ;?>">       
 <i class="icon-social p-lg"></i> Pinterest de Kerneleros            
 </a>    </div>    <!--Boton Ask.FM-->   
 <div class="botones-social">        
 <a class="pt-bg" href="<?php echo $options['askurl'] ;?>">    
 <i class="icon-social ask-lg"></i> Ask.Fm de kerneleros           
 </a>    </div><!--Boton Vimeo-->    
 <div class="botones-social"> <a class="t-bg" href="<?php echo $options['vimurl'] ;?>">       
 <i class="icon-social vi-lg"></i> Kerneleros en Vimeo           
 </a>    </div>
Mas não mostra as urls :/

---------- Post adicionado em 01-jul-2013 hora: 01:18 ----------

Eu mesmo me respondo, é preciso colocar a etiqueta em cada parte do theme onde utilizemos as opções do framework
<?php $options = get_option('movistrap'); ?>
Por exemplo, no header e na sidebar é preciso declará-lo em cada arquivo
 
de luxo o tutorial
 
você se esforçou. Obrigado 🙂
 
Muito obrigado, é de muita ajuda para mim.
 
parece bom, vou revisar com mais calma, sou bom criando designs...
o que me faltaria seria implementá-lo ao wordpress e vender meus themes e usá-los para meus clientes :topsy_turvy:

mil obrigados
 
Excelente contribuição.
 
Voltar
Topo