Exibir postagens com autor na url com tipos de postagem personalizados

5

Estou tendo um tempo muito difícil com isso. Eu tenho um site de galeria multiusuário. Cada autor tem sua própria página que lista as postagens do autor (esse é um tipo de postagem personalizado).

Eu fiz isso para que o autor url (author.php) seja www.example.com/firstname-lastname/. Mas quando um visitante clica em uma das postagens do autor, a URL muda para www.example.com/custom-post-type-name/postname/, enquanto eu quero que seja www.example.com/firstname-lastname/postname/ . Como faço para conseguir isso? Com .htaccess? Ou alterando a regra de reescrita ao registrar o tipo de postagem? Como?

Eu uso isso para registrar meu tipo de postagem no arquivo 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');

Obrigado pela ajuda.

Edit: Descobri que posso digitar manualmente www.example.com/firstname-lastname/postname/ e mostra o post correto, mas o permalink ainda é o mesmo www.example.com/custom-post-type-name/postname/ everywhere

Solução: Obrigado Stephen pela ótima resposta! Este é o código que eu usei e funcionou:

// ****************************************************
// 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;
}
    
por hlotvonen 20.11.2012 / 00:22

1 resposta

4

Você pode usar a tag %author% na propriedade rewrite em register_post_type() . No entanto, embora as regras de reconfiguração sejam adicionadas (depois de liberadas), o WordPress não substitui a tag por seu valor apropriado ao gerar o permalink de seu tipo de postagem. Por exemplo, você acaba com o permalink www.example.com/%author%/gallery-name

O seguinte substitui %author% pelo valor apropriado:

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;
}
    
por Stephen Harris 20.11.2012 / 00:58