Cum accesez direct un fișier PHP localizat în folderul temei mele?

16 iul. 2012, 19:27:22
Vizualizări: 23K
Voturi: 7

Am un fișier în folderul temei mele numit "test.php".

Dacă accesez www.mysite.com/wp-content/themes/my-theme/folder/test.php, tema se încarcă ceea ce presupun că este o eroare 404 gestionată de WordPress. Dacă schimb numele fișierului în test.html, îl pot accesa fără probleme.

Am încercat să adaug următorul cod în fișierul meu functions.php (pentru a adăuga o regulă de rescriere):

add_rewrite_rule( 'test.php$', $relative_directory . '/folder/test.php [L]', 'top' );

dar chiar și având regula htaccess nu părea să facă nimic.

Aveți vreo idee ce ar putea cauza această problemă?

php
6
Comentarii

Nu ar trebui să încarci fișiere PHP direct în primul rând. Ce anume trebuie să facă fișierul? Există probabil o metodă mai bună de a gestiona situația.

EAMann EAMann
16 iul. 2012 20:39:00

Am un fișier PHP pe care îl folosesc pentru a prelua niște date din baza mea de date și a le servi prin ajax, dar acum, dacă accesez acel fișier, nu se întâmplă nimic decât să primesc o eroare 404 de la WordPress.

Gazillion Gazillion
16 iul. 2012 20:52:40

WordPress poate prelua datele pentru tine și are suport integrat pentru AJAX. Folosirea WordPress pentru accesul la date îți oferă beneficiile suplimentare ale cache-ului, sanitizării, escapării și a tot ce poți face cu $wpdb.

EAMann EAMann
16 iul. 2012 22:09:17

Cum îți limitezi apelurile ajax la folderul temei? Nu înțeleg de ce trebuie scoase din el când orice altceva poate fi definit intern.

Gazillion Gazillion
17 iul. 2012 18:48:05

Îți înregistrezi apelurile ajax în functions.php folosind un filtru. Apoi faci apelul către admin-ajax.php și WordPress îl transmite mai departe. Există un exemplu bazat pe plugin în Codex, dar funcționează exact la fel pentru teme.

EAMann EAMann
17 iul. 2012 19:29:25

Scuze, am citit greșit intrarea din Codex. Admin-ajax este apelat atunci când există o cerere ajax.

Gazillion Gazillion
17 iul. 2012 20:43:18
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 3
0

Presupunând că utilizați URL-ul corect pentru a accesa fișierul, totul este gestionat la nivelul serverului web, iar WP nu rulează deloc, astfel încât soluțiile bazate pe WP, cum ar fi modificarea regulilor de rescriere, nu vă vor ajuta.

Cel mai probabil, există o configurație a serverului web care trimite eroarea 404 pentru orice acces la un fișier php din acel folder (ar trebui să încercați dacă și alte fișiere php de acolo returnează 404). S-ar putea să puteți repara configurația serverului web pentru a se potrivi nevoilor dumneavoastră, dar, așa cum a comentat @EAMann, nu este metoda corectă de a scrie ajax pentru WP.

30 nov. 2012 08:15:04
1

Folosești reguli RewriteRule în fișierul tău .htaccess? Ar trebui să poți accesa fișierele PHP direct în acest caz. Primele două linii cu un RewriteCond asigură că rescrierea către index.php al WordPress nu se întâmplă dacă fișierul sau directorul există.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /your-wp-site/index.php [L]
16 iul. 2012 20:38:52
Comentarii

Am scris acea linie la sfârșitul fișierului .htaccess și a stricat restul site-ului. Nu pot spune că înțeleg cu adevărat de ce, sunt puțin perplex :-/

Gazillion Gazillion
16 iul. 2012 20:51:51
0

Trebuie să creezi un șablon personalizat pentru WordPress pentru acel fișier, astfel încât să se poată afișa corect. Altfel, este un fișier independent care încearcă să se execute fără permisiune sau hook-uri necesare. În acest caz, ar trebui să adaugi codul PHP direct prin WordPress și să creezi o Pagină.

De asemenea, poți deschide "page.php" din directorul temei tale selectate, să-l salvezi ca "test.php" în același director și să lipesti întregul conținut al codului PHP din "test.php" în interiorul diviziunii din noul tău fișier "test.php".

Ceva de genul acesta:

<main id="main" class="site-main" role="main">
<?php
//Codul tău PHP aici!
?>
</main>

Aceasta arată doar diviziunea de bază de care ai nevoie. Dacă dorești să afișezi și restul conținutului site-ului împreună cu "test.php", va trebui să creezi un fișier "content-test.php" în directorul "templates-parts" din tema ta.

La fel ca înainte, dar de data aceasta deschizi "content-page.php" și îl salvezi ca "content-test.php" în directorul "templates-parts", apoi lipești codul din "test.php" în interiorul diviziunii unde dorești să apară.

Înapoi în noul fișier "test.php", înlocuiește următoarea linie:

get_template_part( 'template-parts/content', 'page' );

cu:

get_template_part( 'template-parts/content', 'test' );

Dezavantajul acestei metode este că, atunci când WordPress se actualizează, este posibil ca acest fișier să nu rămână intact, spre deosebire de prima opțiune care încarcă fișierul PHP ca post sau pagină.

Sper că te ajută!

27 feb. 2019 00:10:54