Skip to content

Instantly share code, notes, and snippets.

@bordoni
Last active December 29, 2015 03:49
Show Gist options
  • Save bordoni/7609965 to your computer and use it in GitHub Desktop.
Save bordoni/7609965 to your computer and use it in GitHub Desktop.
Exemplos do WordCamp SP 2013 Slides em: http://bit.ly/wcsp2013_bordoni
<?php
// Exemplo 1
// Filtra a edição de posts da categoria 6 permitida apenas para os usuários 5 e 9
add_filter( 'user_has_cap', function( $allcaps, $caps, $args, $user ){
if ( in_array($args[0], array( 'edit_post' ) ) )
return $allcaps;
// Para `edit_post` será passado um argumento com o ID do post que desejamos verificar
if ( !isset( $args[2] ) || $args[2] == 0 || !is_numeric($args[2]) )
return $allcaps;
if ( !isset($allcaps['edit_post']) || !$allcaps['edit_post'] )
return $allcaps;
$cats = wp_get_object_terms( $args[3], 'category', array('fields' => 'ids') );
if ( !in_array(6, $cats) )
return $allcaps;
if (in_array($user->ID, array(5, 9) )){
$allcaps['edit_post'] = true;
} else {
unset( $allcaps['edit_post'] );
}
return $allcaps;
}, 10, 4 );
<?php
// Exemplo 2
// Caso seja dezembro liberar o upload de qualquer tipo de arquivo
add_filter('role_has_cap', function($rolecaps, $cap, $role_name){
if ( !in_array( $role_name, array('contributor', 'author') ) || !is_admin() )
return $rolecaps;
$now = new DateTime();
if($now->format("n")==11)
$rolecaps['unfiltered_upload'] = true;
return $rolecaps;
}, 10, 3);
<?php
// Exemplo 3 - Retirado do Core do WordPress
// Editar um comentário no WordPress
// Dentro da função `map_meta_cap`, que pode ser modificado em um filtro de mesmo nome `map_meta_cap`
$comment = get_comment( $comment_ID );
if ( empty( $comment ) )
break;
$post = get_post( $comment->comment_post_ID );
$caps = map_meta_cap( 'edit_post', $user_id, $post->ID );
<?php
// Exemplo 4 - Retirado de um plugin
// Exemplo de como fazer a filtragem de permissões, que foi depreciado já tem
// algum tempo mas muitos plugins anda utilizam
// Retirado de: http://wordpress.org/plugins/tantan-s3-cloudfront/
// Favor utilizar: https://github.com/bradt/wp-tantan-s3
add_options_page('Amazon S3', 'Amazon S3', 10, __FILE__, array(&$this, 'admin'));
<?php
// Exemplo 5
// Garantindo que qualquer usuário pode fazer upload quando estiver em uma
// derminada página do WordPress e no front-end
add_filter('user_has_cap', function($allcaps, $caps, $args, $user){
if (!defined('DOING_AJAX'))
return $allcaps;
global $wp_query;
if ( is_admin() || in_array($args[0], array( 'upload_files' ) ) )
return $allcaps;
if (!isset($wp_query) || !is_a($wp_query, "WP_Query") || !$wp_query->is_single(25))
return $allcaps;
$allcaps['upload_files'] = true;
return $allcaps;
}, 10, 4);
<?php
// Exemplo 6 - Retirdo do Core do WordPress
// Permite ao usuário a editar o próprio pefil
if ( $user_id == get_current_user_id() )
break; // Não requer nenhuma permissão
<?php
// Exemplo 7 - Como é tratado no Core do WordPress
// Troca a permissão necessária para ativar um plugin caso seja um MultiSite
$required[] = 'activate_plugins';
if ( is_multisite() )
$required[] = 'manage_network_plugins';
<?php
// Exemplo 8 - Como é tratado no Core do WordPress
// Não permite que nenhum usuário veja a estrutura de links na administração
// após a versão em que a funcionalidade deixou de existir
if ( get_option('link_manager_enabled') )
$required[] = 'manage_links';
else
$required[] = 'do_not_allow';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment