¿Cómo accedo directamente a un archivo PHP ubicado en mi carpeta de temas?

16 jul 2012, 19:27:22
Vistas: 23K
Votos: 7

Tengo un archivo en la carpeta de mi tema llamado "test.php".

Si voy a www.mistitio.com/wp-content/themes/mi-tema/carpeta/test.php el tema se carga, lo que asumo es un error 404 manejado por WP. Si cambio el nombre del archivo a test.html puedo acceder sin problemas.

Intenté agregar el siguiente código a mi archivo functions.php (para agregar una regla de reescritura):

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

pero incluso teniendo la regla en htaccess no pareció hacer nada.

¿Alguna idea de qué podría estar causando esto?

php
6
Comentarios

No deberías cargar archivos php directamente en primer lugar. ¿Qué necesita hacer exactamente el archivo? Probablemente haya una mejor manera de manejarlo.

EAMann EAMann
16 jul 2012 20:39:00

Tengo un archivo PHP que uso para obtener algunos datos de mi base de datos y servirlos vía ajax, pero actualmente al acceder a ese archivo no hace nada más que mostrar un error 404 de WordPress.

Gazillion Gazillion
16 jul 2012 20:52:40

WordPress puede obtener los datos por ti y tiene soporte AJAX incorporado. Usar WP para el acceso a datos te da el beneficio adicional de caché, saneamiento, escape y todo lo que puedes hacer con $wpdb.

EAMann EAMann
16 jul 2012 22:09:17

¿Cómo limitas tus llamadas AJAX a la carpeta de tu tema? No entiendo por qué tiene que sacarse de allí cuando todo lo demás puede definirse internamente.

Gazillion Gazillion
17 jul 2012 18:48:05

Registras tus llamadas AJAX en functions.php usando un filtro. Luego haces la llamada a admin-ajax.php y WordPress la pasa. Hay un ejemplo basado en plugins en el Codex pero funciona exactamente igual para temas.

EAMann EAMann
17 jul 2012 19:29:25

Disculpa, estaba leyendo mal la entrada del codex. El admin-ajax se llama cuando hay una solicitud AJAX.

Gazillion Gazillion
17 jul 2012 20:43:18
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 3
0

Asumiendo que uses la URL correcta para acceder al archivo, todo se está manejando a nivel del servidor web y WordPress no se ejecuta en absoluto, por lo que soluciones basadas en WP como cambiar reglas de reescritura no te ayudarán.

Es muy probable que exista alguna configuración del servidor web que envía el error 404 por cualquier acceso a un archivo php en esa carpeta (deberías probar si otros archivos php allí también devuelven 404). Podrías intentar ajustar la configuración del servidor web para que se adapte a tus necesidades, pero como comentó @EAMann, esta no es la forma correcta de escribir ajax para WP.

30 nov 2012 08:15:04
1

¿Estás usando reglas de RewriteRule en tu archivo .htaccess? Entonces deberías poder acceder directamente a los archivos PHP. Las primeras dos líneas con un RewriteCond aseguran que la reescritura hacia el index.php de WordPress no ocurra si el archivo o directorio existe.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /tu-sitio-wp/index.php [L]
16 jul 2012 20:38:52
Comentarios

Escribí esa línea al final del archivo .htaccess y rompió el resto del sitio. No puedo decir que realmente entienda por qué, estoy un poco perplejo :-/

Gazillion Gazillion
16 jul 2012 20:51:51
0

Tienes que crear una plantilla personalizada de WP para que ese archivo se pueda mostrar correctamente. De lo contrario, es un archivo independiente que intenta ejecutarse sin permisos o hooks. En este caso, necesitarías agregar el código PHP del archivo directamente a través de WP y crear una Página.

También puedes abrir el archivo "page.php" en el directorio de tu tema seleccionado, guardarlo como "test.php" en el mismo directorio y pegar todo el contenido de tu código PHP de "test.php" dentro de la división principal de tu nuevo archivo "test.php".

Algo como esto:

<main id="main" class="site-main" role="main">
<?php
//¡Tu código PHP aquí!
?>
</main>

Esto solo muestra la división básica que necesitarás. Si necesitas que se muestre todo el contenido del sitio junto con test.php, deberás crear un archivo content-test.php en el directorio "template-parts" de tu tema.

De nuevo, es lo mismo excepto que esta vez abrirás "content-page.php" y lo guardarás como "content-test.php" en el directorio "template-parts", luego pegarás el código de test.php dentro de la sección donde quieras que aparezca.

Regresa al nuevo "test.php" y reemplaza la siguiente línea:

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

con:

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

La desventaja de este método es que cuando WP se actualice, puede o no dejar ese archivo intacto, a diferencia de la primera opción que llama al archivo php como una publicación o página.

¡Espero que esto ayude!

27 feb 2019 00:10:54