WordPress

Compartiendo experiencias sobre la plataforma CMS más importante del mundo

BuddyPress

El increíble y fabuloso plugin de WordPress para crear redes sociales verticales

¿Cómo crear una RED SOCIAL?

Experiencias, ideas y materiales para llevar adelante tu próximo proyecto de creación de una red social

lunes, 20 de febrero de 2017

WordPress: tamaño máximo se archivos

Existen varios tutoriales de cómo aumentar el tamaño máximo de un archivo al momento de subirlo a WordPress. A veces alguno de ellos nos recomiendan desactivar un plugin y no sabemos cuál. Les cuento este caso particular.

Posible mensaje de error

En la página estádar de WordPress para subir medios:

"Error HTTP"



En un página custom de PHP:

Request Entity Too Large

The requested resource
/index.php
does not allow request data with GET requests, or the amount of data provided in the request exceeds the capacity limit.

Additionally, a 413 Request Entity Too Large error was encountered while trying to use an ErrorDocument to handle the request.


Visualizar el tamaño actual

Con la instrucción phpinfo() pueden ver la configuración a nivel de PHP:



Valores a verificar:
  • memory_limit 
  • post_max_size 
  • upload_max_filesize
  • max_execution_time 
  • file_uploads 

Con wp_max_upload_size() pueden ver el valor a nivel de WordPress eb bytes. Más información en: https://codex.wordpress.org/Function_Reference/wp_max_upload_size


Primeras soluciones

Antes de hacer cosas raras, vean estos enlaces que nos muestran las soluciones más comunes:




Mi caso particular

En mi caso particular, tenía activado el Firewall del plugin All In One WP Security:



La solución es agregar una regla particular como se menciona en este post:



#AIOWPS_BASIC_HTACCESS_RULES_START
<Files .htaccess>
order allow,deny
deny from all
</Files>
ServerSignature Off
LimitRequestBody 20480000
<Files wp-config.php>
order allow,deny
deny from all
</Files>
#AIOWPS_BASIC_HTACCESS_RULES_END



Espero haber sido útil, hasta la próxima!

viernes, 19 de agosto de 2016

WordPress - Query con custom fields anidados

El siguiente es un ejemplo de de query combinando dos campos personalizados con una relación AND:

    $argsFabrica = array( 
        'post_type' => 'maestro', 
        'meta_key' => 'valor_certi',
        'orderby' => 'meta_value', 
        'order' => ASC,
        'meta_query' => array(
          'relation' => 'AND',
           array(
            'key' => 'tabla_certi',
            'compare' => '=',
            'value' => 'FA'
             ),
           array(
            'key' => 'solicitantes_autorizados_certi',
            'compare' => 'LIKE',
            'value' => get_post_meta( $post_id, 'pedido_titular', true )
             ),
),
        );

  $fabricas = get_posts( $argsFabrica );



miércoles, 15 de junio de 2016

WordPress: archive page y Custom Post Type UI

Escenario

Creamos un custom post type (plugin Custom Post Type UI), pero cuando vamos a su página de archivos, encontramos un error 404:



En un primer intento de solución, vamos a la configuración del tipo de contenido y agregamos esta opción:



Pero sigue sin funcionar.

Sólo queda un paso más, ingresar a la opción de enlaces permanentes. No es necesario grabar.



Con eso queda solucionado el problema.

WordPress: ¿Cómo crear un formulario personalizado? - Parte 5 (Adjuntar archivos)

En esta quinta parte de esta serie de artículos (ver parte 4) veremos cómo subir archivos a la librería de medios y adjuntarlos al post que hemos creado. Luego los enviaremos por email.

Paso 1

Agregamos los tags para subir los archivos:

    <?php wp_nonce_field( 'archivoAutorizacion', 'archivoAutorizacion_nonce' ); ?>
    <p>Autorización<br/><input type="file" name="archivoAutorizacion" id="archivoAutorizacion" multiple="false" /></p><br/>
    <?php wp_nonce_field( 'archivoContrato', 'archivoContrato_nonce' ); ?>
    <p>Contrato<br/><input type="file" name="archivoContrato" id="archivoContrato" multiple="false" /></p><br/>


Nuestro formulario se verá así:



Paso 2

Agregamos el código para subir los dos archivos:


