Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rockman 2

Limitar Criação de Posts e Páginas no Wordpress.

Recommended Posts

Olá pessoal!

 

Estou tendo um probleminha aqui pra resolver uma questão!

 

Acontece que eu tenho que criar uma função pra adiciona-lo no functions.php pra limitar a criação postagens e páginas onde digamos se o usuário comum ou o administrador por exemplo criar 10 paginas no máximo receberá um aviso que ele excedeu o limite de criação de paginas ou ao clicar no botão de novo post ou nova pagina ele é levado automaticamente para o painel de controle impedindo a criação de novas paginas e posts e mantendo o mesmo sobre a restrição criada na função.

 

A função abaixo até resolve a questão de postagens mas:

 

1-Não limita o administrador.

2-Não limita a criação de paginas somente posts.

add_action("load-post-new.php","limit_user_by_post_count");
function limit_user_by_post_count(){
    $user = get_current_user_id();
    if (!current_user_can( 'manage_options')) { 
        //not an admin - so impose the limit
        $user_post_count = count_user_posts($user);
        if($user_post_count>=2)
            header("Location: /wp-admin/edit.php");
    }
}

Encontrei até um plugin que faz algo nesse sentido por exemplo limitar a criação de posts mas eu prefiro adicionar o código diretamente no functions.php só que não sei nem como começar essa função, alguém já passou por isso e pode de ajudar?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim.

global $wpdb;
$user = wp_get_current_user();
$where = get_posts_by_author_sql( 'page', true, $user->ID );
$count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" );

if ( $count >= 2 ) {

    // echo your text snippet

} else {

    // echo your form

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Tenta assim.

global $wpdb;
$user = wp_get_current_user();
$where = get_posts_by_author_sql( 'page', true, $user->ID );
$count = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts $where" );

if ( $count >= 2 ) {

    // echo your text snippet

} else {

    // echo your form

}

 

Marlon muito obrigado cara me salvou resolveu em cheio a questão da limitação para criação de "paginas" mesmo para o administrador hehehehe (tadinho...) porem só não marquei como resolvido por que estou fuçando no código que você gentilmente cedeu pra ver se consigo fazer para limitar tanto criação de "paginas" quanto "posts"... com contagem diferentes para ambos por exemplo para paginas $count >= 2 e para posts $count >= 4.

 

Acabei de testar e ele está limitando ambos paginas e posts.

 

Uma coisa já notei se não estiver errado: É feita um consulta no banco de dados através da variável global que também recebe as outras variáveis que no final recebe o numero de paginas criadas com isso na condicional IF é onde nos limitamos e dizemos o que se faz dependendo da limitação!

 

Estou tentando fazer teu código funcional tanto para paginas quanto para posts com contagens diferentes mas se você tiver a solução eu vou ficar mais agradecido ainda pois ainda não tive sucesso aqui com as duas questões resolvidas.

 

Um abraço cara já marquei a reputação pra você obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tu pode fazer 2 consultas. Uma para posts e uma para pages. E valida a contagem de acordo com a query.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tu pode fazer 2 consultas. Uma para posts e uma para pages. E valida a contagem de acordo com a query.

 

Fala Marlon beleza!

Então depois de varias maluquices que fiz aqui achei interessante fazer como no código abaixo:

if (is_admin('edit.php.php?post_type=page') ) {
$num_pages = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'page'");
    if($num_pages >= 10){
	echo '<style type="text/css">
                 .add-new-h2 { display: none !important; }
              </style>';
	}
};

if (is_admin('edit.php') ) {
$num_posts = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post'");
    if($num_posts >= 1){
	echo '<style type="text/css">
                .add-new-h2 { display: none !important; }
              </style>';
	}
};

O Problema agora é que ambos os códigos funcionam bem sozinhos um do outro mas quando eles estão juntos no "functions" acontece o seguinte, no exemplo acima se o usuário atingir 10 paginas criadas o botão de nova pagina irá ser ocultado (o botão da tela onde se lista todas as paginas criadas) automaticamente o problema é tanto para posts quanto páginas, se um atingir a cota e outro não o que atingir a cota primeiro irá desligar o botão tanto dele quanto do outro ou seja posts e paginas com o botão oculto!!!!

 

Já tentei um monte de opções para ambos os códigos trabalharem um independente do outro (case, switch, while, do…while, até for .... etc) já que um está interferindo no outro e me dando dores de cabeça rsrsrsr...

 

já os botões de nova pagina da barra lateral e superior do painel são facilmente desabilitáveis.via functions com os diversos Hacks para usar no painel de administração do Wordpress.

 

Bom vou continuar a tentar aqui até resolver a questão se tiver sucesso posto aqui mas se você ou mais algum amigo aqui do fórum identificar onde estou errando (ainda não achei rsrsr) aceito uma ajuda.

 

Ainda assim Obrigado mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom pessoal depois da ajuda do marlon e algumas horas (ou dias!!!) de pesquisas e tentativas e erros consegui resolver o problema e encontrar uma solução que funcione perfeitamente para ocultar o botão de nova post/página na tela que lista todos os posts/páginas criadas.

 

Código:

/*Limitar criação de páginas em listagem de páginas*/

if (is_admin('post_type==page') ) {
$num_pages = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'page'");
   if($num_pages >= 1){
   function hide_add_new_button_edit_page() {
      if('page' == get_post_type())
         echo '<style type="text/css">
                  .add-new-h2{display:none !important;}
               </style>';
         }
    add_action('admin_head', 'hide_add_new_button_edit_page');
   }
}

/*Limitar criação de postagens em listagem de posts*/

if (is_admin('post_type==post') ) {
$num_posts = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post'");
   if($num_posts >= 1){
   function hide_add_new_button_edit_post() {
      if('post' == get_post_type())
         echo '<style type="text/css">
                  .add-new-h2{display:none !important;}
               </style>';
         }
    add_action('admin_head', 'hide_add_new_button_edit_post');
   }
}

Explicação:

Para limitar a quantidades de páginas, basta na linha 5 colocar o numero desejado de páginas que o usuário poderá criar quando este alcançar o limite o botão (Adicionar Novo é Desligado).

 

Para posts é a mesma coisa na linha 20.

 

A parte boa é que agora uma condição não afeta a outra ou seja se o usuário atingir a cota de paginas criadas o botão de nova página da tela de listagem irá desaparecer e só voltará se o usuário deletar uma pagina para ter a opção de criar outra novamente através de click no botão.

 

Para os outros links de nova pagina / posts tanto da barra lateral esquerda e barra do topo do painel (Dashboard) basta usar um dos diversos hacks (snippet) para o wordpress no functions.php ai fica tudo certo.

 

Bom pessoal essa foi a maneira de resolver a questão que eu mesmo criei aqui para resolver um problema em um trabalho acredito que isso poderá ajudar outras pessoas ainda assim fico agradecido pela força do marlon por ter me dado uma ideia em suas respostas.

 

Um abraço a todos!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.