Taxonomía personalizada en Permalink of Post

4

Es posible usar esto como un enlace permanente para una publicación:

/%category%/%postname%/

Pero digamos que he creado una taxonomía llamada "artista". Me gustaría usar esto para mis publicaciones:

/%artist%/%postname%/

Sé que las taxonomías te permiten enumerar sus términos con esto:

/%artist%/%someartist%/

pero eso no es lo que estoy buscando. Quiero modificar las URL de POST, no las de taxonomía.

Estoy probando esto en mi blog y no funciona. ¿Es esto algo que se puede hacer en Wordpress?

    
pregunta Totomobile 28.06.2012 - 05:25

3 respuestas

6

Suponiendo que su taxonomía personalizada se llama artist (y no reemplaza la barra en el parámetro rewrite ) puede usar la etiqueta de reescritura %artist% . WordPress implementa casi todas las funcionalidades para usar esas etiquetas de reescritura en post-enlaces permanentes. Solo se necesitan algunas pequeñas adaptaciones.

Construyendo el enlace permanente

Primero, deberá usar el filtro post_link para reemplazar una "etiqueta" personalizada en su estructura de solicitud:

/**
 * replace the '%artist%' tag with the first 
 * term slug in the artist taxonomy
 * 
 * @wp-hook post_link
 * @param string $permalink
 * @param WP_Post $post
 * @return string
 */
function wpse_56769_post_link( $permalink, $post ) {

    $default_term = 'no_artist';
    $terms = wp_get_post_terms( $post->ID, 'artist' );
    if ( ! empty( $terms ) && ! is_wp_error( $terms ) )
        $term = current( $terms )->slug;
    else
        $term = $default_term;

    $permalink = str_replace( '%artist%', $term, $permalink );

    return $permalink;
}
add_filter( 'post_link', 'wpse_56769_post_link', 10, 2 );

Esta función ( wpse_56769_post_link ):

  • define un término predeterminado slug ( no_artist ) que se usa como reserva si la publicación no tiene términos asignados en la taxonomía del artista,
  • busca el primer término asignado (en orden alfabético) de la taxonomía del artista,
  • reemplaza la etiqueta %artist% con el slug de este término.

Ahora, vaya al menú Configuración → Permalinks, elija la opción »Estructura personalizada« y escriba: /%artist%/%postname%/ .

En el resultado, un mensaje de enlace permanente debería tener este aspecto:

Ahora que el enlace permanente de la publicación incluye la primera babosa del término de artista, echemos un vistazo al enrutamiento.

Actualizar los enlaces permanentes (enrutamiento)

Notarás que el enlace permanente se resuelve correctamente en la única publicación. Desafortunadamente, los permalinks de la página están rotos.

Para resolver este problema, no es necesario que altere las reglas de reescritura. Lo único que debemos hacer es cambiar el estado interno de WP_Rewrite . La propiedad WP_Rewrite::use_verbose_page_link debe establecerse en TRUE . (Este es el comportamiento interno de WP_Rewrite cuando se usan las etiquetas %category% o %author% como base para los enlaces permanentes de la publicación).

/**
 * set WP_Rewrite::use_verbose_page_rules to TRUE if %artist%
 * is used as the first rewrite tag in post permalinks
 * 
 * @wp-hook do_parse_request
 * @wp-hook page_rewrite_rules
 * @global $wp_rewrite
 * @param mixed $pass_through (Unused)
 * @return mixed
 */
function wpse_56769_rewrite_verbose_page_rules( $pass_through = NULL ) {

    $permastruct = $GLOBALS[ 'wp_rewrite' ]->permalink_structure;
    $permastruct = trim( $permastruct, '/%' );
    if ( 0 !== strpos( $permastruct, 'artist%' ) )
        return $pass_through;

    $GLOBALS[ 'wp_rewrite' ]->use_verbose_page_rules = TRUE;
    return $pass_through;
}
add_filter( 'page_rewrite_rules', 'wpse_56769_rewrite_verbose_page_rules', PHP_INT_MAX );
add_filter( 'do_parse_request',  'wpse_56769_rewrite_verbose_page_rules', PHP_INT_MAX );

