Como você exibe os arquivos de um Tipo de postagem personalizado por ano e mês?
Como você exibe os arquivos de um Tipo de postagem personalizado por ano e mês?
Respostas:
Sim você pode. Tudo que você precisa é criar um filtro para wp_get_archives();
que ele aceite o post_type
parâmetro:
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;
}
então chame isso:
add_filter( 'getarchives_where','my_custom_post_type_archive_where',10,2);
Sempre que você desejar exibir o arquivo morto por tipo de postagem personalizado, basta passar os argumentos post_type:
$args = array(
'post_type' => 'your_custom_post_type',
'type' => 'monthly',
'echo' => 0
);
echo '<ul>'.wp_get_archives($args).'</ul>';
/%category%/%year%/%monthnum%/%postname%/
. Em seguida, pode ser possível usar um gancho semelhante ao acima, modificar os links para começar em /%category%/
vez da data.
mysite.com/2013/04
mas isso leva a um 404. O tipo de postagem personalizada está disponível em: o mysite.com/cats
que me faz pensar mysite.com/cats/2013/04
que seria o link, mas isso também resolve o 404. Como você faz com que os links de arquivamento funcionem?
Você não sabe, a linha oficial dos desenvolvedores do Wordpress era que os tipos de postagem personalizados não tinham a intenção de fazer o trabalho de postagens normais normais e que, se você precisar publicar arquivos de datas etc., não estará fazendo as coisas corretamente, e é melhor usar formatos de postagem etc.
Os tipos de postagem personalizados destinam-se a aplicativos da Web etc., enquanto que executar algo como configurar um tipo de postagem personalizado que atue como um blog secundário ou paralelo com um nome diferente, por exemplo, blog x notícias, com as mesmas habilidades, não é o que o recurso era. destinado e significaria outros problemas técnicos decorrentes de sua implementação.
Se você ainda insistir nisso, e o simples uso de taxonomias e formatos de postagem personalizados não for suficiente, adicione regras de reescrita em functions.php e redirecione os arquivos de ano / mês em determinados URLs para a página de pós-arquivo e verifique a customização publique a página de arquivamento se você especificou variáveis nas regras de reescrita e carregou um modelo diferente, certificando-se de que nas regras de reescrita defina os valores apropriados.
EDIT -> enquanto esta resposta ainda funciona para <WP4.4, pois o suporte ao 4.4 para tipos de postagem personalizados agora está incluído nowp_get_archives()
Finalmente, existe uma solução simples, rápida e fácil para arquivos baseados em datas de tipos de postagem personalizados no WordPress! Esse é um problema de longa data registrado aqui no WP Core Trac.
Ainda não foi resolvido, mas um dos colaboradores do Trac postou um plugin simples no GitHub que permitirá que você tenha arquivos baseados em datas para CPTs.
Após instalar este plug-in ou adicionar o código para suas funções manualmente, você pode usar arquivos para CPTs como:
<?php wp_get_archives_cpt( 'post_type=custom_post_type' ); ?>
Observe que essa nova função wp_get_archives_cpt
funciona da mesma forma que o padrão, wp_get_archives
para que você possa usar qualquer um dos argumentos regulares que ela aceita. No entanto, ele simplesmente adiciona a capacidade de você poder adicionar um argumento de nome de tipo de postagem personalizado.
Não há reputação suficiente para adicionar isso à resposta do taiken, desculpe.
No entanto, queria acrescentar que sua resposta funcionou para mim, no entanto, os links estavam no formato 'localhost / date / 2010'. Considerando que eu precisava do formato 'localhost / postslug / 2010'. Consegui consertar isso usando uma sequência de substituição na saída de wp_get_archives.
Portanto, dependendo de como os seus links permanentes estão definidos, esse código corrigirá o problema 404 e redirecionará os links para a estrutura do link permanente do tipo de postagem personalizada:
$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);
Não é possível adicionar à postagem de takien, então aqui está o que acabei fazendo:
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;
}
Chamando wp_get_archives ()
wp_get_archives(array('post_type'=>'news', 'type'=>'yearly'));