php - permalink - .htaccess reescribir con el complemento de WordPress
permalinks wordpress (2)
Estoy trabajando en la creación de un complemento de WordPress para una red multisitio de WordPress personalizada y tengo algunos archivos que usan variables URL para cargar información de una segunda base de datos (no la base de datos de WordPress).
En la versión desarrollada fuera de WordPress, navegando a http://website.com/NAME-HERE
verificará si es un nombre de usuario en mi base de datos, si no verifico si es un grupo en mi base de datos y cargaré archivo que corresponde a si es un nombre de usuario o grupo.
Ahora estoy totalmente perdido acerca de la implementación de esto en WordPress Multisite. Por lo que sé, los complementos no pueden hacer que .htaccess
reescriba? ¿Cómo lo hago funcionar en todos los sitios de la red?
Si no, ¿cuál es la mejor manera de lograr esto?
¿Debo colocar mis reescrituras de pretty.php
& .htaccess
en mi directorio raíz y señalar las páginas a los archivos ubicados en el complemento? Si es así, ¿cómo funciona esto con múltiples temas?
Mi único otro pensamiento hasta ahora es que esto se puede lograr con algo como RewriteMap
.
En este punto, pensé que mi mejor apuesta era llegar a la comunidad de StackOverflow para obtener ayuda o dirección.
.htaccess
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www/.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(/w.+)$ ./pretty.php?pretty=$1 [QSA]
ErrorDocument 404 /404.php
bonito.php
// First check if passed pretty parameter is a username.
if(checkIfUserByUsername($_GET[''pretty'']))
{
$_GET[''username''] = $_GET[''pretty''];
include("USERNAME.php");
// If not a username, check to see if it''s an event.
}else if(checkIfStreamByPretty($_GET[''pretty''])){
$_GET[''id''] = getStreamIdFromPretty($_GET[''pretty'']);
include("GROUP.php");
}else{
// If it''s none, redirect to the 404 page.
include("404.php");
}
Quiero proporcionar más contexto de lo que estoy buscando lograr, estoy creando archivos de Plantilla de página, uno de los cuales es para perfiles y otro para grupos como ha visto anteriormente .htaccess y pretty.php Estoy en la parte superior del archivo de plantilla de la página a continuación, utilizando
$user_id = getIdFromUsername($_GET[''username'']);
$_GET[''user_id''] = $user_id;
Estoy realmente luchando para descubrir cómo hacer esto de una manera que le permita trabajar con múltiples temas. Sólo estoy buscando cualquier tipo de solución en este punto.
Además de la respuesta de John Gile, desinfecte los parámetros Get. Puedes leer acerca de algunas opciones de desinfección here
En el contexto de tus preguntas, algo como $username = sanitize_text_field( $_GET[''pretty''] );
Debería ser suficiente. Pero, por favor, eche un vistazo a lo que necesita ser desinfectado.
Con respecto a su pregunta original, el primer enfoque que John sugirió parece ser el mejor.
Considere el momento en que dos solicitudes separadas están solicitando la misma URL con el mismo nombre de usuario. Dado que la lectura / escritura de archivos es una secuencia de bloqueo, una de las solicitudes debe esperar a que se cierre la secuencia y el sitio web no se procesará hasta que esto suceda.
Si omite esto con un flujo adicional o cualquiera que sea su riesgo de terminar con entradas duplicadas o, lo que es peor, con un archivo dañado que podría provocar errores en el servidor.
Editar
No estoy muy seguro de lo que está intentando lograr con la inclusión de include(''USERNAME.php'')
¿Está creando un archivo php dedicado para cada usuario que se registre en su "red de sitios múltiples"? Si ese es el caso, creo que tomaste decisiones equivocadas al planear esto.
Generalmente, cuando desea compartir, controlar o alterar el comportamiento, dependiendo de los recursos externos, obtendría los datos en el formato de datos JSON .
Ahora, si estuviera en su lugar, crearía un servicio web REST que devuelva el JSON en función del nombre de usuario, obtenga el parámetro y controle la salida en función de los datos que ingrese.
Crear una api es bastante complejo y, dependiendo de sus necesidades, iría con la herramienta que mejor se adapte a estas. Personalmente, disfruté trabajando con la apigility para cosas más complejas y lumen para cosas pequeñas. También puede crear esto usted mismo si lo desea, también.
Después de crear la api, podría obtener fácilmente el JSON con file_get_contents()
descrito here o usar cualquier herramienta de descanso que pueda encontrar para php.
Hay un puñado de maneras en las que podría abordar esto, si estoy entendiendo lo que quiere lograr. Es probable que no necesite utilizar ninguna reescritura.
La solución más sencilla sería agregar su código "pretty.php" a su archivo header.php en su plantilla de Wordpress. Esto se cargará en cada solicitud al inicio de la página web. Si necesita cargar el código solo en una página específica, simplemente verifique en qué página está utilizando is_page.
por ejemplo, en su header.php:
if(is_page("groups")){
if(checkIfUserByUsername($_GET[''pretty'']))
{
// the rest of your code
}
}
Si desea escribir un complemento de Wordpress, solo necesita usar "add_action" en su complemento:
add_action(''wp_head'', ''function_containing_your_code'');
De nuevo, esto se cargará en cada página, así que simplemente verifique que esté en la página en la que desea cargar su código.
https://codex.wordpress.org/Plugin_API/Action_Reference/wp_head https://developer.wordpress.org/reference/functions/is_page/
Además, puede editar su archivo .htaccess al igual que puede editar cualquier archivo que su usuario tenga permiso para editar. Suponiendo que está ejecutando un servidor apache, su archivo .htaccess debe tener permisos que permitan editar el archivo y usted puede editarlo con PHP. por ejemplo:
$file = fopen("/path/to/.htaccess", "a+");
fwrite($f, "RewriteRule ^(/w.+)$ ./pretty.php?pretty=$1 [QSA]");
fclose($f);
Mucha gente diría que es un riesgo de seguridad tener PHP escribiendo en su archivo .htaccess. Yo diría que en algunas circunstancias eso es cierto, pero ciertamente no siempre. Haz que entiendas los permisos antes de permitir que PHP escriba en tu archivo .htaccess.