PDF download - use funções do wordpress

4

Estou criando um plug-in onde o usuário pode baixar arquivos. Atualmente eu exibo links de download como:

<a href="plugin/directory/some/path/download.php?file_to_download_id=1">Some Download</a>

Problema:

Eu preciso usar a funcionalidade principal do wordpress como is_user_logged_in() ou get_current_user_id() no download.php. Como posso usar essas funções neste arquivo php?

(PS: Eu não quero incluir o wp-load no download.php)

    
por QuickSort 14.11.2017 / 07:57

3 respostas

1

Você deve criar uma função em seu plug-in onde você ouve um URL específico ou assiste a parâmetros específicos. Por exemplo, para gerar o link de download:

<?php
    $nonce = wp_create_nonce( 'download-' . $filename );
    echo '<a href="/?_wp_nonce="' . $nonce . '&download=' . $filename . '">Some Download</a>';
?>

E para baixar o arquivo:

if ( ! empty( $_GET['_wp_nonce'] ) && ! empty( $_GET['download'] ) && wp_verify_nonce( $_GET['_wp_nonce'], 'download-' . $_GET['download'] ) ) {
    /*
     * Check if file exists and then output the right headers and the content of the file
     */

    exit;
}
    
por Robin 14.11.2017 / 08:53
0

O WordPress fornece alguns cookies que rastreiam se o usuário está logado e qual é o seu ID de usuário. Eles estão descritos em esta página no Codex :

  

Após o login, o wordpress define o cookie wordpress_logged_in_ [hash], que indica quando você está logado e quem você é, para a maioria dos usos de interface.

     

O WordPress também define alguns cookies wp-settings- {time} - [UID]. O número no final é seu ID de usuário individual da tabela do banco de dados de usuários. Isso é usado para personalizar sua visualização da interface administrativa e, possivelmente, também da interface do site principal.

Se você absolutamente deve evitar carregar wp-load.php no seu arquivo download.php , você pode verificar a existência desses cookies em seu arquivo usando o $_COOKIE global e analise o cookie wp-settings-{time}-[UID] para obter o ID do usuário (" UID ").

Na minha opinião sincera, acho que isso é um desperdício comparado a apenas incluir as duas linhas a seguir na parte superior do arquivo download.php :

define( 'WP_USE_THEMES', false );
require( './wp-load.php' ); 

Isso não carregará nenhum arquivo de tema ou função de modelo, mas lhe dará acesso instantâneo às principais funções do WordPress que você está procurando. Gostaria de encorajá-lo a experimentar das duas maneiras (se você estiver inclinado) e ver a diferença de desempenho ... não será muito, especialmente em um servidor rodando PHP7.

    
por brianjohnhanna 15.11.2017 / 17:00
-3

Como você mencionou, o arquivo está localizado na pasta de plugins e você não precisa adicionar o arquivo wp-load.php aqui caso não consiga usar as funções padrão do WordPress. Você precisa incluir o arquivo do arquivo PHP principal do seu plugin.

Espero que isso resolva sua consulta.

    
por Pratik bhatt 14.11.2017 / 08:11