2017-07-28 57 views
5

Czy istnieje sposób dołączania oprogramowania pośredniego do określonej trasy w Wordpress lub tylko w PHP? Chciałbym uruchomić funkcję oprogramowania pośredniego przed zezwoleniem na dostęp do folderu uploads, aby sprawdzić, czy użytkownik ma dostęp do pliku, zanim pozwoli mu go pobrać.Dołącz oprogramowanie pośrednie do konkretnej istniejącej trasy

Pochodzę z tłem w node.js/wyrazić tak, czy to pomaga chciałbym zrobić coś takiego:

app.use('/wp-content/uploads', function(req, res, next) { 
    // do stuff with req and call next to continue, 
    // or use res to end the request early. 
}); 
+0

Nie można dodać żadnego oprogramowania pośredniego, ponieważ Wordpress nie ma żadnej abstrakcji żądania/odpowiedzi. Jedyną opcją jest napisanie niestandardowej wtyczki, która zareagowałaby na dane działanie. Możesz dowiedzieć się więcej o działaniach wp z oficjalnych dokumentów. –

Odpowiedz

0

Z tego, co mogę o swoim przypadku użycia z opisem, można rozwiązać problemu tylko przy użyciu jednego z wielu wordPress wtyczki już dostępnych, na przykład można użyć „menedżer downnload” obsłużyć przesyłanie i pobieranie treści: https://wordpress.org/support/plugin/download-manager lub użyć coś jak https://wordpress.org/plugins/easy-digital-downloads/

można znaleźć więcej wtyczek tutaj https://wordpress.org/plugins/

Jeśli naprawdę chcesz napisać coś niestandardowego, można dodać RewriteRule Użyj do przesyłania wszystkich żądań dla przesyłanych foldera poprzez „protect.php” skryptu, dodając coś takiego w pliku .htaccess

RewriteCond %{REQUEST_FILENAME} -s 
RewriteRule ^wp-content/uploads/(.*)$ protect.php?filename=$1 [L,QSA] 

W skrypcie protect.php można zaimplementować ci niestandardowej logiki, aby zezwolić/zabronić dostępu do specyficznego „filename”

korzystania z funkcji WP wewnątrz ciebie zwyczaj protect.php plik powinien zawierać wp-load .php, mniej więcej tak:

require_once(rtrim($_SERVER['DOCUMENT_ROOT'], '/') . '/wp-load.php'); 
+0

Dzięki za odpowiedź, nie jestem pewien, dlaczego tak długo zajęło im znalezienie odpowiedzi. Spojrzałem na inne wtyczki, ale dla moich potrzeb naprawdę potrzebuję czegoś niestandardowego. Również używam Nginx, a nie Apache, więc mógłbyś pokazać mi przykład w Nginx? Czy byłbym też w stanie uzyskać dostęp do biblioteki Wordpress i aktualnie zalogowanego użytkownika z tego drugiego skryptu? – chrispytoes

+0

Nigdy nie użyłem Nginixa, ale możesz przeczytać, jak konwertować reguły apache do reguł nginix tutaj: https://www.nginx.com/blog/converting-apache-to-nginx-rewrite-rules/ –

2

Istnieje wiele wtyczek do wtyczki WordPress, które ograniczają dostęp do treści lub plików do pobrania, głównie w oparciu o logikę, która została zarejestrowana i jakie uprawnienia mają.

podstawowa logika nich jest tak:

// Redirect guests 
function guest_redirect() { 
    $guest_routes = array(
     'member-login', 
     'member-account', 
     'member-register', 
     'member-password-lost', 
     'member-password-reset' 
    ); 
    // Force login or registration 
    if (!is_user_logged_in() && !is_page($guest_routes)) { 
     wp_redirect('member-login'); 
     exit; 
    } 
} 
add_action('template_redirect', 'guest_redirect'); 

Ponadto, WordPress ma REST API (official doc here for your need). Jednak korzystanie z własnej niestandardowej funkcji witryny produkcyjnej przy użyciu REST API bez odpowiedniego testowania może być ryzykowne i skomplikowane w użyciu.