É possível alterar um status de postagem existente de “pendente” para “publicar” via e-mail?

Estou construindo um site que usa um plugin de formulário personalizado e o plugin me oferece a capacidade de criar postagens (pendentes ou publicadas) usando os dados do formulário. Após a apresentação do formulário, eu quero uma lista específica de pessoas para receber uma notificação por e-mail da publicação pendente para revisão, que eles podem aprovar (atualizar status de publicação para ‘publicar’) em um clique. Alguma ideia?

Atualmente, minha solução alternativa é encaminhar o e-mail para um endereço de e-mail que estou usando para publicação, mas é uma solução desajeitada.

Solutions Collecting From Web of "É possível alterar um status de postagem existente de “pendente” para “publicar” via e-mail?"

Passo 1 – Registrar uma consulta personalizada Var

Ao adicionar uma consulta personalizada var, você faz WP conscientes disso, para que ele possa ser usado em pedidos.

 function wpse_add_query_vars( $vars ) { $vars[] = 'wpse_set_to_publish'; return $vars; } add_filter( 'query_vars', 'wpse_add_query_vars' ); 

Passo 2 – Sniff The Request

Agora entramos em parse_request para procurar a nossa nova consulta personalizada var. Aqui é onde você processa e pode ser tão complicado ou simples quanto você deseja. Por exemplo, para segurança, você pode verificar a existência de um token que é armazenado como postmeta ou transiente. Mas é o nível mais básico:

 function wpse_sniff_request( $query ) { if ( ! is_admin() && isset( $query->query_vars['wpse_set_to_publish'] ) ) { $post_vars = array( 'ID' => $query->query_vars['wpse_set_to_publish'], 'post_status' => 'publish' ); wp_update_post( $post_vars ); } } add_action( 'parse_request', 'wpse_sniff_request' ); 

Nota: você também pode ignorar o primeiro passo e fazer esta etapa em um gancho de init e, em vez disso, interceptar $_GET['wpse_set_to_publish'] mas não é exatamente o “modo WordPress”

Passo 3 – Forneça um link de aprovação no e-mail

Finalmente, supondo que você esteja gerando o e-mail que sai, você pode include um link com algo dessas:

echo add_query_arg( array( 'wpse_set_to_publish' => $post_id ), site_url() );

Nota: Você provavelmente receberá o $post_id do valor de retorno de wp_insert_post() .

Então, uma vez que a pessoa clica nesse link, deve levá-los para http://yourwebsite.com/?wpse_set_to_publish=123 e isso atualizará a postagem com a ID de 123 para ter um status de publicação.

Infelizmente, não tenho tempo para testar completamente isso agora, mas isso deve levá-lo na direção certa. Novamente, esta é a implementação mais básica e você sempre deve considerar a segurança, as permissions, etc. Embora isso também possa ser mais conveniente, teoricamente será muito mais seguro se você apenas fornecer um link para get_edit_post_link() que forçaria o usuário para fazer login (se eles não estivessem), então eles poderiam se mover para a direita publicar do administrador.