wp-monkeys
Wordpress por y para primates
Wordpress por y para primates
27 mar
Crear un evento recurrente en WordPress es muy sencillo. Ahora os muestro un ejemplo muy sencillo de creación de evento en el cron de WordPress en el functions.php de nuestro theme.
En nuestro ejemplo vamos a ir sumando 1 a una opción que tenemos en BBDD cada minuto. Para lo cual vamos a tener que crear nuestro propio intervalo de tiempo.
/**
* Crea nuevos intervalos de tiempo
*
* @param unknown_type $cron_schedules
* @return unknown
*/
function cron_mas_intervalos($cron_schedules){
$cron_schedules['every_minute'] = array( 'interval'=> 60, 'display'=> __('Every minute') );
$cron_schedules['every_10_minutes'] = array( 'interval'=> 10 * 60, 'display'=> __('Every 10 minutes'));
$cron_schedules['half_hour'] = array( 'interval'=> 30 * 60, 'display'=> __('Cada media hora') );
return $cron_schedules;
}
add_filter('cron_schedules','cron_mas_intervalos');
/**
* Función para crear el evento. Lo enganchamos al hook "wp" para forzar su carga sólo una vez
*
*/
function activar_cron () {
if(!wp_next_scheduled('prueba_cron'))
wp_schedule_event( time(), 'every_minute','prueba_cron');
}add_action('wp', 'activar_cron');
/**
* Función principal. Es la que ejecutará el wp-cron. Simplememte suma 1 a una option de WordPress
*
*/
function prueba_cron_func(){
$opcion_guardada = get_option('valor_opcion');
if ( empty($opcion_guardada)){
$opcion_guardada = 0;
}
update_option('valor_opcion', $opcion_guardada + 1);
}
add_action('prueba_cron','prueba_cron_func');
Todo este código se inserta en el functions.php. Cómo sabéis el cron de WordPress es un pseudocron, esto es, no se ejecuta realmente cuando lo programes, sino cuando alguien entre a la Web y se compruebe que hay que ejecutar algún evento del CRON.
Para crons más exactos existen varias soluciones que os contaré otro día.
27 feb
Podemos cambiar el orden de un listado de una categoría (o cualquier otra taxonomía) muy fácilmente. Así por ejemplo podemos ordenar los posts por orden ascendente o descendente, por cualquier valor que permite WP_Query:
'none' - No order (available with Version 2.8).
'ID' - Order by post id. Note the captialization.
'author' - Order by author.
'title' - Order by title.
'date' - Order by date.
'modified' - Order by last modified date.
'parent' - Order by post/page parent id.
'rand' - Random order.
'comment_count' - Order by number of comments (available with Version 2.9).
'menu_order' - Order by Page Order.
'meta_value' - Note that a 'meta_key=keyname' must also be present in the query.
'meta_value_num' - Order by numeric meta value (available with Version 2.8). Also note that a 'meta_key=keyname' must also be present in the query. This value allows for numerical sorting as noted above in 'meta_value'.
Para ello, tan sólo tienes que añadir un filtro a pre_get_posts en tu functions.php. Este filtro te permite redfinir la query, de manera que puedes setear por ejemplo, el valor del ordeby.
En mi ejemplo cambio del orden de mostrar los posts en cualquier archive por el número de comentarios:
// Runs before the posts are fetched
add_filter( 'pre_get_posts' , 'my_change_order' );
// Function accepting current query
function my_change_order( $query ) {
// Check if the query is for an archive
if($query->is_archive) {
//$query->set( 'order' , 'asc' );
$query->set( 'orderby' , 'comment_count' );
}
// Query was for archive, then set order
// Return the query (else there's no more query, oops!)
return $query;
}
Ahora siempre que entres al listado de una categoría, o cualquier otra taxonomía los posts ya no estarán ordenados por fecha, sino que por el número de comentarios.
4 oct
Si en tu WordPress no te está funcionando el envio de correos a las cuentas con el mismo dominio (no llegan los emails a miemail@midominio.com desde midominio.com) es probable que sea porque el servidor de correo está en un servidor externo, como los de Google Apps. Este error sucede porque el servidor cree que tiene que enviar los emails a “él mismo” y, por lo tanto, esos mail no llegarán nunca (y si llegan, estarán en el webmail del servidor, en caso de que estuviese la cuenta creada).
En estos casos podemos forzar que WordPress envíe los emails por SMTP lo cual permite especificar el servidor de salida.
NOTA: Esto sólo funcionará con los email enviados con la función interna de WordPress
wp_mail, en caso de que hagas envios por tí mismo ,con phpmailer por ejemplo, tendrás que configurarlo también).
Por fortuna WordPress tiene varios plugins que te permiten reconfigurar la función wp_mail() demanera que todos los mails sean enviados por SMTP en lugar de por la función PHP’s mail() function.
El que nosotros estamos usando y que funciona perfectamente es el WP Mail SMTP. Por ejemplo, esta es la configuración para usar Google Apps:
Mailer: SMTP
SMTP Host: smtp.gmail.com
SMTP Port: 465
Encryption: SSL
Authentication: Yes
Username: tu cuenta de Gmail
Password: tu contraseña de Gmail
Como consejo, antes de empezar cualquier WordPress, aseguraros qué servidor de correo vais a usar, el propio del alojamiento (en cuyo caso no habrá que hacer nada), o uno externo (en cuyo caso habrá que hacer lo arriba descrito).
6 jul
Etiqueta para usar en el Contact Form 7 con todos los países del mundo en inglés:
[select country id:country include_blank "Afghanistan" "Albania" "Algeria" "American Samoa" "Andorra" "Angola" "Anguilla" "Antarctica" "Antigua and Barbuda" "Argentina" "Armenia" "Arctic Ocean" "Aruba" "Ashmore and Cartier Islands" "Atlantic Ocean" "Australia" "Austria" "Azerbaijan" "Bahamas" "Bahrain" "Baker Island" "Bangladesh" "Barbados" "Bassas da India" "Belarus" "Belgium" "Belize" "Benin" "Bermuda" "Bhutan" "Bolivia" "Bosnia and Herzegovina" "Botswana" "Bouvet Island" "Brazil" "British Virgin Islands" "Brunei" "Bulgaria" "Burkina Faso" "Burundi" "Cambodia" "Cameroon" "Canada" "Cape Verde" "Cayman Islands" "Central African Republic" "Chad" "Chile" "China" "Christmas Island" "Clipperton Island" "Cocos Islands" "Colombia" "Comoros" "Cook Islands" "Coral Sea Islands" "Costa Rica" "Cote d'Ivoire" "Croatia" "Cuba" "Cyprus" "Czech Republic" "Denmark" "Democratic Republic of the Congo" "Djibouti" "Dominica" "Dominican Republic" "East Timor" "Ecuador" "Egypt" "El Salvador" "Equatorial Guinea" "Eritrea" "Estonia" "Ethiopia" "Europa Island" "Falkland Islands (Islas Malvinas)" "Faroe Islands" "Fiji" "Finland" "France" "French Guiana" "French Polynesia" "French Southern and Antarctic Lands" "Gabon" "Gambia" "Gaza Strip" "Georgia" "Germany" "Ghana" "Gibraltar" "Glorioso Islands" "Greece" "Greenland" "Grenada" "Guadeloupe" "Guam" "Guatemala" "Guernsey" "Guinea" "Guinea-Bissau" "Guyana" "Haiti" "Heard Island and McDonald Islands" "Honduras" "Hong Kong" "Howland Island" "Hungary" "Iceland" "India" "Indian Ocean" "Indonesia" "Iran" "Iraq" "Ireland" "Isle of Man" "Israel" "Italy" "Jamaica" "Jan Mayen" "Japan" "Jarvis Island" "Jersey" "Johnston Atoll" "Jordan" "Juan de Nova Island" "Kazakhstan" "Kenya" "Kingman Reef" "Kiribati" "Kerguelen Archipelago" "Kosovo" "Kuwait" "Kyrgyzstan" "Laos" "Latvia" "Lebanon" "Lesotho" "Liberia" "Libya" "Liechtenstein" "Lithuania" "Luxembourg" "Macau" "Macedonia" "Madagascar" "Malawi" "Malaysia" "Maldives" "Mali" "Malta" "Marshall Islands" "Martinique" "Mauritania" "Mauritius" "Mayotte" "Mexico" "Micronesia" "Midway Islands" "Moldova" "Monaco" "Mongolia" "Montenegro" "Montserrat" "Morocco" "Mozambique" "Myanmar" "Namibia" "Nauru" "Navassa Island" "Nepal" "Netherlands" "Netherlands Antilles" "New Caledonia" "New Zealand" "Nicaragua" "Niger" "Nigeria" "Niue" "Norfolk Island" "North Korea" "North Sea" "Northern Mariana Islands" "Norway" "Oman" "Pacific Ocean" "Pakistan" "Palau" "Palmyra Atoll" "Panama" "Papua New Guinea" "Paracel Islands" "Paraguay" "Peru" "Philippines" "Pitcairn Islands" "Poland" "Portugal" "Puerto Rico" "Qatar" "Reunion" "Republic of the Congo" "Romania" "Russia" "Rwanda" "Saint Helena" "Saint Kitts and Nevis" "Saint Lucia" "Saint Pierre and Miquelon" "Saint Vincent and the Grenadines" "Samoa" "San Marino" "Sao Tome and Principe" "Saudi Arabia" "Senegal" "Serbia" "Seychelles" "Sierra Leone" "Singapore" "Slovakia" "Slovenia" "Solomon Islands" "Somalia" "South Africa" "South Georgia and the South Sandwich Islands" "South Korea" "Spain" "Spratly Islands" "Sri Lanka" "Sudan" "Suriname" "Svalbard" "Swaziland" "Sweden" "Switzerland" "Syria" "Taiwan" "Tajikistan" "Tanzania" "Thailand" "Togo" "Tokelau" "Tonga" "Trinidad and Tobago" "Tromelin Island" "Tunisia" "Turkey" "Turkmenistan" "Turks and Caicos Islands" "Tuvalu" "Uganda" "Ukraine" "United Arab Emirates" "United Kingdom" "USA" "Uruguay" "Uzbekistan" "Vanuatu" "Venezuela" "Viet Nam" "Virgin Islands" "Wake Island" "Wallis and Futuna" "West Bank" "Western Sahara" "Yemen" "Yugoslavia" "Zambia" "Zimbabwe"]
6 jul
Etiqueta para usar en el Contact Form 7 con todos los países del mundo en italiano:
[select country id:country include_blank "Afghanistan" "Albania" "Algeria" "Andorra" "Angola" "Anguilla" "Antartide" "Antigua e Barbuda" "Antille Olandesi" "Arabia Saudita" "Argentina" "Armenia" "Aruba" "Australia" "Austria" "Azerbaigian" "Bahamas" "Bahrein" "Bangladesh" "Barbados" "Belgio" "Belize" "Benin" "Bermuda" "Bhutan" "Bielorussia" "Bolivia" "Bosnia-Erzegovina" "Botswana" "Bouvet, isola" "Brasile" "Brunei" "Bulgaria" "Burkina Faso" "Burundi" "Cambogia" "Camerun" "Canada" "Capo Verde" "Cayman, isole" "Ciad" "Cile" "Cina" "Cipro" "Cisgiordania" "Cocos, isole" "Colombia" "Comore" "Congo" "Congo, Repubblica Democratica del" "Cook, isole" "Corea del Nord" "Corea del Sud" "Costa d'avorio" "Costa Rica" "Croazia" "Cuba" "Danimarca" "Dominica" "Ecuador" "Egitto" "El Salvador" "Emirati Arabi Uniti" "Eritrea" "Estonia" "Etiopia" "Faroe, isole" "Figi" "Filippine" "Finlandia" "Francia" "Gabon" "Gambia" "Georgia" "Georgia Meridionale e isole Sandwich del Sud" "Germania" "Ghana" "Giamaica" "Giappone" "Gibilterra" "Gibuti" "Giordania" "Grecia" "Grenada" "Groenlandia" "Guadalupa" "Guam" "Guatemala" "Guernsey" "Guiana" "Guiana francese" "Guinea" "Guinea-Bissau" "Guinea Equatoriale" "Haiti" "Honduras" "Hong Kong" "India" "Indonesia" "Iran" "Iraq" "Irlanda" "Islanda" "Isola di Mann" "Isole del Natale" "Isole Falkland (Isole Malvine)" "Isole Heard e McDonald" "Isole minori esterne degli Stati Uniti" "Isole Pitcairn" "Isole Vergini britanniche" "Isole Vergini statunitensi" "Israele" "Italia" "Jersey" "Kazakistan" "Kenya" "Kirghizistan" "Kiribati" "Kuwait" "Laos" "Lesotho" "Lettonia" "Libano" "Liberia" "Libia" "Liechtenstein" "Lituania" "Lussemburgo" "Macao" "Macedonia, Ex Repubblica iugoslava di" "Madagascar" "Malawi" "Maldive" "Malesia" "Mali" "Malta" "Marianne Settentrionali, isole" "Marocco" "Marshall, isole" "Martinica" "Mauritania" "Mauritius" "Mayotte" "Messico" "Micronesia, Stati Federati della" "Moldavia" "Monaco" "Mongolia" "Montserrat" "Mozambico" "Myanmar" "Namibia" "Nauru" "Nepal" "Nicaragua" "Niger" "Nigeria" "Niue" "Norfolk, isola" "Norvegia" "Nuova Caledonia" "Nuova Zelanda" "Oman" "Paesi Bassi" "Pakistan" "Palau" "Panama" "Papua Nuova Guinea" "Paraguay" "Perù" "Polinesia Francese" "Polonia" "Portogallo" "Portorico" "Qatar" "Regno Unito" "Repubblica Ceca" "Repubblica Centrafricana" "Repubblica Dominicana" "Riunione, isola di" "Romania" "Ruanda" "Russia" "Sahara occidentale" "Saint Kitts e Nevis" "Saint-Pierre e Miquelon" "Saint Vincent e Grenadine" "Salomone, isole" "Samoa" "Samoa Americane" "San Marino" "Santa Lucia" "Santa Sede (Città del Vaticano)" "Sant'Elena" "Sao Tomè e Principe" "Senegal" "Serbia e Montenegro" "Seychelles" "Sierra Leone" "Singapore" "Siria" "Slovacchia" "Slovenia" "Somalia" "Spagna" "Sri Lanka" "Stati Uniti" "Striscia di Gaza" "Sudafrica" "Sudan" "Suriname" "Svalbard" "Svezia" "Svizzera" "Swaziland" "Tagikistan" "Tailandia" "Taiwan" "Tanzania" "Terre Australi e Antartiche Francesi" "Territori Britannici dell'Oceano Indiano" "Timor Est" "Timor Leste" "Togo" "Tokelau" "Tonga" "Trinidad e Tobago" "Tunisia" "Turchia" "Turkmenistan" "Turks e Caicos" "Tuvalu" "Ucraina" "Uganda" "Ungheria" "Uruguay" "Uzbekistan" "Vanuatu" "Venezuela" "Vietnam" "Wallis e Futuna" "Yemen" "Zambia" "Zimbabwe"]
6 jul
Etiqueta para usar en el Contact Form 7 con todos los países del mundo en español:
[select country id:country include_blank "Afganistán" "Albania" "Alemania" "Andorra" "Angola" "Anguila" "Antigua República Yugoslava de Macedonia" "Antigua y Barbuda" "Arabia SaudíArgelia" "Argentina" "Armenia" "Australia" "Austria" "Azerbaiyán" "Bahamas" "Bahráin" "Bangladesh" "Barbados" "Bélgica" "Belice" "Benín" "Bermudas" "Bielorrusia" "Birmania (actualmente Myanmar) " "Bolivia" "Bosnia y Herzegovina" "Botsuana" "Brasil" "Brunéi" "Bulgaria" "Burkina Faso" "Burundi" "Bután" "Cabo Verde" "Camboya" "Camerún" "Canadá" "Chad" "Chequia" "Chile" "China" "Chipre" "Cisjordania y Franja de Gaza" "Colombia" "Comoras" "Congo" "Corea del Norte" "Corea del Sur" "Costa de Marfil" "Costa Rica" "Croacia" "Cuba" "Dinamarca" "Dominica" "Ecuador" "Egipto" "El Salvador" "Emiratos Árabes Unidos" "Eritrea" "Eslovaquia" "Eslovenia" "España" "Estados Unidos" "Estonia" "Etiopía" "Filipinas" "Finlandia" "Fiyi" "Francia" "Gabón" "Gambia" "Georgia" "Ghana" "Granada" "Grecia" "Guadalupe" "Guadalupe" "Guam" "Guatemala" "Guinea" "Guinea-Bissau" "Guinea Ecuatorial" "Guyana" "Haití" "Holanda (Países Bajos)" "Honduras" "Hong Kong" "Hungría" "India" "Indonesia" "Irán" "Iraq" "Irlanda" "Islandia" "Islas Marshall" "Islas Salomón" "Israel" "Italia" "Jamaica" "Japón" "Jordania" "Kazajistán" "Kenia" "Kirguizistán" "Kiribati" "Kuwait" "Laos" "Lesoto" "Letonia" "Líbano" "Liberia" "Libia" "Liechtenstein" "Lituania" "Luxemburgo" "Macedonia" "Madagascar" "Malasia" "Malaui" "Maldivas" "Malí" "Malta" "Marruecos" "Mauritania" "Mauricio" "México" "Micronesia" "Moldavia" "Mónaco" "Mongolia" "Montenegro" "Mozambique" "Myanmar" "Namibia" "Nauru" "Nepal" "Nueva Zelanda" "Nicaragua" "Níger" "Nigeria" "Niue" "Noruega" "Omán" "Países Bajos" "Pakistán" "Palau" "Palestina" "Panamá" "Papúa-Nueva Guinea" "Paraguay" "Perú" "Polonia" "Portugal" "Puerto Rico" "Quatar" "Reino Unido" "República Centroafricana" "República Democrática del Congo" "República Dominicana" "Rumania" "Rusia" "Ruanda" "Sahara Occidental" "Samoa" "San Cristóbal y Nieves" "San Marino" "San Vicente y las Granadinas" "Santa Lucía" "Santo Tomé y Príncipe" "Senegal" "Serbia" "Seychelles" "Sierra Leona" "Singapur" "Siria" "Somalía" "Sri Lanka" "Sudáfrica" "Sudán" "Suecia" "Suiza" "Surinam" "Suazilandia" "Tailandia" "Taiwán" "Tanzania" "Tayikistán" "Timor Oriental" "Togo" "Tonga" "Trinidad y Tobago" "Túnez" "Turkmenistán" "Turquía" "Tuvalu" "Ucrania" "Uganda" "Uruguay" "Uzbekistán" "Vanuatu" "Vaticano" "Venezuela" "Vietnam" "Yemen" "Yibuti" "Yugoslavia" "Zambia" "Zimbabue"]
29 jun
Anteriormente ya os dejaba una función para acortar las urls con TinyURL, ahora es el turno de hacerlo con Google y su acortador de urls goo.gl. Para ello usaremos el API de goo.gl (alabado seas Google Code/Labs). Usaremos cURL para traer los datos, y la función json_decode() para convertir el string que traemos en json a una variable PHP.
function acortamela_google($url, $qr=NULL){
if(function_exists('curl_init')){
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, 'http://goo.gl/api/shorten');
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'security_token=null&url='.urlencode($url));
$resultados = curl_exec($ch);
$headers = curl_getinfo($ch);
curl_close($ch);
if ($headers['http_code'] === 201){
$resultados = json_decode($resultados);
if(isset($resultados->short_url)){
$qr = !is_null($qr)?'.qr':'';
return $resultados->short_url.$qr;
}
return FALSE;
}
return FALSE;
}
trigger_error("No cURL, No party. Activa cURL.", E_USER_WARNING);
return FALSE;
}
Con esto, ya podemos aplicar la función imprimiendo el resultado:
echo acortamela_google("http://www.wp-monkeys.com");
Fuente | Google Code | php.net
29 jun
Os dejo esta pequeña función, facíl, rápida y para toda la familia para acortar url’s con TinyURL
function mini_url($url){
//Le pasamos la url al API de Tinyurl
$tinyurlapi = "http://tinyurl.com/api-create.php?url=".$url;
//Traemos el contenido del string anterior,
//en este casola url acortada, y retornamos.
$linkrecortado = file_get_contents($tinyurlapi);
return $linkrecortado;
}
// Asi lo usamos.
echo mini_url("http://www.wp-monkeys.com");
10 may
En algunos proyectos de Buddypress en los que estás haciendo una inserción automática de posts puede ser que no quieras que Buddypress registre en su actividad que has creado un nuevo post, ya sea porque tú mismo quieres registrar la actividad de una manera direferente, ya sea porque simplemente no quieres mostrarlo. Pues bien, el sencillo código que has de añadir a tu función, antes de insertar el post es
remove_action( 'save_post', 'bp_blogs_record_post', 10, 2 );
al igual que esto, podéis quitar otros registros de actividad, por ejemplo, cuando alguien agrega un comentario:
remove_action( 'comment_post', 'bp_blogs_record_comment', 10, 2 );
O cuando se crea un nuevo blog:
remove_action( 'wpmu_new_blog', 'bp_blogs_record_blog', 10, 2 );
5 abr
Uno de esos trucos rápidos para salir de un apuro como fue mi caso esta mañana. Después de maquetar una web y tenerla finalizada con todo validado y testeado en Firefox e Internet Explorer, me doy cuenta de un detalle, que en Chrome algunos estilos no los estaba cogiendo bien.
Echando en falta una sentencia como el mítico comentario [if IE] recordé aquella global $_SERVER['HTTP_USER_AGENT'] que nos permite hacer una sentencia para diferenciar entre navegadores. Como tenía que aplicar esos cambios en un WordPress, lo hice de la siguiente manera:
<?php
function is_chrome(){return(eregi("chrome", $_SERVER['HTTP_USER_AGENT']));}if(is_chrome()){
echo ""?>
<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo( 'template_directory' ); ?>/chrome.css" />
<?"";
}
?>
Que básicamente carga chrome.css desde la carpeta del theme que estemos usando solo cuando estemos en Chrome. En esa hoja sobreescribimos los estilos a corregir o bien forzando con !important.
No es nada nuevo, ni mucho menos, pero quería postearlo para compartirlo y tenerlo más a mano.