moonorongo
4/26/2017 - 11:21 AM

[Wp url redirections] Url Redirections - como cambiar la forma en que se muestran las url con Custom Fields - Ejemplo: cambiar de /portfolio

[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

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