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

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