回答:
はい、できます。必要なのは、パラメーターをwp_get_archives();
受け入れるためのフィルターを作成することだけですpost_type
。
function my_custom_post_type_archive_where($where,$args){
$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
$where = "WHERE post_type = '$post_type' AND post_status = 'publish'";
return $where;
}
次にこれを呼び出します:
add_filter( 'getarchives_where','my_custom_post_type_archive_where',10,2);
カスタム投稿タイプ別にアーカイブを表示したいときはいつでも、post_type argsを渡すだけです:
$args = array(
'post_type' => 'your_custom_post_type',
'type' => 'monthly',
'echo' => 0
);
echo '<ul>'.wp_get_archives($args).'</ul>';
/%category%/%year%/%monthnum%/%postname%/
。次に、上記のようなフックを使用して/%category%/
、日付だけでなく開始するリンクを変更することができます。
mysite.com/2013/04
が、404にこのリードは、カスタムポストタイプは次の場所にあります。mysite.com/cats
私はと思わせるそのmysite.com/cats/2013/04
リンクがどうあるべきかになりますが、これはまた、あなたが仕事にアーカイブリンクを取得するにはどうすればよい404に解決しますか?
Wordpress開発者からの公式の意見は、カスタム投稿タイプは通常の通常の投稿の仕事をすることを意図したものではなく、日付などの投稿アーカイブが必要な場合、あなたは物事を正しく行っていないということでした投稿フォーマットなどを使用した方が良いでしょう。
カスタム投稿タイプはWebアプリケーションなどを対象としていますが、別の名前(たとえば、ブログとニュースなど)でセカンダリまたはパラレルブログとして機能するカスタム投稿タイプを設定するなどの機能は、機能とは異なりますその実装から生じる他の技術的な問題を意図しており、意味します。
それでもこれに固執していて、カスタムの分類法と投稿形式を使用するだけでは不十分な場合は、functions.phpに書き換えルールを追加し、特定のURLの年/月アーカイブを投稿アーカイブページにリダイレクトしてから、カスタムを確認できます書き換えルールで変数を指定し、別のテンプレートを読み込む場合は、アーカイブページを投稿します。書き換えルールで適切な値を設定してください。
編集 ->この回答は<WP4.4でも機能しますが、カスタム投稿タイプの4.4サポートが含まれるようになりましたwp_get_archives()
最後に、WordPressのカスタム投稿タイプの日付ベースのアーカイブのためのシンプルで迅速かつ簡単なソリューションがあります!これは、WP Core Tracに記録されている長年の問題です。
まだ解決されていませんが、Tracへの貢献者の1人がGitHubにシンプルなプラグインを投稿しました。これにより、CPTの日付ベースのアーカイブを作成できます。
このプラグインをインストールした後、または関数のコードを手動で追加した後、CPTのアーカイブを使用します。
<?php wp_get_archives_cpt( 'post_type=custom_post_type' ); ?>
この新しい関数wp_get_archives_cpt
は標準と同じように機能するwp_get_archives
ため、受け入れる通常の引数を使用できます。ただし、カスタムの投稿タイプ名引数を追加できるようになるだけです。
taikenの回答にこれを追加するのに十分な評判はありません。
しかし、彼の答えは私にとってはうまくいったが、リンクは「localhost / date / 2010」形式であると付け加えたかった。一方、「localhost / postslug / 2010」形式が必要でした。wp_get_archivesの出力で文字列置換を使用して、これを修正できました。
したがって、パーマリンクの設定方法に応じて、このコードは404問題を修正し、リンクをカスタム投稿タイプのパーマリンク構造にリダイレクトします。
$yearly_archive = wp_get_archives(array( 'type' => 'yearly', 'post_type' => '<your post type name>', 'echo' => '0') );
$blog_url = get_bloginfo('url');
echo str_replace(($blog_url . '/date'), ($blog_url . '<your post type slug>'),$yearly_archive);
takienの投稿に追加することはできませんので、私がやらなければならないことは次のとおりです。
functions.php
add_action('init', 'my_year_archive_rewrites');
function my_year_archive_rewrites() {
add_rewrite_rule('resource/news/([0-9]{4})/page/?([0-9]{1,})/?', 'index.php?post_type=news&year=$matches[1]&paged=$matches[2]', 'top');
add_rewrite_rule('resource/news/([0-9]{4})/?', 'index.php?post_type=news&year=$matches[1]', 'top');
}
add_filter('getarchives_where', 'my_custom_post_type_archive_where', 10, 2);
function my_custom_post_type_archive_where($where,$args){
$post_type = isset($args['post_type']) ? $args['post_type'] : 'post';
return "WHERE post_type = '$post_type' AND post_status = 'publish'";
}
add_filter('year_link', 'my_year_link');
function my_year_link($link) {
global $wp_rewrite;
if(true) { // however you determine what archive you want
$link = str_replace($wp_rewrite->front, '/resource/news/', $link);
}
return $link;
}
wp_get_archives()を呼び出す
wp_get_archives(array('post_type'=>'news', 'type'=>'yearly'));