Hack WordPress

De wikijoan
Salta a la navegació Salta a la cerca

Canviar la data d'un post

Un post té múltiples entrades en la taula wp_posts, corresponents a l'entrada primeres més les revisions posteriors i els autosave.

mysql> desc wp_posts;

Si vull modificar tots els posts associats a un post_pare a la mateixa data:

mysql> select ID, post_date,post_date_gmt,post_modified,post_modified_gmt,post_name,post_parent from wp_posts where post_title='titol_post';
mysql> update wp_posts set post_date='2008-12-28',post_date_gmt='2008-12-28',post_modified='2008-12-28',post_modified_gmt='2008-12-28' where post_title='titol_post';

Si només vull modificar el post original, buscaré per post_parent=0:

mysql> update wp_posts set post_date='2008-12-28',post_date_gmt='2008-12-28',post_modified='2008-12-28',post_modified_gmt='2008-12-28' where post_title='titol_post' and post_parent=0;

Sobre la traducció al català/castellà...

Al final agafo com a tema de referència un que es diu curved-10.

No és veritat que després d'instal.lar el wordpress en català estigui tot en català. Concretament, les plantilles també s'han de traduir. Això ho faig a pèl. Per exemple, No Comments es tradueix per Sense comentaris, i això ho faig cercant aquesta informació directament en els fitxers.

Més complicat és el format de la data que la canvio en la zona d'administració i no em fa cas. Això és perquè les plantilles estan ficades de forma absoluta. La manera de procedir és buscar en el codi font, després buscar en el fitxer php directament i identificar el que he de substituir. Finalment veig que he de substituir

<?php the_time('F jS, Y') ?> per <?php the_time('j F Y') ?> en els fitxers themes/curved-10/index.php, themes/curved-10/search.php i themes/curved-10/single.php

Això s'haurà de fer amb tot: Leave a Reply, logged as..., etc.

Treballar en local i en remot

NOTA: tot aquest tema s'ha evitat editant el fitxer /etc/hosts. Ara ja puc fer www.joanillo.org en local

El wordpress només pot estar configurat en local o en remot. Estic fent referència, dins de la zona d'administració (wp-admin/options-general.php), als valors Adreça del WordPress i Adreça del blog, que no tenen perquè coincidir. Si poso http://localhost/blog no puc accedir remotament, i si poso http://wikijoan.dyndns.org/blog no puc accedir localment.

Fent una cerca pel Google, sembla ser que efectivament no es pot treballar en els dos modes, la qual cosa per a mi és un inconvenient greu. Algú apunta a què el router es pot configurar per treballar en mode loopback, que permetria fer http://wikijoan.dyndns.org/blog des de dins de la xarxa (ho he de mirar).

Una altra possibilitat que jo he trobat és tocar directament els paràmetres d'una forma que sigui fàcil i còmoda. Investigant una mica veig que aquesta informació es guarda directament en la base de dades.

$ mysql -u root -p
mysql> use blog
mysql> select option_name from wp_options;
mysql> select option_name,option_value from wp_options where option_name='home';
mysql> select option_name,option_value from wp_options where option_name='siteurl';

Puc modificar directament aquests valors. Per fer-ho còmode, he de crear un script i un accés directe al script en l'escriptori amb la connexió al mysql, execució de les dues comandes, i desconnexió.

Per treballar localment, fitxer wp_local.sql:

update wp_options set option_value='http://localhost/blog' where option_name='home';
update wp_options set option_value='http://localhost/blog' where option_name='siteurl';

i per treballar remotament, fitxer wp_remot.sql:

update wp_options set option_value='http://wikijoan.dyndns.org/blog' where option_name='home';
update wp_options set option_value='http://wikijoan.dyndns.org/blog' where option_name='siteurl';

El problema és que quan treballi localment ningú es podrà connectar remotament, i un blog té per finalitat que tothom s'hi pugui connectar!

Automatitzem aquesta tasca mitjançant dos scripts php que s'executaran a http://localhost o http://www.empresalibre.org o http://wikijoan.dyndns.org.

fitxer blog_local.php:

<?php
exec("mysql -u root -p**** blog < /home/joan/copia_seguretat/scripts/wp_local.sql");                                      
echo "el blog funciona en local";                    
?> 

fitxer blog_remot.php:

<?php
exec("mysql -u root -p**** blog < /home/joan/copia_seguretat/scripts/wp_remot.sql");                                      
echo "el blog funciona en remot";                    
?> 

i els scripts són els que hem vist més amunt

Nota: Després de diversos canvis, ara ja puc accedir al blog remotament mitjançant http://blog.empresalibre.org. Això implica un canvi en les comandes que s'executen en el fitxer wp_remot.sql:

update wp_options set option_value='http://blog.empresalibre.org' where option_name='home';
update wp_options set option_value='http://blog.empresalibre.org' where option_name='siteurl';

Problema en les imatges

El problema està en què quan faig un upload d'una imatge (continguda en un post) en local o en remot, es queda emmagatzemada la referència absoluta de la imatge. La conseqüència és que si faig el upload en local, no es veu en remot. I a l'inversa. La solució és integrar en els scripts wp_remot.sql, wp_130.sql i wp_local.sql les següents instruccions:

update wp_posts set post_content=REPLACE(post_content, 'http://192.168.1.130/blog/wp-content/uploads', 'http://www.empresalibre.org/blog/wp-content/uploads'); 
# update wp_posts set post_content=REPLACE(post_content, 'http://www.empresalibre.org/blog/wp-content/uploads', 'http://192.168.1.130/blog/wp-content/uploads'); 
# update wp_posts set post_content=REPLACE(post_content, 'http://www.empresalibre.org/blog/wp-content/uploads', 'http://localhost/blog/wp-content/uploads'); 
update wp_posts set post_content=REPLACE(post_content, 'http://blog.empresalibre.org/wp-content/uploads', 'http://192.168.1.130/blog/wp-content/uploads'); 
update wp_posts set post_content=REPLACE(post_content, 'http://blog.empresalibre.org/wp-content/uploads', 'http://localhost/blog/wp-content/uploads'); 

Nou Wordpress (setembre 2020)

pàgines Català i Espanyol (redireccionaments)

Tinc un nou wordpress (), tinc instal·lat el plugin polylang (català i castellà), i tinc 2 pàgines (Català, Castellà), que en realitat són 4, perquè hi ha les traduccions, amb els id: 876, 883, 886, 888.

Vull que quan accedeixi a aquetes pàgines no es vegi el seu contingut, sinó que es faci una redirecció. En el fitxer header.php (que està en el theme que tinc instal·lat, el twentytwelve) posem aquestes línies:

<?php
//echo get_the_ID();
if (get_the_ID()==876 || get_the_ID()==883) {
header('Location: http://www.joanillo.org/?lang=ca');
} else if (get_the_ID()==886 || get_the_ID()==888) {
header('Location: http://www.joanillo.org/?lang=es');
}
?>

Recordar que per tal de què funcioni els redireccionaments (header), s'ha de fer abans d'escriure res per pantalla.


creat per Joan Quintana Compte, gener 2009, octubre 2020