Wordpress REST API - Permitindo Visualização de Post Privados para Usuários do tipo Assinantes

A API REST do Wordpress trouxe novas possibilidades. No entanto, deparei com um problema para listar os Posts cadastrados como Privados para Usuários do tipo "Assinante".

Como deixar imagem redonda de um CANVAS com HTML 5

Como deixar imagem redonda de um CANVAS com HTML 5

Neste post mostro como deixar uma imagem dentro de um círculo com sombra usando canvas do HTML5 !

Como deixar uma imagem redonda e com sombra em CSS

Como deixar uma imagem redonda e com sombra em CSS

Fazendo uma imagem ficar dentro de um círculo em CSS

Resolvendo o problema No 'Access-Control-Allow-Origin' header is present on the requested resource.

Como permitir acesso a outra url - Cross Origin Resource Sharing (CORS)

Como instalar o Windows 10 IoT no Raspberry usando o Windows 7

Como instalar Windows 10 no Raspberry Pi 2

Lucene, Solr, Mysql e outras bruxarias

Uma breve explicação sobre fulltext search e onde usar.

Programando Python usando Eclipse com PyDev

Programando Python usando Eclipse com PyDev

Eclipse como EDE para programar em Python !

Como desenvolver em Python usando o Netbeans 7.4

Como desenvolver em Python usando o Netbeans 7.4

Programando em python usando o netbeans como IDE

Criatividade é saber esconder suas fontes

Criatividade, nada mais do que do que pegar idéias existentes, junta-las, e modifica-las.

Tudo é um Remix (Legendado)

Tudo é um Remix (Legendado)

O que é criatividade? Copiar, transformar e combinar.

Configurando um Servidor com Nginx e Django - Juntando Tudo - Parte Final

Integrar nginx e django. Ultima parte.

Configurando um Servidor com Nginx e Django - Parte 2

Configurando um Servidor com Nginx e Django - Parte 2

Instalando o Django

Como User Experience pode melhorar seu produto?

Como User Experience pode melhorar seu produto?

User Experience (Design Centrado no Usuário, ou Experiência do Usuário) é um termo usado quando se desenvolve produtos, sistemas ou serviços focado em pessoas, envolvendo fatores humanos no projeto.

Configurando um Servidor com Nginx e Django

Configurando um Servidor com Nginx e Django

Este post é o inicio de uma série de como configurar um servidor usando o nginx como proxy reverso e o django como servidor de aplicação.

O FACEBOOK VAI ACABAR… E VOCÊ?

O FACEBOOK VAI ACABAR… E VOCÊ?

Recentemente, uma onda de notícias surgiu na internet: O fim do Facebook até 2020.

E QUANDO DOIS CHATBOTS SÃO COLOCADOS PARA CONVERSAR?

Chatbot são programas de computadores que tentam manter o dialogo com pessoas reais utilizando linguagem natural. É um dos desafios da Inteligencia Artificial.

REDIS – UM BANCO DE DADOS NÃO RELACIONAL.

REDIS – UM BANCO DE DADOS NÃO RELACIONAL.

NoSQL significa ”Not only SQL” (Não somente SQL), e é uma alternativa aos tradicionais bancos de dados relacionais, mas que não oferecem as caracterizadas ACID (Atomicidade, Consistência, Isolamento e Durabilidade).






Wordpress REST API - Permitindo Visualização de Post Privados para Usuários do tipo Assinantes

___

A API REST do Wordpress trouxe novas possibilidades. No entanto, deparei com um problema para listar os Posts cadastrados como Privados para Usuários do tipo "Assinante".


O primeiro passo é instalar o Plugin "User Role Editor", como ele é muito mais fácil gerenciar as permissões para os usuários. 

Após a instalação do plugin,  o próximo passo é ir na tela de administração do Wordpress em: Usuários > User Role Editor.
Selecione Assinante (Subscriber) posteriormente, selecione o checkbox de "read_private_posts".

Neste passo já é possível visualizar posts privados. Para testar basta efetuar login no wordpress como um usuário assinante. 

No entanto, isso ainda não funciona via API REST.

Para isso você precisará editar um arquivo no código PHP.

No diretório onde você instalou o wordpress, vá em:
/wp-includes/rest-api/endpoints

abra o arquivo class-wp-rest-posts-controller.php 

No final deste arquivo existe um método chamado sanitize_post_statuses(), adicione as linhas destacadas abaixo.


foreach ( $statuses as $status ) 
{
    if ( $status === $default_status ) {
            continue;
    }

    $post_type_obj = get_post_type_object( $this->post_type );

    // --- inicio modificao ---
    if (current_user_can( $post_type_obj->cap->read_private_posts ) ) {
            continue;
    }
   // --- fim modificao ---


    if ( current_user_can( $post_type_obj->cap->edit_posts ) ) {
            $result = rest_validate_request_arg( $status, $request, $parameter );
            if ( is_wp_error( $result ) ) {
                    return $result;
            }
    } else {
            return new WP_Error( 'rest_forbidden_status', __( 'Status is forbidden.' ), array( 'status' => rest_authorization_required_code() ) );
    }
}


Basta salvar e pronto! :D