Asignar la primera imagen de la galería como destacada masivamente

A menudo nos encontramos con la necesidad de asignar la primera imagen de la gallery de un post como destacada. Esto nos lo encontramos normalmente cuando migramos webs a WordPress.

Os dejo una función que funciona a la perfección. Es posible que necesitéis lanzarla más de una vez en función del total de posts que tengáis.

El post type ‘post’ puede cambiarse por los post types en los que necesitéis lanzar esta función.


function wpse87964_set_post_thumbnails(){

    // Query args
    $wpse87964query_args = array(
		'nopaging' => true,
		'post_type' => 'post',
                'meta_query' => array(
                array(
                    'key' => '_thumbnail_id',
                    'compare' => 'NOT EXISTS'
                )
        ) );

    // Run query
    $wpse87964query = new WP_Query( $wpse87964query_args );

    // Open query loop
    if ( $wpse87964query->have_posts() ) : while ( $wpse87964query->have_posts() ) : $wpse87964query->the_post();

        // Query post attachments
        $attachments = get_children( 'post_parent=' . get_the_ID() . '&post_type=attachment&post_mime_type=image&order=desc' );
        if( $attachments ) {
            $keys = array_reverse( $attachments );
            set_post_thumbnail( get_the_ID(), $keys[0]->ID );
        };

    // Close query loop
    endwhile; endif;
    wp_reset_postdata();

}

Cómo resolver un loop de redirecciones en WordPress tras haber instalado SSL

En determinados servidores me ha ocurrido que al activar https en la web se genera un loop de redirecciones.

Aquí os cuento la solución:

Como se sugiere en el Codex, esto solo será necesario en caso de que haya habilitado el paso de SSL en la configuración de su equilibrador de carga (o firewall). Lo que significa que, si bien puede acceder al sitio a través de HTTP dentro de TLS / SSL, la comunicación que recibe su servidor es solo HTTP.

En este caso, se necesita este encabezado para que WordPress pueda «activar» HTTPS en la matriz de configuración $ _SERVER:

/** SSL */  
define('FORCE_SSL_ADMIN', true);  
// in some setups HTTP_X_FORWARDED_PROTO might contain  
// a comma-separated list e.g. http,https  
// so check for https existence  
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)  
    $_SERVER['HTTPS']='on';

¡Espero que os sirva de ayuda!

Cómo resolver un loop de redirecciones en el Network admin de un WordPress Multisite

A menudo, el problema se resuelve añadiendo este código en el fichero wp-config.php y borrando tus cookies antes de volver a hacer login:

define('ADMIN_COOKIE_PATH', '/');
define('COOKIE_DOMAIN', '');
define('COOKIEPATH', '');
define('SITECOOKIEPATH', '');

Sin embargo, la última vez que me ha ocurrido este problema no he conseguido resolverlo de esta forma. Investigando por la red, descubrí que si estás usando las www como dominio principal y lo tienes definido así en el wp-config.php…

define('DOMAIN_CURRENT_SITE', 'www.mydomain.com');

…lo más probable es que tengas que añadir las www en la tabla wp_blogs de la base de datos.

¡Espero que el tip te sirva de ayuda!

Error SMTP de validación de certificado SSL en WordPress

Normalmente utilizo un plugin para enviar los emails de WordPress vía SMTP. Recientemente me he encontrado con este error en algunos WordPress que gestiono después de haber activado un certificado de seguridad SSL en el servidor.

Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in /home/www/wp-includes/class-smtp.php on line 344

En vez de gestionarlo con un plugin puedes añadir este código en tu fichero functions.php:

add_action('phpmailer_init','send_smtp_email');
function send_smtp_email( $mail )
{
    // Define que estamos enviando por SMTP
    $mail->isSMTP();
 
    // La dirección del HOST del servidor de correo SMTP p.e. smtp.midominio.com
    $mail->Host = "ruta del servidor";
 
    // Uso autenticación por SMTP (true/false)
    $mail->SMTPAuth = true;
 
    // Puerto SMTP - Suele ser el 25, 465 o 587
    $mail->Port = "587";
 
    // Usuario de la cuenta de correo
    $mail->Username = "usuario";
 
    // Contraseña para la autenticación SMTP
    $mail->Password = "contrasena";
 
    // El tipo de encriptación que usamos al conectar - ssl (deprecated) o tls
    $mail->SMTPSecure = "ssl";
 
    $mail->From = "mail@dominio.com";
    $mail->FromName = "Tu nombre";
	
	// Esto es lo que soluciona el error de validación
	$mail->SMTPOptions = array(
		'ssl' => array(
			'verify_peer' => false,
			'verify_peer_name' => false,
			'allow_self_signed' => true
		)
	);

}

Custom opengraph image with Yoast SEO

Yoast SEO plugin automatically add the featured image of posts as an image opengraph meta tag. If you want to override or customize this setting, you can make use of filter.

In this case, we needed to display a custom featured image of a taxonomy which is assigned to the tax with a custom field added by ACF plugin.


function my_own_og_function() {

	if(is_tax('tax_name')){
		$tax_name = get_term_by('slug', get_query_var('tax_name'), 'tax_name');
		$img = get_field('image', 'tax_name_'.$tax_name->term_id);
		if($img){
			$GLOBALS['wpseo_og']->image_output( $img['sizes']['large'] );
		}
	}
    
}
add_action( 'wpseo_opengraph', 'my_own_og_function', 29 );

Optimizar vídeo para web con Handbrake

El formato de vídeo para web más universal es el mp4. Para exportar un mp4 comprimido y optimizado para web os recomendamos Handbrake, un programa gratuito para Mac.

HandBrake soporta múltiples formatos de vídeo. Para exportar un vídeo a mp4 optimizado para web hay que hacer click en Source, abrir el vídeo en cuestión y marcar las siguientes opciones:

handbrake-mp4-video-web-optimized

 

Subir archivos de tipo SVG a WordPress

WordPress tiene restringida la subida de ficheros de formatos determinados. Uno de ellos es el SVG, cada vez más usado en el mundo web. Para poder subir ficheros SVG en WordPress, es necesario añadir este filtro en functions.php.

function llos_mime_types($mimes) {
 $mimes['svg'] = 'image/svg+xml';
 return $mimes;
}
add_filter('upload_mimes', 'llos_mime_types');

Error 500 con AJAX Thumbnail Rebuild, imposible regenerar las imágenes

Si la librería de tu WordPress pesa mucho, es posible que AJAX Thumbnail Rebuild no te permite regenerar las imágenes por falta de memoria de tu hosting. Mi servidor tiene un límite de 256MB de memoria, y en este caso la página web tiene unas 7.000 imágenes.

Para solventar el problema he sustituido la función del fichero php del plugin:

$attachments =& get_children( array(
'post_type' => 'attachment',
'post_mime_type' => 'image',
'numberposts' => -1,
'post_status' => null,
'post_parent' => null, // any parent
'output' => 'object',
) );

Por esta función que consume menos recursos y me ha permitido lanzar la opción de regenerar sin problemas.

$attachments = $wpdb->get_results("SELECT id, post_title FROM {$wpdb->posts} WHERE post_type='attachment' AND post_mime_type LIKE 'image%'");