Eliminar la barra de tipo de publicación personalizada de la URL

14

No he encontrado una respuesta útil para esto. Soy consciente de los problemas de conflicto y de todos los problemas que esto puede causar, tengo curiosidad por si es POSIBLE NO SUGERIDO. Esto requerirá la reescritura de WP, lo sé mucho.

Básicamente, digamos que tenemos un CPT de "eventos". Quiero tener una sola página de evento con la URL enlace y NO enlace . ¿Alguna idea sobre cómo hacerlo?

    
pregunta Rob Bennet 28.09.2012 - 05:33

4 respuestas

9

Así es como puede hacer la primera parte del trabajo: deshacerse de la babosa CPT en el enlace de la publicación (por ejemplo, tipo de publicación de noticias).

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

Ahora deben ir las reglas de reescritura para 'noticias', porque obtendrá un error 404.

Agregue la regla de reescritura como esta:

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

Luego tendremos que vaciar las reglas de reescritura, así que vaya a Configuración - Permalinks y guarde los cambios.

    
respondido por el Bartosz 13.12.2012 - 15:56
4

Puede probar este complemento ( enlace ) para eliminar la bala , pero solo funcionará si la estructura del enlace permanente es "/% postname% /

    
respondido por el swtshweta 13.12.2012 - 15:56
0

Siempre se puede enlazar con "parse_request" para realizar una verificación para ver si existe un tipo personalizado con el nombre solicitado y luego modificar las query_vars de manera apropiada. Necesitará algo similar a la respuesta de @Bartosz para generar el enlace permanente, además:

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

Sin embargo, esto supone que no tendrás ningún nombre de publicación con el mismo nombre que un nombre de correo, de lo contrario, la publicación nunca aparecerá ya que coincide con un tipo de evento primero.

    
respondido por el 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');

la url de lavado / reciclaje vuelve a escribir, luego edita .htaccess

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

Lea otras preguntas en las etiquetas