[Wp url redirections] Url Redirections - como cambiar la forma en que se muestran las url con Custom Fields - Ejemplo: cambiar de /portfolio/<slug_post> a /<slug_post> #wordpress #slug #php
<?
/**
* Rewrite activity detail page to /explore/<CATEGORY>/<SLUG>
*/
function morton_replace_slug( $post_link, $post, $leavename ) {
if ( 'activity' != $post->post_type || 'publish' != $post->post_status ) {
return $post_link;
}
$portfolio_type_term = get_the_terms( $post->ID, 'activity_category' );
if ($post->post_type == 'activity' && $portfolio_type_term != false) {
$slug = $portfolio_type_term[0]->slug;
$post_link = str_replace( '%activity-category%', $slug, $post_link );
}
return $post_link;
}
add_filter( 'post_type_link', 'morton_replace_slug', 10, 3 );
function archive_rewrite_rules() {
add_rewrite_rule(
'^explore/activities/(.*)/(.*)/?$',
'index.php?post_type=activity&name=$matches[2]',
'top'
);
}
add_action( 'init', 'archive_rewrite_rules' );
<?php
/* En la definicion del custom post:
En los args de register_post_type, en 'rewrite',
poner 'slug' => '%portfolio-category%' (será reemplazado por su correspondiente category)
*/
// esto reemplaza %portfolio-category% por la categoria del custom field
function na_replace_slug( $post_link, $post, $leavename ) {
// si no es de tipo portfolio, o no esta publicado, pasa de largo
if ( 'portfolio' != $post->post_type || 'publish' != $post->post_status ) {
return $post_link;
}
// obtiene la categoria del post
$portfolio_type_term = get_the_terms( $post->ID, 'portfolio-category' );
// si es tipo portfolio, reemplaza
if ($post->post_type == 'portfolio' && $portfolio_type_term!=false) {
$slug = $portfolio_type_term[0]->slug;
$post_link = str_replace( '%portfolio-category%', $slug, $post_link );
}
return $post_link;
}
add_filter( 'post_type_link', 'na_replace_slug', 10, 3 );
// esto corrige para que las pages se sigan cargando normalmente
add_filter( 'request', function( array $query_vars ) {
// para que el administrador y la home funcione normalmente
if ( is_admin() || empty($query_vars) )
return $query_vars;
// si es una pagina, normal
if (isset($query_vars['pagename']))
return $query_vars;
// si es un custom post, normal
if ( isset($query_vars['post_type']) && ($query_vars['post_type'] == 'portfolio') )
return $query_vars;
// y si no, pongo en pagename lo qe me viene en portfolio-category
$query_vars['pagename'] = $query_vars['portfolio-category'];
$query_vars['portfolio-category'] = '';
return $query_vars;
});