カスタム投稿アーカイブをページに次の形式で表示する必要があります。
それで、私は2つの関数を持っています。それらは連続して呼ばれることになっていました:
function show_monthly_archive( $post_type ) {
$current_year_args = array(
'type' => 'monthly',
'limit' => '12',
'format' => 'html',
'before' => '',
'after' => '',
'show_post_count' => false,
'echo' => 1,
'order' => 'DESC',
'post_type' => $post_type
);
echo '<ul>';
wp_get_archives( $current_year_args );
echo '</ul>';
}
function show_yearly_archive( $post_type ) {
$previous_years_args = array(
'type' => 'yearly',
'limit' => '',
'format' => 'html',
'before' => '',
'after' => '',
'show_post_count' => false,
'echo' => 1,
'order' => 'DESC',
'post_type' => $post_type
);
echo '<ul>';
wp_get_archives( $previous_years_args );
echo '</ul>';
}
それから私はそれをフィルタリングする必要がありますので、最初の関数は現在の年のアーカイブのみを表示し、2番目の関数は現在の年を表示しません。
これが可能であった方法:
add_filter( 'getarchives_where', 'filter_monthly_archives', 10, 2 );
function filter_monthly_archives($text, $r) {
return $text . " AND YEAR(post_date) = YEAR (CURRENT_DATE)";
}
そして年間アーカイブのために" AND YEAR(post_date) = YEAR (CURRENT_DATE)" with " AND YEAR(post_date) < YEAR (CURRENT_DATE)"
を置き換えます
ただし、フィルタはグローバルに適用され、適用すると両方のフィルタに影響します。
これを回避する方法(特定のwp_get_archives呼び出しに特定のフィルタを適用する)または上記のようにアーカイブ出力を達成する別の方法はありますか?
カスタムパラメータを使用します。wpse__current_year
と呼びます。これは、true
(は現在の年を含みます)およびfalse
(は現在の年を除外します) 。それを組み込むことができます
function show_monthly_archive( $post_type )
{
$current_year_args = array(
'type' => 'monthly',
'limit' => '12',
'format' => 'html',
'before' => '',
'after' => '',
'show_post_count' => false,
'echo' => 1,
'order' => 'DESC',
'post_type' => $post_type,
'wpse__current_year' => true
);
echo '<ul>';
wp_get_archives( $current_year_args );
echo '</ul>';
}
function show_yearly_archive( $post_type )
{
$previous_years_args = array(
'type' => 'yearly',
'limit' => '',
'format' => 'html',
'before' => '',
'after' => '',
'show_post_count' => false,
'echo' => 1,
'order' => 'DESC',
'post_type' => $post_type,
'wpse__current_year' => false
);
echo '<ul>';
wp_get_archives( $previous_years_args );
echo '</ul>';
}
それに応じてフィルタを修正することができます
add_filter( 'getarchives_where', 'filter_monthly_archives', 10, 2 );
function filter_monthly_archives( $text, $r )
{
// Check if our custom parameter is set, if not, bail early
if ( !isset( $r['wpse__current_year'] ) )
return $text;
// If wpse__current_year is set to true
if ( true === $r['wpse__current_year'] )
return $text . " AND YEAR(post_date) = YEAR (CURRENT_DATE)";
// If wpse__current_year is set to false
if ( false === $r['wpse__current_year'] )
return $text . " AND YEAR(post_date) < YEAR (CURRENT_DATE)";
return $text;
}