Skip to content

Destaques nos posts/pages

julho 23, 2011

Muito útil para  para atribuir características diferenciadas a um post qualquer. Ex: marcar um post como “Destaque”

Neste caso vamos adicionar um box com alguns radios abaixo da caixa do editor de texto do wordpress.

PARTE 1

Supondo que colocamos o código num arquivo “/lib/destaques.php” será preciso dar carga no mesmo, incluindo uma linha no arquivo “functions.php” do seu tema. A linha será

“require_once(STYLESHEETPATH.’/lib/destaques.php’);”

O código abaixo cuida do box.

add_action(‘admin_menu’, ‘rpbr_add_inpost_box_destaque’);

function rpbr_add_inpost_box_destaque() {
add_meta_box(‘rpbr_inpost_box_destaque_page‘, ‘Destaque da página inicial‘, ‘rpbr_inpost_box_destaque‘, ‘page‘, ‘normal’, ‘high’);
add_meta_box(‘rpbr_inpost_box_destaque_post‘, ‘Destaque da página inicial‘, ‘rpbr_inpost_box_destaque‘, ‘post‘, ‘normal’, ‘high’);
}

O próximo código cuida da criação do conteúdo dos boxs, ou seja, cria os radios.

function rpbr_inpost_box_destaque() { ?>
<?php wp_nonce_field( plugin_basename(__FILE__), ‘rpbr_inpost_destaque_nonce’ ); ?>
<?php $_rpbr_destaque = rpbr_get_custom_field(‘_rpbr_destaque’); ?>
<br style=”clear: both;” />
<input type=”radio” name=“_rpbr_destaque” id=”rpbr_destaque” value=”ok_principal” <?php checked(‘ok_principal’, rpbr_get_custom_field(‘_rpbr_destaque’));?> />Destaque Principal &nbsp; &nbsp; &nbsp;
<input type=”radio” name=”_rpbr_destaque” id=”rpbr_destaque” value=”ok” <?php checked(‘ok’, rpbr_get_custom_field(‘_rpbr_destaque’));?> />Destaque Menor  &nbsp; &nbsp; &nbsp;
<input type=”radio” name=”_rpbr_destaque” id=”rpbr_destaque” value=”” <?php checked(”, rpbr_get_custom_field(‘_rpbr_destaque’));?> />Nenhum Destaque
<br style=”clear: both;” />
<?php
}

Para terminar, uma ação que salva o radio selecionado, sempre que a página/post for salvo.

add_action(‘save_post’, ‘rpbr_inpost_destaque_save‘, 1, 2);
function rpbr_inpost_destaque_save($post_id, $post) {

//    verify the nonce
if ( !isset($_POST[‘rpbr_inpost_destaque_nonce’]) || !wp_verify_nonce( $_POST[‘rpbr_inpost_destaque_nonce’], plugin_basename(__FILE__) ) )
return $post->ID;

//    don’t try to save the data under autosave, ajax, or future post.
if ( defined(‘DOING_AUTOSAVE’) && DOING_AUTOSAVE ) return;
if ( defined(‘DOING_AJAX’) && DOING_AJAX ) return;
if ( defined(‘DOING_CRON’) && DOING_CRON ) return;

//    is the user allowed to edit the post or page?
if ( (‘page’ == $_POST[‘post_type’] && !current_user_can(‘edit_page’, $post->ID)) || !current_user_can(‘edit_post’, $post->ID ) )
return $post->ID;

$rpbr_destaque_value = $_POST[‘_rpbr_destaque‘];

if ( $rpbr_destaque_value ) {
//    save/update
update_post_meta($post_id, ‘_rpbr_destaque‘, $rpbr_destaque_value);
} else {
//    delete if blank
delete_post_meta($post_id, ‘_rpbr_destaque‘);
}

}

FIM DA PRIMEIRA PARTE

PARTE 2

A parte 2 diz respeito a exibição das publicações marcadas como destaque.

O valor do radio selecionado é gravado como uma meta_key do post/page.

Desta forma é possível filtrar consultas.

O código abaixo pega a última publicação marcada como destaque principal:

$args = array(‘post_type’ => ‘any’,
‘showposts’ => 1,
‘orderby’=>’date’,
‘meta_key’=>’_rpbr_destaque‘,
‘meta_value’=>’ok_principal‘,
‘post_status’ => ‘publish’,
‘post__not_in’ => get_option( ‘sticky_posts’ ));
$recent = new WP_Query($args);

O código abaixo pega as últimas 6 publicações marcadas como destaque:

$args = array (
‘post_type’ => ‘any’,’
showposts’ => 6,
‘orderby’=>’date’,
‘meta_key’=>‘_rpbr_destaque’,
‘meta_value’=>’ok‘,
‘post_status’ => ‘publish’,
‘post__not_in’ => get_option( ‘sticky_posts’ ));
$recent = new WP_Query($args);

PASSO 3

No caso acima, o destaque principal pode aparecer no post associado a uma imagem. Neste caso, é interessante adicionar ao function.php do seu tema, o seguinte:

add_image_size( ‘destaque-principal’, 340, 230 );//destaque principal, home

Para finalizar, no corpo da página onde a chamada ao destaque principal será exibida, você coloca:

<div>
<?php if ( has_post_thumbnail() ) { ?> <a href=”<?php the_permalink(); ?>”><?php the_post_thumbnail( ‘destaque-principal’ ); ?></a> <?php } ?>
</div>

 

FUNÇÕES ÚTEIS

function rpbr_custom_field($field) {
echo rpbr_get_custom_field($field);
}
function rpbr_get_custom_field($field) {
global $post;

if ( null === $post ) return FALSE;

$custom_field = get_post_meta($post->ID, $field, true);

if ( $custom_field ) {
// sanitize and return the value of the custom field
return wp_kses_stripslashes( wp_kses_decode_entities( $custom_field ) );
}
else {
// return FALSE if custom field is empty
return FALSE;
}
}

Anúncios
No comments yet

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: