WPML
ステータス
解決済み
タイプ
バグ
報告対象
WPML Multilingual CMS 3.3.6
解決されたバージョン
3.3.7

問題の概要

特定のカスタム投稿タイプのアーカイブページの投稿表示をフィルタリングするために、wp_get_archivesを使用し、引数post_typeを指定しても機能しません。

この問題はWordPress 4.4リリースで発生したことにご注意ください。

例:

スラッグが「news」のカスタム投稿タイプがあり、テーマ内にそのカスタム投稿タイプ用のカスタムアーカイブテンプレート(archive-news.php)を作成するとします。

そのファイル内では、以下のコードを使用してアーカイブをレンダリングします。

$my_archives=wp_get_archives(array(

	'type'=>'alpha', 

	'show_post_count'=>true, 

	'limit'=>20, 

	'post_type'=>'news', 

	'format'=>'html' 

));

print_r($my_archives);

現在、このコードは機能せず、投稿は表示されません。

回避策

以下の手順を実行する前に、サイトのファイルを編集すること、および適切に行われない場合はウェブサイトが機能しなくなる可能性があることを十分に理解してください。

先に進む前に、まず安全な環境でテストするか、少なくともウェブサイトの完全なバックアップを実行することを強くお勧めします。


  1. ファイルsitepress-multilingual-cms\sitepress.class.phpを開きます。

  2. 219行目に移動します。

    • 変更前:
      add_filter( 'getarchives_join', array( $this, 'getarchives_join' ) );

    • 変更後:
      add_filter( 'getarchives_join', array( $this, 'getarchives_join' ), 10, 2 );

  3. 3685行目に移動します。

    • 変更前:
      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'";
      }

    • 変更後:
      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 . "'";
      }

すべての既知の問題