0

WordPress、あなたは時々私を怒らせます!

ここ数時間私がやろうとしてきたことは、サイドバーの下にアーカイブをカスタムの日付形式で表示できるようにすることです (設定のグローバル オプションを変更せずに)。 the_date(); を使用するのと同じくらい簡単です。たとえば、2013 年 1 月を代わりに 1 月 13 日にしたいのですが、1 つの列に 1 年、もう 1 つの列に 1 年を置きます。

このコードを適応させることで、カスタムの日付フォーマットをうまく行うことができました: http://www.wpbeginner.com/wp-themes/how-to-customize-the-display-of-wordpress-archives-in-your-サイドバー/これに:

function sidebar_archive_list($arclistno = "24") {

    global $wpdb;

        $limit = 0;

        $year_prev = null;

        $months = $wpdb->get_results("SELECT DISTINCT MONTH( post_date ) AS month , YEAR( post_date ) AS year, COUNT( id ) as post_count FROM $wpdb->posts WHERE post_status = 'publish' and post_date <= now( ) and post_type = 'post' GROUP BY month , year ORDER BY post_date DESC");

    foreach($months as $month) :
        $year_current = $month->year;

        if ($year_current != $year_prev){
             if ($year_prev != null){ }
        }
    ?>

    <a href="<?php bloginfo('url') ?>/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>" title="<?php echo date("F Y", mktime(0, 0, 0, $month->month, 1, $month->year)); ?>"><?php echo date("M y", mktime(0,0,0,$month->month,1,$month->year)); ?></a>

<?php 

    $year_prev = $year_current;

    if(++$limit >= $arclistno) { break; }

    endforeach; 

}

それは問題なく機能しました。

この関数から返されたコンテンツを 2 つの個別の列 div に分割しようとしたときに問題が発生しました。wp_get_archives('echo=0'); から取得できるように、関数を配列にする必要があると思います。(およびいくつかの余分なコード) しかし、私の PHP のスキルは優れているとは言えず、同じ種類のものを再作成する方法がよくわかりません。私はそれが次のように見えるべきだと思います:

array(3) { [0]=> string(86) "January 2013"
           [1]=> string(90) "September 2012"
           [2]=> string(82) "March 2012"
}

var_dumped の場合。また、何らかの理由でアンカー リンクも日付を囲みますが、印刷するのではなく、エコーすることを覚えておく価値があります。

コンテンツ分割に使用しているコードは次のとおりです。

<?php

    $links = print(sidebar_archive_list());
    $archive_n = count($links);
        for ($i=0;$i<$archive_n;$i++):
            if ($i<$archive_n/2):
                $archive_left = $archive_left.'<li>'.$links[$i].'</li>';
            elseif ($i>=$archive_n/2):
                $archive_right = $archive_right.'<li>'.$links[$i].'</li>';
    endif;
        endfor;

?>                  

<div class="group">
    <ul class="sb_double_column_list alignleft">
        <?php echo $archive_left;?>
 </ul>

 <ul class="sb_double_column_list alignright">
        <?php echo $archive_right;?>
 </ul>
</div>

どんな助けやアドバイスも心から感謝します。私はこれで本当にマンネリです!

4

1 に答える 1

0

少しいじった後、wp_get_archivesを独自のカスタム関数に変更して、wp_get_archivesを単独で使用しようとしたときと同様の方法でコードを作成する列に渡すことができました。

コードは次のとおりです。

function sidebar_archive_list($args = '') { 

global $wpdb, $wp_locale; 

$defaults = array(
    'limit' => '24',
    'format' => 'html', 'before' => '',
    'after' => '', 'show_post_count' => false,
    'echo' => 0, 'order' => 'DESC',
); 

$r = wp_parse_args( $args, $defaults ); 
extract( $r, EXTR_SKIP );


if ( '' != $limit ) {
    $limit = absint($limit);
    $limit = ' LIMIT '.$limit;
}

$order = strtoupper( $order );
if ( $order !== 'ASC' ) 
    $order = 'DESC'; 


//filters
$where = apply_filters( 'getarchives_where', "WHERE post_type = 'post' AND post_status = 'publish'", $r ); 

$join = apply_filters( 'getarchives_join', '', $r );

$output = '';

    $query = "SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date $order $limit";

    $key = md5($query);

    $cache = wp_cache_get( 'wp_get_archives' , 'general');

    if ( !isset( $cache[ $key ] ) ) { 
        $arcresults = $wpdb->get_results($query); 
        $cache[ $key ] = $arcresults;
        wp_cache_set( 'wp_get_archives', $cache, 'general' );
    } else {
        $arcresults = $cache[ $key ];
    }


    if ( $arcresults ) { 
        $afterafter = $after; 

        foreach ( (array) $arcresults as $arcresult ) { 

            $url = get_month_link( $arcresult->year, $arcresult->month ); 

            $year = date("y", strtotime($arcresult->year));

            $text = sprintf(__('%1$s %2$d'), $wp_locale->get_month_abbrev($wp_locale->get_month($arcresult->month)), $year); 

            if ( $show_post_count ) 
                $after = '&nbsp;('.$arcresult->posts.')' . $afterafter;
            $output .= get_archives_link($url, $text, $format, $before, $after);
        }
    }

if ( $echo ) // If "echo" has been defined as having a value (e.g: 1) then echo $output, if it has no value (0) then return the value.
    echo $output;
else
    return $output;
}

にドロップして、functions.phpを使用するだけsidebar_archive_list()です。この関数は月単位の表示のみをサポートしていることに注意してください。デフォルトは からわずかに変更されていwp_get_archivesます。そのため、エコーするのではなく配列を返します。デフォルトの制限は 24 です (1 列下に 12 か月、またはその逆)。

于 2013-01-11T21:23:58.797 に答える