Arquivos de tipo de postagem personalizados por ano e mês?

16

Como você exibe os arquivos de um tipo de postagem personalizada por ano & Mês?

    
por Dan Lee 16.11.2011 / 16:07

5 respostas

16

Sim, você pode. Tudo o que você precisa é criar um filtro para wp_get_archives(); , por isso aceita o parâmetro 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;  
}

ligue para isso:

add_filter( 'getarchives_where','my_custom_post_type_archive_where',10,2);

Sempre que você quiser exibir o arquivo 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>';
    
por takien 12.02.2012 / 18:04
6

Você não sabe, a linha oficial dos desenvolvedores do Wordpress era que os tipos de post personalizado não eram destinados a fazer o trabalho de postagens comuns normais, e que se você precisa postar arquivos de datas etc, então você não está fazendo as coisas corretamente, e é melhor você usar os formatos de postagem, etc.

Os tipos de postagens personalizadas são destinados a aplicativos da Web, etc., enquanto se faz algo como a configuração de um tipo de post personalizado que atua como um blog secundário ou paralelo com um nome diferente, por exemplo, blog vs news, com as mesmas habilidades, não é o objetivo do recurso, e significaria outros problemas técnicos decorrentes de sua implementação.

Se você ainda insistir nisso, e simplesmente usar taxonomias personalizadas e formatos de postagem não for suficiente, você pode adicionar regras de reconfiguração em functions.php e redirecionar arquivos de ano / mês em determinados URLs para a página de postagem de arquivamento e, em seguida, verificar na página personalizada de arquivamento de postagens, se você especificou variáveis nas regras de regravação e carregou um modelo diferente, certificando-se de que as regras de regravação definam os valores apropriados.

    
por Tom J Nowell 16.11.2011 / 16:22
5

EDITAR - > enquanto esta resposta ainda funciona para < WP4.4, já que o suporte 4.4 para Tipos de Postagens Personalizadas agora está incluído em wp_get_archives()

Finalmente, há uma solução simples, rápida e fácil para arquivos baseados em data de tipos de postagem personalizados no WordPress! Este tem sido um problema de longa data que é 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 data para CPTs.

Depois de instalar este plugin, ou adicionar manualmente o código para suas funções, use arquivos para CPTs como:

<?php wp_get_archives_cpt( 'post_type=custom_post_type' ); ?>

Observe que esta 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 aceita. No entanto, ele simplesmente adiciona a capacidade de você poder adicionar um argumento de nome de tipo de postagem personalizado.

    
por Trevor 02.01.2015 / 23:08
2

Não há reputação suficiente para adicionar isso à resposta do taiken, desculpe.

No entanto, queria acrescentar que a 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 corrigir isso usando uma string replace na saída de wp_get_archives.

Então, dependendo de como seus permalinks são definidos, esse código consertará o problema 404 e redirecionará os links para a estrutura de permalink de 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);
    
por mrbencowell 12.09.2013 / 10:58
1

Não é possível adicionar à postagem de takien, eis 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'));
    
por pkmatte 17.04.2014 / 18:06