Agregue la extensión .html (punto HTML) a los tipos de publicaciones personalizadas

9

¿Hay alguna manera de agregar la extensión .html a los tipos de publicación personalizados sin el complemento ?

Para las publicaciones, puedo usar /%postname.html en la configuración del enlace permanente

Para las páginas que puedo usar:

add_action('init', 'change_page_permalink', -1);
function change_page_permalink() {
    global $wp_rewrite;
    if ( strstr($wp_rewrite->get_page_permastruct(), '.html') != '.html' ) 
        $wp_rewrite->page_structure = $wp_rewrite->page_structure . '.html';
}

¿Para tipos de publicaciones personalizadas?

¿Hay algún fragmento de código similar al de arriba que me permita cambiar o agregar .html en la URL de tipo de publicación personalizada?

    
pregunta user983248 19.07.2012 - 15:47

3 respuestas

7

Esto parece funcionar:

Crea las reglas de reescritura como post-type/post-name.html . Puedes usar matrices para crear las reglas para solo un conjunto de tipos de publicaciones en lugar de hacerlo para todas ellas.

add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules ) {
    $new_rules = array();
    foreach ( get_post_types() as $t )
        $new_rules[ $t . '/([^/]+)\.html$' ] = 'index.php?post_type=' . $t . '&name=$matches[1]';
    return $new_rules + $rules;
}

Formato de la nueva estructura de enlace permanente para estos tipos de publicaciones.

add_filter( 'post_type_link', 'custom_post_permalink' ); // for cpt post_type_link (rather than post_link)
function custom_post_permalink ( $post_link ) {
    global $post;
    $type = get_post_type( $post->ID );
    return home_url( $type . '/' . $post->post_name . '.html' );
}

Y luego deja de redireccionar las URL canónicas para eliminar la barra diagonal. Es posible que necesite más trabajo, ya que probablemente querrá mantener la redirección para la mayoría de los casos.

add_filter( 'redirect_canonical', '__return_false' );

Como han dicho otros por aquí, después de hacer lo anterior, tendrás que limpiar las reglas, y eso es posible visitando la página de administración options-permalink.php en Dashboard -> Settings -> Permalinks .

    
respondido por el vmassuchetto 28.07.2012 - 06:41
4

Podría agregar una regla de reescritura para esto que sustituya a los enlaces permanentes incorporados, por ejemplo. para un tipo de mensaje personalizado "producto" ...

add_action('init', 'add_html_ext_to_custom_post_types');
function add_html_ext_to_custom_post_types() {
    add_rewrite_rule('^product/([^/]+)\.html', 'index.php?product=$matches[1]', 'top');
}

(No olvides vaciar tus reglas ya sea volviendo a guardar tus enlaces permanentes o usando flush_rules en la forma en que @toscho señala arriba).

Advertencias

  • No creo que las funciones como the_permalink() usarían esto, por lo que es posible que tengas que agregar un filtro para post_link para capturar esos enlaces. También puede agregar al filtro redirect_canonical para redirigir los enlaces permanentes predeterminados, de modo que / product / foo y / product / foo / redirect a /product/foo.html.
  • Deberá agregar reescrituras adicionales para otras URL que usó su sitio, como las URL de fuentes, páginas subsiguientes, trackbacks, etc. El código anterior solo funcionará para la página principal de Tipo de publicación personalizada.
respondido por el Matthew Boynes 27.07.2012 - 17:45
2

Si prefiere un complemento de WordPress para que se encargue del trabajo por usted, consulte Permalinks personalizados de tipo de publicación en el repositorio de complementos de WordPress. Probado en WordPress 3.4.1 y funciona perfectamente.

Después de activar el complemento, simplemente navegue hasta Panel de control - > Configuración - > Enlaces permanentes. Puede agregar reescrituras específicas para cada tipo de publicación personalizada registrada.

    
respondido por el Michael Ecklund 19.07.2012 - 16:03

Lea otras preguntas en las etiquetas