WPML
Estado
Resuelto
Tipo
Error
Registrado para
WPML Multilingual CMS 3.3.6
Resuelto en
3.3.7

Resumen del problema

Usar wp_get_archives y especificar el argumento post_type para filtrar la visualización de las entradas en la página de archivo de un tipo de contenido personalizado determinado no funciona.

Tenga en cuenta que este problema se introdujo con la versión 4.4 de WordPress.

Ejemplo:

Suponga que tiene un tipo de contenido personalizado con el slug «news» y crea una plantilla de archivo personalizada para ese tipo de contenido personalizado en un tema (archive-news.php).

En ese archivo puede usar el siguiente código para renderizar el archivo:

$my_archives=wp_get_archives(array(

	'type'=>'alpha', 

	'show_post_count'=>true, 

	'limit'=>20, 

	'post_type'=>'news', 

	'format'=>'html' 

));

print_r($my_archives);

Actualmente, este código no funcionará y no se mostrará ninguna entrada.

Solución alternativa

Antes de realizar cualquiera de los siguientes pasos, asegúrese de comprender que está editando los archivos de su sitio y que esto, si no se hace correctamente, puede hacer que su sitio web deje de funcionar.

Se recomienda encarecidamente que primero pruebe esto en un entorno seguro, o al menos que realice una copia de seguridad completa de su sitio web antes de continuar.


  1. Abra el archivo sitepress-multilingual-cms\sitepress.class.php

  2. Vaya a la línea 219

    • Reemplace:
      add_filter( 'getarchives_join', array( $this, 'getarchives_join' ) );

    • Por:
      add_filter( 'getarchives_join', array( $this, 'getarchives_join' ), 10, 2 );

  3. Vaya a la línea 3685

    • Reemplace:
      function getarchives_join( $join ) {
      	return $join . " JOIN {$this->wpdb->prefix}icl_translations t ON t.element_id = {$this->wpdb->posts}.ID AND t.element_type='post_post'";
      }

    • Por:
      function getarchives_join( $join, $args ) {
      	$post_type = array_key_exists( 'post_type', $args ) ? $args['post_type'] : 'post';
      	$post_type = esc_sql( $post_type );
      
      	return $join . " JOIN {$this->wpdb->prefix}icl_translations t ON t.element_id = {$this->wpdb->posts}.ID AND t.element_type='post_" . $post_type . "'";
      }

Todos los problemas conocidos