Mostrar publicaciones con autor en la url con tipos de publicación personalizados

5

Estoy teniendo un momento muy difícil con esto. Tengo un sitio de galería multiusuario. Cada autor tiene su propia página que enumera las publicaciones del autor (este es un tipo de publicación personalizada).

Lo hice para que la url del autor (author.php) sea www.example.com/firstname-lastname/. Pero cuando un visitante hace clic en una de las publicaciones del autor, la URL cambia a www.example.com/custom-post-type-name/postname/ mientras que quiero que sea www.example.com/firstname-lastname/postname/ . ¿Cómo logro esto? Con .htaccess? ¿O cambiar la regla de reescritura al registrar el tipo de publicación? ¿Cómo?

Lo utilizo para registrar mi tipo de publicación en el archivo functions.php:

// Make custom post type Add media

function galleryRegister()
{
$labels = array(
'name' => _x('Add gallery', 'post type general name'),
'singular_name' => _x('Add gallery', 'post type singular name'),
);

$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title', 'editor', 'thumbnail'),
'rewrite' => false,
'show_in_nav_menus' => true,
);

register_post_type('gallery' , $args);
}

add_action('init', 'galleryRegister');

Gracias por ayuda.

Editar: descubrí que puedo escribir manualmente www.example.com/firstname-lastname/postname/ y muestra la publicación correcta, pero el enlace permanente sigue siendo el mismo. www.example.com/custom-post-type-name/postname/ en todas partes

Solución: Gracias Stephen por la gran respuesta! Este es el código que utilicé y funcionó:

// ****************************************************
// Make a custom post type "Add gallery"
// ****************************************************
function galleryRegister()
{
$labels = array(
'name' => _x('Add gallery', 'post type general name'),
'singular_name' => _x('Add gallery', 'post type singular name'),
'add_new' => _x('Add gallery ', 'portfolio item'),
'all_items' => __( 'Manage your galleries' ),
'add_new_item' => __('Add gallery'),
'edit_item' => __('Edit your galleries'),
'new_item' => __('New gallery'),
'view_item' => __('View gallery on site'),
'search_items' => __('Search galleries'),
'not_found' => __('Nothing found'),
'not_found_in_trash' => __('Nothing found in Trash'),
'parent_item_colon' => ''
);

$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'query_var' => true,
'capability_type' => 'post',
'hierarchical' => false,
'menu_position' => null,
'supports' => array('title', 'editor', 'thumbnail'),
'rewrite' =>  array( 'slug' => _x( '%author%', 'URL slug') ),
'show_in_nav_menus' => true,
);

register_post_type('gallery' , $args);
}

add_action('init', 'galleryRegister');

// ****************************************************
// Flush rewrite rules. Delete this 
// ****************************************************
function my_rewrite_flush() {
    my_cpt_init();

    // ATTENTION: This is *only* done during plugin activation hook in this example!
    // You should *NEVER EVER* do this on every page load!!
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'my_rewrite_flush' );

// ****************************************************
// Make author as slug for posts
// ****************************************************
add_filter('post_type_link', 'wpse73228_author_tag',10,4);
function wpse73228_author_tag($post_link, $post, $leavename, $sample){

    if( 'gallery' != get_post_type($post) )
        return $post_link;

    $authordata = get_userdata($post->post_author);
$author = $authordata->user_nicename;

$post_link = str_replace('%author%', $author, $post_link);

return $post_link;
}
    
pregunta hlotvonen 20.11.2012 - 00:22

1 respuesta

4

Puedes usar la etiqueta %author% en la propiedad rewrite en register_post_type() . Sin embargo, aunque se agregan las reglas de reescritura (después de que se vacían), WordPress no reemplaza la etiqueta con su valor apropiado al generar el enlace permanente de su tipo de publicación. Por ejemplo, terminas con el enlace permanente www.example.com/%author%/gallery-name

Lo siguiente reemplaza a %author% con el valor apropiado:

add_filter('post_type_link', 'wpse73228_author_tag',10,4);
function wpse73228_author_tag($post_link, $post, $leavename, $sample){

    if( 'gallery' != get_post_type($post) )
        return $post_link;

    $authordata = get_userdata($post->post_author);
    $author = $authordata->user_nicename;

    $post_link = str_replace('%author%', $author, $post_link);

    return $post_link;
}
    
respondido por el Stephen Harris 20.11.2012 - 00:58

Lea otras preguntas en las etiquetas