Themes y Diseño
está sin resolverMuy buenas a todos
He estado leyendo algún que otro post por aquí sobre el tema de permalinks pero no termino de verlo. Os explico.
Estoy desarrollando un plugin que muestra unas fichas.
La url principal seria:
http://www.web.com/fichas
La idea es que se puedan ver fichas y luego seleccionar fichas y verlas una a una y otra opción es ordenarlas por nombre y solo mostrar las que comiencen por A, B, C, etc. En este último caso la URL seria:
http://www.web.com/fichas/filtro/A
Pero claro no logro llegar a esta estructura con las funciones que he visto. Alguna idea de por donde tendría que tirar ?
Muchas gracias !! ^^
PD: vi este post que hablan de un script que hace lo que quiero pero lo implementé a mi manera y no funciona :
http://wordpress.org/support/topic/using-an-extra-parameter-in-an-url
Buenas! Entender el sistema de permalinks es un poco duro al principio
te pongo un ejemplo a ver si te inspiras
La cuestión es "fichas" que son? custom post? una categoria? Puedes substituir "category_name" por cualquier query_var que quieras, como pagename, post_type, etc
Al final lo que consigues es en tu plantilla tener disponible la variable filtro_fichas con la que puedes jugar con el query
Saludos
Buenas! Entender el sistema de permalinks es un poco duro al principio
te pongo un ejemplo a ver si te inspiras
La cuestión es "fichas" que son? custom post? una categoria? Puedes substituir "category_name" por cualquier query_var que quieras, como pagename, post_type, etc
Al final lo que consigues es en tu plantilla tener disponible la variable filtro_fichas con la que puedes jugar con el query
add_filter('generate_rewrite_rules', 'filtro_generate_rewrite_rules');
function filtro_generate_rewrite_rules($wp_rewrite) {
$fichas = array('.*/fichas/?$' = > 'index.php?category_name=fichas');
$filtro_fichas = array('.*/fichas/filtro/(.+)?$' = > 'index.php?category_name=fichas&filtro_fichas='.$wp_rewrite- >preg_index(1));
$wp_rewrite- >rules = $filtro_fichas + $fichas + $wp_rewrite- >rules;
}
add_filter('query_vars', 'filtro_query_vars');
function filtro_query_vars($public_query_vars) {
$public_query_vars[] = 'filtro_fichas';
return $public_query_vars;
}
http://pastebin.com/NgtRYSkX
Saludos
Muchas gracias por tu ejemplo. La verdad es un poco lioso pero bueno todo es ponerse no? Jeje.
En cuanto a ficha y filtro ambas son urls "personalizadas". Quiero decir, no son post, ni categorias, ni nada por el estilo, es una implementación propia del plugin
Voy a indagar en el script que me has pasado.
Un saludo y muchas gracias
Ok, entonces sino son ni posts ni páginas ni nada del query_posts entonces tendrás que añadir una funcion a la accion "template_redirect" comprobar dentro con get_query_var('filtro_fichas'); y si es !="" entonces cargas con require(TEMPLATEPATH."elarchivoquequieras.php") con el que podrás hacer lo que buscas.
Saludos!
Ok, entonces sino son ni posts ni páginas ni nada del query_posts entonces tendrás que añadir una funcion a la accion "template_redirect" comprobar dentro con get_query_var('filtro_fichas'); y si es !="" entonces cargas con require(TEMPLATEPATH."elarchivoquequieras.php") con el que podrás hacer lo que buscas.
Saludos!
Probaré como me dices y te cuento
Muchas gracias !!
PD: un offtopic, aparte de la web oficial de WP para buscar el tema de funciones, lo que hacen, etc. ¿hay alguna que explique estas de una forma más "práctica" XD ?
Llevo como una semana intentando dar con la solución pero no la veo :S
Os cuento como tengo la distribución de url
http://web.com/nombre/ -> nombre principal que se accede a lo que genera el plugin
http://web.com/nombre/?ficha=numero -> acceso a la ficha (número obviamente es la ID de la ficha)
http://web.com/nombre/?filtro=letra -> filtrando las fichas por su nombre (letra es una letra de la A a la Z)
Eso es lo que tengo pero no logro implementarlo.
El plugin se ejecuta en una página haciendo una llamada a [page_loquesea]
Saludos
Alguien me puede ayudar ? Me estoy volviendo bastante loco y no entiendo el funcionamiento :S !! Me estoy haciendo un lío del copón.
Gracias !!
Pues no te puedo ayudar porque, sinceramente, no he entendido lo que quieres hacer. No sé por qué tienes que usar una estructura de permalinks diferente para hacer lo que quieres.
Creo que es cuestión de organizar la idea y seguro que tal como viene WordPress lo puedes hacer, o en su caso, con taxonomías.
Un saludo
Veamos a ver si me explico mejor.
He desarrollado un plugin el cual se inserta en una página mediante [page_nombreplugin] y muestra todo el contenido de este.
Cuando acceso a dicha página, queda así:
Nada más entrar se muestran un listado de fichas, y al pulsar en cualquiera de estas la url quedaría:
http://www.web.com/plugin/?ficha=nombre-ficha
Lo que quiero hacer es que ?ficha= desaparezca y solo quede la URL así:
http://www.web.com/plugin/nombre-ficha
Pero no me aclaro con el tema de wp_rewrite y tal.
En cuanto a las taxonomías tendré que buscar al respecto porque no sé lo que es.
¿Se entiende mejor ahora?
Gracias
PD: la url "original" sería: http://www.web.com/?pagename=plugin&ficha=nombre-ficha
Este es el código que estoy usando para intentar crear las url amigables:
Comprendo...
Creo que el código que has empleado es para URLs tipo:
"http://mysite/index.php?pagename=project&id=1"
Es decir, la última parte del ID no la usas. Tampoco me queda claro cual es la URL real que se crea. Suponiendo que sea:
"http://www.web.com/?pagename=plugin&ficha=nombre-ficha"
Según el CODEX el código sería algo así:
add_action('admin_init', 'flush_rewrite_rules');
add_action('generate_rewrite_rules', 'nueva_rewrite_rules');
function nueva_rewrite_rules( $wp_rewrite )
{
$new_rules = array(
'plugin/(.+)' => 'index.php?pagename=plugin&ficha=' . $wp_rewrite->preg_index(1) );
// Add the new rewrite rule into the top of the global rules array
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
Esto dará como resultado, "http://www.web.com/plugin/nombre-ficha"
Si no me he equivocado, cosa probable porque aquí me pierdo un poco.
Tampoco me queda claro si pierdes el permalink que hayas creado.
Esto también se puede hacer desde .htaccess
Un saludo
Perdón por no dar todos los datos.
Te cuento:
La URL real es:
"http://www.web.com/?pagename=plugin&ficha=nombre-ficha"
El resultado que me comentas es el que busco.
En cuanto a lo de perder el permalink, ¿a que te refieres? Y al .htacces está implementado en el apache, por lo tanto indagaré al respecto porque me dejó medio perdido cuando me lo dijo el informático.
Lo que aún me queda duda es, después de aplicar todo, si entro a la URL ya "amigable" tendría que aparecer las fichas verdad ?
Voy a probar !!
Gracias !!
PD: en principio "funciona" y explico.
Antes cuando entraba a http://www.web.com/plugin/nombre-ficha me aparecía que la página no existía, ahora me sale la parte principal del plugin pero no la ficha, es un paso jaja. El problema es que aunque entre en la dirección que comenté antes la ficha no aparece y no sé porque puede ser. La url "Original" sería:
http://www.web.com/?pagename=plugin&ficha=nombre-ficha
Url a la que intento acceder:
http://www.web.com/plugin/nombre-ficha
Un saludo !
Hay un detalle en el código anterior que he puesto.
add_action('admin_init', 'flush_rewrite_rules');
debe poner
add_action('init', 'flush_rewrite_rules');
Tal como lo puse al principio sólo funciona cuando accedes al Panel de Control, o sea, cuando te logueas.
También existe otro problema y es que llamar constantemente a flush_rewrite_rules ralentiza mucho el blog, esto se puede solucionar.
Pero antes de todo es imprescindible que el plugin funcione bien. Por lo tanto, comprueba que no hace cosas extrañas antes de modificar el permalink para el plugin.
Las reglas puestas por WordPress en .htaccess no se ven afectadas por este código, lo he comprobado.
nombre-ficha se supone que es el nombre de una ficha, ejemplo, si la ficha se llama Productos, "http://www.web.com/plugin/productos"
Después seguimos...
Un saludo
Hay un detalle en el código anterior que he puesto.
add_action('admin_init', 'flush_rewrite_rules');debe poner
add_action('init', 'flush_rewrite_rules');Tal como lo puse al principio sólo funciona cuando accedes al Panel de Control, o sea, cuando te logueas.
También existe otro problema y es que llamar constantemente a flush_rewrite_rules ralentiza mucho el blog, esto se puede solucionar.
Pero antes de todo es imprescindible que el plugin funcione bien. Por lo tanto, comprueba que no hace cosas extrañas antes de modificar el permalink para el plugin.
Las reglas puestas por WordPress en .htaccess no se ven afectadas por este código, lo he comprobado.
nombre-ficha se supone que es el nombre de una ficha, ejemplo, si la ficha se llama Productos, "http://www.web.com/plugin/productos"
Después seguimos...
Un saludo
Hice el cambio que me comentaste pero aún así aunque ponga http://www.web.com/plugin/nombre-ficha me sigue apareciendo la "portada" principal del plugin y no la ficha en cuestión.
La url original sería index.php?pagename=plugin&ficha=nombre-ficha por lo tanto si se le está pasando nombre-ficha lo tendría que pillar y entrar en la propia pero no :S es muy raro.
Alguna recomendación?
Muchas gracias por tu tiempo !! ^^
PD: por si sirve dejo el código que cree para cuando se carga una ficha (es el trozo ese) - http://pastebin.com/1YgV1ARR
Por cierto, me había olvidado comentarte algo muy importante. El código anterior no funciona si no existen otras reglas de URL antes. Es decir, debes tener una estructura de permalinks personalizada para que se puedan añadir las que pone el código. El código regenera reglas si existen, si no me temo que no funciona.
Resumiendo si no tienes un archivo .htaccess porque no has configurado tu propio permalink personalizado, entonces podrías crear tu propias reglas creando un archivo .htaccess con ellas dentro y olvidarte de crearlas desde WordPress.
Tampoco me has aclarado si el plugin funciona perfectamente (sin permalinks)...
Un saludo
Por cierto, me había olvidado comentarte algo muy importante. El código anterior no funciona si no existen otras reglas de URL antes. Es decir, debes tener una estructura de permalinks personalizada para que se puedan añadir las que pone el código. El código regenera reglas si existen, si no me temo que no funciona.
Resumiendo si no tienes un archivo .htaccess porque no has configurado tu propio permalink personalizado, entonces podrías crear tu propias reglas creando un archivo .htaccess con ellas dentro y olvidarte de crearlas desde WordPress.
Tampoco me has aclarado si el plugin funciona perfectamente (sin permalinks)...
Un saludo
Vale, sabiendo eso, ya sé porque no funciona. El htacces está implementado en el propio apache y no en un archivo .htaccess, por lo tanto, resultaría imposible hacerlo funcionar.
Por otro lado el plugin funciona perfectamente, dejé el paso de crear las url amigables para el final, cuando todo fuese sin problemas.
Probaré implementándolo en el propio apache a ver que sucede
pero dudo mucho que de problemas.
Mil gracias por tu tiempo
¿Einnnnn?
El .htaccess lo creas tú o WordPress en cuanto creas un permalink. Entras por FTP y lo verás en el directorio donde se encuentre el blog instalado y si no lo tienes lo creas con las reglas que consideres oportunas.
Prueba poner /%postname%.html como permalink personalizado y verás que WordPress te crea el archivo .htaccess
Lo de "implementado" es la p... manía que tienen los informáticos de hablar en jarameo para confundir al personal y al final quedarte igual o peor que antes de hacerle la consulta. Con lo fácil que es hablar claro... Traducido al cristiano sería, "Claro hombre puedes crear tu .htaccess porque es una característica de Apache"
A no ser que tengas un servidor rarísimo o gratuito que no te permita hacer ese tipo de cosas. Lo cual dudo porque estás trabajando con código y no han dicho ni pio...
Un saludo
Te cuento, que he podido acceder a este. El servidor es uno propio, en su CPD en la empresa y tal. Por lo que he visto el .htacces se encuentra en:
/etc/apache2/sites-available/www.web.com.conf
Y esto es lo que contiene:
<VirtualHost www2.web.com:80>
ServerName www2.web.com
ServerAdmin webmaster@web.com
ServerAlias web.com
DocumentRoot /var/www/www.web.com
DirectoryIndex index.php index.html
<Directory /var/www/www.web.com>
Options -Indexes +FollowSymLinks -SymLinksIfOwnerMatch
AllowOverride none
### Wordpress permalinks
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</Directory>CustomLog /var/log/apache2/www.web.com-access.log combined
ErrorLog /var/log/apache2/www.web.com-error.log### Upload files settings
php_value upload_max_filesize 40M
php_value post_max_size 44M
php_value max_execution_time 320
php_value max_input_time 320</VirtualHost>
Por lo que me comentó el que montó este tinglado lo hizo para que cargara directamente en memoria las redirecciones y no tenga que estar "cacheando" cada dos por tres cuando un usuario se mete en la web.
Eso es lo que sé ahora mismo, por eso te digo que el .htaccess no está en el directorio raiz, ni oculto, ni nada, no está :S
Un saludo
Valeeee, no está, pero si lo necesitaras lo puedes crear. Ya te digo cuando modificas los permalinks WordPress te lo crea en la misma carpeta donde está instalado. Otra cosa son los .htaccess que haya anteriores para gestionar las reglas del sitio. Ese lógicamente no lo debes tocar.
De todas formas, ahora que miro bien, ese .htaccess que has puesto contiene un permalink de WordPress, y es para el raiz
### Wordpress permalinks
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Aclara el tema...
Saludos
Valeeee, no está, pero si lo necesitaras lo puedes crear. Ya te digo cuando modificas los permalinks WordPress te lo crea en la misma carpeta donde está instalado. Otra cosa son los .htaccess que haya anteriores para gestionar las reglas del sitio. Ese lógicamente no lo debes tocar.
De todas formas, ahora que miro bien, ese .htaccess que has puesto contiene un permalink de WordPress, y es para el raiz
### Wordpress permalinks
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
Aclara el tema...
Saludos
Aclaro, porque ya pregunté. Como bien te comenté este archivo es un "copy/paste" del código que te da al generar el permalink desde el propio wordpress, con la salvedad de que en vez de albergarlo en un .htaccess en el directorio raíz aparece en ese archivo que te comenté en la ruta esa. ¿Por qué? Te digo lo que me dijeron ami: Para que no esté pidiendo todo el rato el servidor el archivo .htaccess cada vez que entra un usuario y que lo deje en "caché" desde el propio apache. A partir de ahí, como no lo implemente yo en ese archivo, dudo que lo pueda generar. Estaría pisando este, por lo tanto es algo que "no me dejarían".
Un saludo
Debes Identificarte para publicar.