El estado se debe cambiar en dos puntos: do_parse_request porque WP::parse_request() solicita este estado y page_rewrite_rules para cuando se construyen las reglas de reescritura.

Ahora, el enrutamiento es fijo y los enlaces de página funcionan bien. (Después de vaciar los permalinks una vez más.)

Manejar el pseudo término no_artist

Una última cosa sobre la cosa no_artist : si la publicación realmente no está asignada a ningún término de la taxonomía artist , el enlace permanente se analiza a las siguientes variables de consulta:

name   => 'sample_post'
artist => 'no_artist'
page   => ''

Esto debería llevar a un 404 porque el término no existe. Como el name de la publicación debe ser único, podemos eliminar la variable de consulta artist en el filtro request :

/**
 * check for existing artist and set query to 404 if necessary
 *
 * @wp-hook parse_query
 * @param array $request_vars
 * @return array
 */
function wpse_56769_request_vars( $request_vars ) {

    if ( ! isset( $request_vars[ 'artist' ] ) )
        return $request_vars;

    if ( ! isset( $request_vars[ 'name' ] ) )
        return $request_vars;

    if ( 'no_artist' == $request_vars[ 'artist' ] )
        unset( $request_vars[ 'artist' ] );

    return $request_vars;
}
add_filter( 'request', 'wpse_56769_request_vars' );

Con ese filtro, una publicación como http://wordpress.dev/no_artist/sample-post/ se encontrará correctamente.

    
respondido por el David 26.09.2014 - 18:49
1

Creo que esto es lo que buscas: Permalinks de tipo de publicación personalizada

Este complemento te permite editar la estructura de enlace permanente del tipo de publicación personalizada.

Para instalar este complemento:

  1. Descargue el archivo custom-post-type-permalinks.zip en su computadora.
  2. Descomprima el archivo.
  3. Suba el directorio personalizado-post-type-permalinks a Su directorio / wp-content / plugins /.
  4. Active el complemento a través del menú 'Complementos' en WordPress.

También puede ir al menú 'Complementos' en su wordpress y hacer clic en "agregar nuevo". Luego encuentre este complemento buscando "Permalinks personalizados de tipo de publicación" e instálelo haciendo clic en el botón de instalación.

Aparecerá un nuevo elemento en el menú a la izquierda de su administrador de wordpress. Aquí puede cambiar la configuración según sus necesidades (nombres de las taxonomías, etc.).

Futhermore mi sitio actualmente tiene la siguiente estructura de enlace permanente "site.com/star/aristname/" que luego enumera todas las publicaciones de este artista o una página / publicación sobre este artista.

Si lo busca, puede crear una página de archivo para su tipo de publicación personalizada. Wordpress asumirá automáticamente esta estructura. Para obtener más información sobre cómo crear su propia página de archivo, vaya a aquí . (Si realmente estás buscando esto, puedo explicarlo más a fondo si quieres)

    
respondido por el Aleks 28.06.2012 - 09:08
0

Cuando quise enlazar url a la categoría (en cualquier estructura de url) puse una lista de términos en la estructura de reescritura de url, pero en mi caso no había muchos términos ...

los resultados fueron algo así como reescribir la clave de la regla

publications/(annual-reports|articles|books|policy-briefs)/([^/]+).html?$ 

y el valor de la regla

index.php?post_type=publication&category_publication=$matches[1]&publication=$matches[2]&paged=1

todo se enganchó utilizando el filtro rewrite_rules_array .

resultado que puede ver en enlace

    
respondido por el Butuzov 13.11.2012 - 22:09

Lea otras preguntas en las etiquetas