permalinks personalizados para el archivo de categorías (base personalizada y sin slug principal)

3

Para la taxonomía predeterminada, es decir, categoría, quiero enlaces permanentes personalizados con

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

Por ejemplo: si tengo categorías

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

así que quiero enlaces permanentes 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

Estoy usando el siguiente código ... Resuelvo el problema (ii) pero no el problema (i), es decir, la 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, ayúdame en esto. Gracias de antemano

    
pregunta terminator 08.09.2018 - 13:44

2 respuestas

0

Todo lo que tiene que hacer para lograr esto es modificar los argumentos de taxonomía category usando register_taxonomy() nuevamente en el gancho init después de que se haya registrado la taxonomía category . Esto se puede hacer con cualquier taxonomía como en el siguiente fragmento de código.

Código para taxonomías en general (código para este caso de uso a continuación):

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:

Vaya a Settings->Permalinks y presione "Guardar cambios" para eliminar las reglas de reescritura. No es necesario filtrar los enlaces de términos, agregar reglas de reescritura o cualquier otra cosa.

Para responder a tu pregunta específicamente:

Para hacer esto con las taxonomías principales de WP como category y post_tag , debemos tener en cuenta la configuración del permalink de Categoría y Etiqueta en Settings->Permalinks . Lo que no se muestra en el ejemplo anterior. La mejor forma de hacerlo es en realidad la forma más sencilla.

Código para este caso de uso:

Opción 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 );

Todo lo que tienes que hacer es establecer category en permalinks no jerárquicos, y establecer with_front en falso tanto en category como en post_tag . luego establece tus enlaces permanentes en Settings->Permalinks como en la imagen a continuación ;)

Opción2:

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);

Enestecaso,loquetienesquehaceresestablecercategoryenpermalinksnojerárquicos(comoenlaOpción1),yestablecerwith_frontentruetantoencategorycomoenpost_tag.Luego,establezcasusenlacespermanentesenSettings->Permalinkscomoenlaimagenacontinuación,teniendoencuentaquecualquieretiquetadetextosinformatoquecoloqueantesdelaprimeraetiquetadereescritura(%...%)delaconfiguraciónPOSTPERMALINKapareceráantesdelabasedeenlacepermanentedecat/tag.Siseestableceen/post/%...%/%...%/%...%/,estaeslamejoropción,sinduda.

    
respondido por el noahmason 16.09.2018 - 22:03
-1

si agregará ID de publicación en la URL en cualquier lugar, entonces será fácil, de lo contrario, el título de su publicación debe ser único. Así que obtén la publicación completa por título y usa la función add_rewrite_rule .

    
respondido por el David Corp 13.09.2018 - 10:56

Lea otras preguntas en las etiquetas