permalinks personalizados para o arquivo de categorias (base personalizada e sem slug pai)

3

Para a taxonomia padrão, por exemplo, eu quero permalinks personalizados com

i) base = "post/c"  and 
ii) without any parent slug

Por exemplo: se eu tiver categorias

cat-a
   subcat-a1
   subcat-a2
cat-b
   subcat-a2
   subcat-a2

então eu quero permalinks como

example.com/post/c/cat-a example.com/post/c/subcat-a1 example.com/post/c/subcat-a2 example.com/post/c/cat-b example.com/post/c/subcat-b1 example.com/post/c/subcat-b2

Estou usando o código a seguir. Eu resolvo o problema (ii), mas não o problema (i) ou seja, base 'post / c'

add_filter('term_link', 'ojasya_no_term_parents', 1000, 3);
function ojasya_no_term_parents($url, $term, $taxonomy) {
if($taxonomy == 'category'){
$term_nicename = $term->slug;
$url = trailingslashit(get_option( 'home' )) . user_trailingslashit( $term_nicename, 'category' );
}
return $url;
}
// Add our custom post cat rewrite rules
add_filter('rewrite_rules_array', 'ojasya_no_category_parents_rewrite_rules');
function ojasya_no_category_parents_rewrite_rules($rules) {
$new_rules = array();
$terms = get_terms( array(
'taxonomy' => 'category',
'post_type' => 'post',
'hide_empty' => false,
));
if($terms && !is_wp_error($terms)){
foreach ($terms as $term){
$term_slug = $term->slug;
$new_rules[$term_slug.'/?$'] = 'index.php?category='.$term_slug;
$new_rules[$term_slug.'/page/([0-9]{1,})/?$'] = 'index.php?category='.$term_slug.'&paged=$matches[1]';
$new_rules[$term_slug.'/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category='.$term_slug.'&feed=$matches[1]';
}
}
return $new_rules + $rules;
}

Por favor me ajudem nisso. Agradecemos antecipadamente

    
por terminator 08.09.2018 / 13:44

2 respostas

0

Tudo o que você precisa fazer para conseguir isso é modificar os argumentos category taxonomy usando register_taxonomy() novamente no gancho init depois que a category taxonomy tiver sido registrada. Isso pode ser feito com qualquer taxonomia, como no snippet a seguir.

Código para taxonomias em geral (código para este caso de uso abaixo):

function mytheme_change_category_args() {

    // Get the taxonomy.
    $category = get_taxonomy( 'category' );

    // change the rewrite slug on the taxonomy itself.
    // Note that if your permalink structure is currently 
    // "/post/%postname%", this should be changed to "c", and 
    // "with_front" should be set to "true".
    $category->rewrite['slug'] = 'post/c'; 

    // do not use the text that comes before the first 
    // rewrite tag (%...%) in the permalink settings, unless the
    // setting is "/post/%postname%" as explained above. 
    $category->rewrite['with_front'] = false; 

    // Keep the category hierarchical, but make the permalinks flat.
    $category->rewrite['hierarchical'] = false;

    // register_taxonomy() is used to create OR modify a taxonomy. 
    // make sure the taxonomy object is cast to an array.
    register_taxonomy( 'category', 'post', (array) $category ); 

}

// Make sure this happens after the original tax is init. Priority 10 is fine.
add_action( 'init', 'mytheme_change_category_args', 10 );

Nota:

Vá para Settings->Permalinks e clique em "Salvar alterações" para liberar as regras de reescrita. Não há necessidade de filtrar links de termos, adicionar regras de reescrita ou qualquer outra coisa.

Para responder especificamente à sua pergunta:

Para fazer isso com as taxonomias do WP principal, como category e post_tag , temos que ter em mente as configurações de permalink de categoria e tag em Settings->Permalinks , o que o exemplo acima não faz. A melhor maneira de fazer isso é realmente a maneira mais simples também.

Código para este caso de uso:

Opção 1:

function mytheme_change_category_args() {

    $category = get_taxonomy( 'category' );
    $post_tag = get_taxonomy( 'post_tag' );

    $category->rewrite['hierarchical'] = false;
    $category->rewrite['with_front'] = false;
    $post_tag->rewrite['with_front'] = false;

    register_taxonomy( 'category', 'post', (array) $category ); 
    register_taxonomy( 'post_tag', 'post', (array) $post_tag ); 

}

add_action( 'init', 'mytheme_change_category_args', 50 );

Tudo o que você precisa fazer é definir category como permalinks não hierárquicos e definir with_front como falso nos category e post_tag . Em seguida, defina seus permalinks em Settings->Permalinks , como na imagem abaixo ;)

Opção2:

functionmytheme_change_category_args(){$category=get_taxonomy('category');$post_tag=get_taxonomy('post_tag');$category->rewrite['hierarchical']=false;$category->rewrite['with_front']=true;$post_tag->rewrite['with_front']=true;register_taxonomy('category','post',(array)$category);register_taxonomy('post_tag','post',(array)$post_tag);}add_action('init','mytheme_change_category_args',50);

Nessecaso,oquevocêprecisafazerédefinircategorycomopermalinksnãohierárquicos(comonaOpção1)edefinirwith_frontcomotrueemcategoryepost_tag.Emseguida,definaseuspermalinksemSettings->Permalinkscomonaimagemabaixo,lembrandoquequalquertagdetextosimplescolocadoantesdaprimeiratagdereescrita(%...%)daconfiguraçãoPOSTPERMALINKapareceráantesdabasepermanentedecat/tag.Seestiverdefinidocomo/post/%...%/%...%/%...%/,estaéamelhoropção,comcerteza.

    
por noahmason 16.09.2018 / 22:03
-1

Se você adicionar o ID do post no URL em qualquer lugar, será fácil, caso contrário, o título do post deverá ser exclusivo. Portanto, obtenha post completo por título e use a função add_rewrite_rule .

    
por David Corp 13.09.2018 / 10:56