wake-up-neo.com

Beiträge mit Autor in der URL mit benutzerdefinierten Beitragstypen anzeigen

Ich habe eine wirklich schwierige Zeit damit. Ich habe eine Mehrbenutzer-Galerie-Site. Jeder Autor hat eine eigene Seite, auf der die Beiträge des Autors aufgelistet sind (dies ist ein benutzerdefinierter Beitragstyp).

Ich habe es so gemacht, dass die URL des Autors (author.php) www.example.com/firstname-lastname/ lautet. Wenn ein Besucher jedoch auf einen der Beiträge des Autors klickt, ändert sich die URL zu www.example.com/custom-post-type-name/postname/, während ich möchte, dass www.example.com/firstname-lastname/postname/ . Wie erreiche ich das? Mit .htaccess? Oder die Umschreiberegel bei der Registrierung des Beitragstyps ändern? Wie?

Ich benutze dies, um meinen Beitragstyp in der Datei functions.php zu registrieren:

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

Danke für die Hilfe.

Bearbeiten: Ich habe herausgefunden, dass ich www.example.com/firstname-lastname/postname/ manuell eingeben kann und es den richtigen Post anzeigt, aber der Permalink ist immer noch derselbe alte www.example.com/custom-post-type-name/ postname/überall

Lösung: Danke Stephen für die tolle Antwort! Dies ist der Code, den ich verwendet habe und der funktioniert hat:

// ****************************************************
// 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;
}
5
hlotvonen

Sie können das Tag %author% in der Eigenschaft rewrite in register_post_type() verwenden. Obwohl die Umschreiberegeln hinzugefügt wurden (nachdem sie gelöscht wurden), ersetzt WordPress das Tag nicht durch den entsprechenden Wert, wenn Sie den Permalink für Ihren Beitragstyp erstellen. Zum Beispiel erhalten Sie den Permalink www.example.com/%author%/gallery-name

Folgendes ersetzt %author% durch den entsprechenden Wert:

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;
}
4
Stephen Harris