wake-up-neo.net

Benutzerdefinierte Beitragstypen - Verwenden Sie post_id in der Permalink-Struktur

Ich registriere mein CPT wie folgt:

$args = array(
    'labels' => $labels,
    'public' => true,
    'hierarchical' => false,
    'rewrite' => array(
        'with_front' => false,
        'slug' => 'news/events'
    ),
    'supports' => array( 'title', 'editor', 'thumbnail' )
);
register_post_type('events',$args);

Das erzeugt nun Post-Permalinks wie folgt: /news/events/{post_name}/ aber ich möchte die folgende Permalink-Struktur: /news/events/{post_id}/{post_name}/.

Wie mache ich das?

6
Brady

@Bainternet - Ihre Antwort hat nicht vollständig funktioniert, aber ich habe mehr gesucht und konnte diesen Filter zusammensetzen, der funktioniert hat:

add_filter('post_type_link', 'custom_event_permalink', 1, 3);
function custom_event_permalink($post_link, $id = 0, $leavename) {
    if ( strpos('%event_id%', $post_link) === 'FALSE' ) {
        return $post_link;
    }
    $post = &get_post($id);
    if ( is_wp_error($post) || $post->post_type != 'events' ) {
        return $post_link;
    }
    return str_replace('%event_id%', $post->ID, $post_link);
}

+1 für den größten Teil meiner Arbeit

7
Brady

Versuchen Sie dies. Fügen Sie zunächst %event_id% zu Ihrem Slug hinzu:

$args = array(
    'labels' => $labels,
    'public' => true,
    'hierarchical' => false,
    'rewrite' => array(
        'with_front' => false,
        'slug' => 'news/events/%event_id%/%postname%'
    ),
    'supports' => array( 'title', 'editor', 'thumbnail' )
);
register_post_type('events',$args);

fügen Sie dann dem Premalink für einzelne Ereignisse einen Filter hinzu:

add_filter('post_type_link', 'custom_event_permalink', 1, 3);
function custom_event_permalink($post_link, $id = 0, $leavename) {
    global $wp_rewrite;
    $post = &get_post($id);
    if ( is_wp_error( $post )  || 'events' != $post->post_type)
        return $post_link;
    $newlink = $wp_rewrite->get_extra_permastruct('events');
    $newlink = str_replace("%event_id%", $post->ID, $newlink);
    $newlink = home_url(user_trailingslashit($newlink));
    return $newlink;
}

das sollte den Trick machen, aber es ist ungetestet . Stellen Sie sicher, dass Sie die Umschreiberegeln leeren.

6
Bainternet