if ( isset( $_POST['archivoAutorizacion_nonce'] ) && wp_verify_nonce( $_POST['archivoAutorizacion_nonce'], 'archivoAutorizacion' ) && 
            isset( $_POST['archivoContrato_nonce'] ) && wp_verify_nonce( $_POST['archivoContrato_nonce'], 'archivoContrato' ) ) {
 
  require_once( ABSPATH . 'wp-admin/includes/image.php' );
  require_once( ABSPATH . 'wp-admin/includes/file.php' );
  require_once( ABSPATH . 'wp-admin/includes/media.php' );
    
    $attachmentAutorizacion_id = media_handle_upload( 'archivoAutorizacion', $post_id );
    if ( is_wp_error( $attachmentAutorizacion_id ) ) {
    autorizacion_response("ERROR", "No se ha podido cargar al archivo de autorización: <br/><br/>" . $attachmentAutorizacion_id->get_error_message());
    } 
    
    else {

      $attachmentContrato_id = media_handle_upload( 'archivoContrato', $post_id );
      if ( is_wp_error( $attachmentContrato_id ) ) {
          autorizacion_response("ERROR", "No se ha podido cargar al archivo de contrato: <br/><br/>" . $attachmentContrato_id->get_error_message());
      } 
      

Paso 3

Código para enviar los archivos por email.

        $adjunto1 = ABSPATH . parse_url(wp_get_attachment_url($attachmentAutorizacion_id))['path'];
        $adjunto1 = str_replace("//", "/",$adjunto1);
          
        $adjunto2 = ABSPATH . parse_url(wp_get_attachment_url($attachmentContrato_id))['path'];
        $adjunto2 = str_replace("//", "/",$adjunto2);
          
        $adjuntos = array($adjunto1, $adjunto2);
        
        $sent = wp_mail($to, utf8_decode($subject), $message, $cabeceras, $adjuntos);



Posibles errores

File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini.

Este error puede darse cuando omitimos especificar enctype="multipart/form-data" en el tag FORM:

<form class="form_certi" id="nueva_autorizacion" enctype="multipart/form-data" action="<?php the_permalink(); ?>" method="post">


viernes, 10 de junio de 2016

WordPress: ¿Cómo modificar el mensaje de código incorrecto Really Simple CAPTCHA?

Escenario:

- Really Simple CAPTCHA 1.9
- Contact Form 7 4.4.2

Mensaje de error:
"Your entered code is incorrect"

No encontramos lugar donde modificarlo. No hay traducción posible.

Solución

Agregar en functions.php este filtro:

add_filter ('wpcf7_use_really_simple_captcha', '__return_true');

Resultado





Fuentes

jueves, 2 de junio de 2016

WordPress - Mostrar datos del clima con nuestros propios estilos

En este breve artículo contaré como mostrar datos del clima en nuestro sitio de WordPress usando estilos personalizados. El objetivo es mostrar la temperatura y un icono arriba a la derecha como se ve en esta imagen:



Paso 1 - Plugin

Instalamos el plugin Weather Underground. No requiere KEY.





Paso 2 - Shortcode

Agregamos el shortcode en la página en donde queremos mostrarlo, en mi caso header.php.

El código que utilicé es:

    <div class="pp_header_boton_clima pp_bk_azul">
      <?php
     echo "<a href='https://espanol.wunderground.com/q/locid:ARSF2148;loctype:1?MR=1' target='_blank'>" . do_shortcode ( '[wunderground location="-32.30,-61.41" layout="current" measurement="c"]') . "</a>";
      ?>
    </div> 

Para ver las opciones del shortcode, ir a:


Paso 3 - Estilos

Lo más probable es que los estilos originales no sirvan, con lo cual este plugin nos permite modificarlos, para lo cual seguimos estos pasos.

Primero creamos un directorio dentro de nuestro tema llamado "wunderground"



Luego copiamos dentro de ese directorio el template original. En mi caso modifiqué el llamado CURRENT:

Carpeta origen: o/wp-content/plugins/wunderground/templates



Y luego simplemente editamos el código dentro de ese template. En mi caso utilicé este código:

{% autoescape 'html' %}
<div class="pp_servicio_clima">
{% set day = wunderground.current_observation %}
  <div class="pp_servicio_clima_temperatura">
<span>{{ day.temperature|round }}<sup>&deg;</sup></span>
<small>{% if wunderground.response.units == 'english' %}F{% else %}C{% endif %}</small>
  </div>
  {% include 'snippets/icon.html' with { 'tag' : 'div', 'iconsize' : '100' } %}
</div>
{% endautoescape %}



Paso 4 - Estilos

Esto ya queda a criterio de cada uno, sólo tenemos que ir a nuestra hoja de estilos y adaptarlo al diseño de nuestro sitio.

Muestro sólo a título ilustrativo:



Eso es todo por hoy. Hasta la próxima!

martes, 31 de mayo de 2016

WordPress - Retornar posts en base a un criterio (get_posts)

En ese breve ejemplo mostraremos como:
  • Realizar una consulta de registros de un post type
  • Especificando filtro y orden
  • Y cantidad de registros
El resultado es mostrar la información dentro de un bloque HTML en nuestra página de inicio tal como se ve en esta imagen:



El código:

        <?php
        
          $hoy = date("Ymd"); 
        
          $args = array( 
            'numberposts' => 3,
            'post_type' => 'evento', 
            'meta_key' => 'fecha_evento',
            'orderby' => 'meta_value', 
            'order' => ASC,
            'meta_query' => array(
                'key' => 'fecha_evento',
                'compare' => '>=',
                'value' => $hoy
           )
          );
          $eventos = get_posts( $args );
          
        foreach ( $eventos as $evento ) {
          
            $titulo = $evento->post_title;
            if ( strlen($titulo) >20 ) {
              $titulo = substr($titulo, 0, 20) . ' ...';
            }
          
            $fecha = get_post_meta($evento->ID,'fecha_evento',true);
            $mes = substr($fecha, 4, 2);
            $dia = substr($fecha, 6, 2);
          
            echo '<a href="' . get_permalink($evento->ID) . '">' . $dia . "/" . $mes . " " . $titulo . '</a><br/>';
          
          }
        
  wp_reset_postdata();
        
        ?>