質問: wordpressの「アーカイブ」ウィジェットのレイアウト(サイドバー)を '年'で '月'で表示するにはどうすればよいですか 私は現在アーカイブをこのようにして表示している私のサイドバーarchiveのデフォルトウィジェットを使っています。mar 2018 feb 2018 jan 2018 しかし、私はそれがこのように表示したいのですが:2018 march february january 2017 december november october 月がリンクしているところ。どうやってそれを達成できますか? sidebar.phpファイルに何をしますか?
回答: 元のウィジェットの出力を修正するのはかなり難しいでしょう。アーカイブを印刷するためにwp_get_archives関数を使用しており、この出力を修正する簡単な方法はありません。あなたはget_archives_linkを使うことを試みることができます、しかしそれは少し面倒になることができます。それを言って...他の、はるかに簡単な方法があります - あなた自身のウィジェットを書くこと。class wp_widget_archivesbyyear extends wp_widget { public function __construct() { $widget_ops = array( 'classname' => 'widget_archive_by_year', 'description' => __( 'a monthly archive of your site&#8217;s posts displayed by year.' ), 'customize_selective_refresh' => true, ); parent::__construct('archives_by_year', __('archives by year'), $widget_ops); } public function widget( $args, $instance ) { global $wpdb; $title = apply_filters( 'widget_title', empty( $instance['title'] ) ? __( 'archives' ) : $instance['title'], $instance, $this->id_base ); echo $args['before_widget']; if ( $title ) { echo $args['before_title'] . $title . $args['after_title']; } $years = $wpdb->get_col("select distinct year(post_date) from {$wpdb->posts} where post_type = 'post' and post_status = 'publish' order by post_date desc"); if ( $years ) : ?> <ul class="years-list"> <?php foreach ( $years as $year ) : $months = $wpdb->get_col( $wpdb->prepare("select distinct month(post_date) from {$wpdb->posts} where post_type='post' and post_status='publish' and year(post_date) = %d order by post_date asc", $year)); ?> <li class="year"> <a href="<?php echo get_year_link($year); ?>"><?php echo $year ?></a> <ul class="months-list"> <?php foreach ( $months as $month ) : $dateobj = datetime::createfromformat('!m', $month); ?> <li class="month"> <a href="<?php echo get_month_link($year, $month); ?>"><?php echo $dateobj->format('f'); ?></a> </li> <?php endforeach; ?> </ul> </li> <?php endforeach; ?> </ul> <?php endif; echo $args['after_widget']; } public function update( $new_instance, $old_instance ) { $instance = $old_instance; $new_instance = wp_parse_args( (array) $new_instance, array( 'title' => '') ); $instance['title'] = sanitize_text_field( $new_instance['title'] ); return $instance; } public function form( $instance ) { $instance = wp_parse_args( (array) $instance, array( 'title' => '') ); $title = sanitize_text_field( $instance['title'] ); ?> <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('title:'); ?></label> <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo esc_attr($title); ?>" /></p> <?php } } ps。私はそのコードをテストしていないので、いくつかのタイプミスを含めることができます。