• kz様が書かれているコードでカスタムフィールドの値でアーカイブ一覧を表示させようと
    試みましたが上手く動作せず困っております。

    カスタムフィールドによるアーカイブリストについて

    functions.phpにコードをインクルードしウィジェットにアーカイブを表示させるコードを
    記入すると一覧表示はされますが(値の数字のみ)クリックするとリンクエラー(404)とな
    ってしまい投稿した年のみ全ての記事が表示される状態です。

    functions.php

    function my_get_year_archives( $args = '' ) {
    	global $wpdb, $wp_locale;
    
    	$defaults = array(
    		'date_field' => 'date',
    		'format' => 'html',
    		'echo' => true,
    		'limit' => '',
    		'before' => '',
    		'after' => '',
    		'show_post_count' => true,
    	);
    
    	$r = wp_parse_args( $args, $defaults );
    	extract( $r, EXTR_SKIP );
    
    	if ( '' != $limit ) {
    		$limit = absint( $limit );
    		$limit = ' LIMIT '.$limit;
    	}
    
    	$field  = 'm.meta_value';
    	$select = "SELECT SUBSTRING($field,1,4) AS <code>year</code>, count(p.ID) AS posts";
    	$where  = "WHERE p.post_type = 'post' AND p.post_status = 'publish'";
    	$where .= $wpdb->prepare( ' AND m.meta_key = %s', $date_field );
    	$join   = " INNER JOIN $wpdb->postmeta AS m ON m.post_id = p.ID";
    
    	$where  = apply_filters( 'getarchives_where', $where, $r );
    	$join   = apply_filters( 'getarchives_join' , $join , $r );
    
    	$output = '';
    	$query = "$select FROM $wpdb->posts AS p $join $where GROUP BY SUBSTRING($field,1,4) ORDER BY $field DESC $limit";
    	$key = md5( $query );
    	$cache = wp_cache_get( 'my_get_year_archives' , 'general' );
    	if ( !isset( $cache[ $key ] ) ) {
    		$arcresults = $wpdb->get_results( $query );
    		$cache[ $key ] = $arcresults;
    		wp_cache_set( 'my_get_year_archives', $cache, 'general' );
    	} else {
    		$arcresults = $cache[ $key ];
    	}
    
    	if ( $arcresults ) {
    		$afterafter = $after;
    		foreach ( (array) $arcresults as $arcresult ) {
    			$url = add_query_arg( array( 'meta_key' => $date_field ), get_year_link( $arcresult->year ) );
    			$text = sprintf( '%d', $arcresult->year );
    			if ($show_post_count)
    				$after = ' ('.$arcresult->posts.')' . $afterafter;
    			$output .= get_archives_link( $url, $text, $format, $before, $after );
    		}
    	}
    
    	if ( $echo )
    		echo $output;
    	else
    		return $output;
    }
    
    add_action( 'init', 'my_init' );
    function my_init() {
    	global $wp;
    	$wp->add_query_var( 'meta_key' );
    }
    
    add_action( 'pre_get_posts', 'my_pre_get_posts' );
    function my_pre_get_posts( $query ) {
    	if ( $query->is_year ) {
    		$meta_query = array(
    			array(
    				'key'     => $query->get( 'meta_key' ),
    				'value'   => $query->get( 'year'     ),
    				'compare' => 'LIKE'
    			),
    		);
    
            $query->set( 'meta_query' , $meta_query );
    		$query->set( 'year'       , ''          );
    		$query->set( 'date'       , ''          );
    		$query->set( 'meta_key'   , 'date');
    		$query->set( 'orderby'    , 'meta_value' );
    		$query->set( 'order'      , 'DECS'       );
    	}
    }

    ウィジェット
    <?php my_get_year_archives( array( 'date_field' => 'date', ) ); ?>

    カスタムフィールドの値(YYYY)は取得されているのですが、これをどのように修正したら
    良いのか分からず困っています、解決方法をお教え頂けますと幸いです。

    ※dateにはカスタムフィールド名、カスタムフィールドの値にはYYYY年MM月DD日としています。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • >一覧表示はされますが(値の数字のみ)
    このリンクの URL(1個だけで良いです)と
    WordPress のバージョンと
    WordPress 管理画面[設定|パーマリンク設定|共通設定]の値を
    お知らせください。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「カスタムフィールドによるアーカイブリストについて」には新たに返信することはできません。