Remover o tipo de post personalizado slug do URL

14

Não encontrei uma resposta útil para isso. Estou ciente dos problemas de conflito e todos os problemas que isso pode causar, estou curioso para saber se é possível não sugerido. Isso exigirá que o WP reescreva, eu sei disso.

Basicamente, digamos que tenhamos um CPT de "eventos". Quero que a página de um único evento tenha o URL enlace e NÃO enlace . Alguma idéia de como fazer isso?

    
por Rob Bennet 28.09.2012 / 05:33

4 respostas

9

É assim que você pode fazer a primeira parte do trabalho - se livrar do slug CPT no link do post (por exemplo, tipo de postagem de notícias).

function df_custom_post_type_link( $post_link, $id = 0 ) {  

    $post = get_post($id);  

    if ( is_wp_error($post) || 'news' != $post->post_type || empty($post->post_name) )  
        return $post_link;  

    return home_url(user_trailingslashit( "$post->post_name" ));  
}
add_filter( 'post_type_link', 'df_custom_post_type_link' , 10, 2 );

Agora deve haver uma regra de reescrita para 'news', porque você receberá um erro 404.

Adicione a regra de regravação assim:

function df_custom_rewrite_rule() {
    add_rewrite_rule('(.*?)$', 'index.php?news=$matches[1]', 'top');
}
add_action('init', 'df_custom_rewrite_rule');

Em seguida, precisaremos liberar as regras de reescrita, então vá para Configurações - Permalinks e salve as alterações.

    
por Bartosz 13.12.2012 / 15:56
4

Você pode experimentar este plugin ( enlace ) para remover a lesma , mas só vai funcionar se a estrutura do permalink for "/% postname% /

    
por swtshweta 13.12.2012 / 15:56
0

Você sempre pode conectar-se a "parse_request" para executar uma verificação para ver se existe um tipo personalizado com o nome solicitado e, em seguida, modificar os query_vars de maneira apropriada. Você precisará de algo ao longo das linhas de resposta do @ Bartosz para gerar o permalink além disso:

 add_filter('parse_request', "t21_parse_request" , 1, 1);

 function t21_parse_request($wbobj)
 {
      $vars = $wpobj->query_vars;
      $slug = $query_vars['pagename'];

      $posts = get_posts(array(
           "post_type" => "event",
           "post_name" => $slug
      ));

      if($posts)
      {
           //we know your "event" entry exists so we now amend the query_vars
           //first unset the 'page' and 'pagename'
           unset($query_vars['page']);
           unset($query_vars['pagename'];

           //now rebuild the query_vars
           $query_vars['post_type'] = "event"; //CPT name
           $query_vars['name'] = $slug;
           $query_vars['event'] = $slug //again - this constructs the "event=myevent" query string
      }
      else
      {
           //just return $wpobj since we know that there is no "event"
           return $wpobj;
      }
 }

Isso supõe, no entanto, que você não terá nenhum nome de postagem com o mesmo nome de um postname. Caso contrário, a postagem nunca será exibida, pois corresponderá a um tipo de evento primeiro.

    
por Zakalwe 13.12.2012 / 20:55
0
function register_cpt_type() {
    register_post_type('cpt', array(
        'rewrite' => array("slug" => "/cpt", "with_front" => false),
    ));
}
add_action('init', 'register_cpt_type')

function cpt_rewrite_rule() {
    add_rewrite_rule('(.*?)$', 'index.php?cpt=$matches[1]', 'top');
}
add_action('after_theme_setup', 'cpt_rewrite_rule');

flush / recycle url reescreve e edita o arquivo .htaccess

RewriteRule ^cpt/(.+)$ /$1 [R=301,L]
    
por kristina childs 13.12.2012 / 19:37