Mehrere Parameter in einem benutzerdefinierten Post-Typ URL-Rewrite

Ich habe einen benutzerdefinierten Post-Typ namens ” venues derzeit im URL-Format angezeigt werden:

 http://mywebsite.com/venue/{venue-name} 

Ich hätte gerne das Format:

 http://mywebsite.com/venue/{venue-suburb}/{venue-name} 

Aber der Vorort hat eigentlich keine Beziehung zum Ziehen des venue . Namen sind immer eindeutig.

Was zum Zeitpunkt des Neuschreibens passieren müsste, ist, dass es {venue-suburb} basierend auf dem {venue-name} oder der ID zieht und die URL mit dieser Information neu schreibt.

Ist das etwas, das möglich ist und wenn ja, wie könnte ich anfangen, es zu beginnen?

Update: Hier ist der Code, den ich nach einigen Recherchen zusammengestellt habe. Das Ergebnis: http://mywebsite.com/my-venues/{venue-suburb}/{venue-name}/{post_id}

 add_action('init', 'myposttype_rewrite'); function myposttype_rewrite() { global $wp_rewrite; $queryarg = 'post_type=venue&p='; $wp_rewrite->add_rewrite_tag('%cpt_id%', '([^/]+)', $queryarg); $wp_rewrite->add_rewrite_tag('%suburb%', '([^/]+)', $queryarg); $wp_rewrite->add_rewrite_tag('%title%', '([^/]+)', $queryarg); $wp_rewrite->add_permastruct('venue', '/my-venues/%suburb%/%title%/%cpt_id%', false); } add_filter('post_type_link', 'venue_permalink', 1, 3); function venue_permalink($post_link, $id = 0, $leavename) { global $wp_rewrite; global $wpdb; $post = &get_post($id); if ( is_wp_error( $post ) ) return $post; $newlink = $wp_rewrite->get_extra_permastruct('venue'); $sql = " SELECT meta_value FROM " . $wpdb->postmeta . " WHERE post_id = " . $post->ID . " AND meta_key = 'address'"; $address = $wpdb->get_var( $sql ); $address = unserialize( $address ); $suburb = str_replace(" ", "-", strtolower($address['suburb'])); $title = str_replace(" ", "-", strtolower(get_the_title( $post->ID ))); $newlink = str_replace("%suburb%", $suburb, $newlink); $newlink = str_replace("%title%", $title, $newlink); $newlink = str_replace("%cpt_id%", $post->ID, $newlink); $newlink = home_url(user_trailingslashit($newlink)); return $newlink; } 

Wenn Sie den Abschnitt für% cpt_id% entfernen, wird die Seite als 404 angezeigt. Durch erneutes Schreiben von% cpt_id% in “” wird die Seite auch als 404 angezeigt. Wer weiß, wie die post_id entfernt wird?

Solutions Collecting From Web of "Mehrere Parameter in einem benutzerdefinierten Post-Typ URL-Rewrite"

Wahrscheinlich wäre einer der einfacheren Wege, dies zu tun, den Veranstaltungsort Vorort zu einer nicht-hierarchischen benutzerdefinierten Taxonomie zu machen. Wenn Sie einen Ortsposten erstellen, fügen Sie einen Begriff für den Vorort hinzu und weisen Sie ihn diesem Beitrag zu. Der Parameter ” %venue_suburb% post type rewrite” enthält einen Verweis auf das %venue_suburb% -Tag, dann können Sie post_type_link filtern, um dieses Tag für den ausgewählten Ausdruck des post_type_link zu ersetzen:

 add_action( 'init', 'wpa65770_venue_custom_types' ); function wpa65770_venue_custom_types() { // extra parameters for tax and post type trimmed to save space register_taxonomy( 'venue_suburb','venue', array( 'hierarchical' => false, 'show_ui' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'venue-suburb' ), ) ); register_post_type( 'venue', array( 'public' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'venue/%venue_suburb%' ), // rewrite with %venue_suburb% 'hierarchical' => false, 'supports' => array('title', 'editor', 'thumbnail') ) ); } add_filter( 'post_type_link', 'wpa65770_venue_permalink', 10, 3 ); function wpa65770_venue_permalink( $permalink, $post, $leavename ) { if ( false !== strpos( $permalink, '%venue_suburb%' ) && $venue_suburb = get_the_terms( $post->ID, 'venue_suburb' ) ) { $permalink = str_replace( '%venue_suburb%', array_pop( $venue_suburb )->slug, $permalink ); } return $permalink; } 

Wenn Sie einen Beitrag erstellen, sehen Sie in der URL das Tag %venue_suburb% bis Sie dem Beitrag einen Begriff %venue_suburb% . Seien Sie sicher, Ihre Permalinks-Einstellungsseite in admin zu besuchen, sobald Sie den obigen Code addieren, um die rewrite Regeln zu löschen, damit dieses alle wirkt.

EDIT- Eine andere Version basierend auf Ihrem Code. Sie müssen es ändern, um Vorort von Ihrem serialisierten Meta zu extrahieren, ich habe gerade mit einem String val für die Adresse getestet:

 add_action('init', 'myposttype_rewrite'); function myposttype_rewrite() { global $wp_rewrite; $queryarg = 'post_type=venue&venue='; $wp_rewrite->add_rewrite_tag('%suburb%', '([^/]+)', $queryarg); $wp_rewrite->add_permastruct('venue', '/my-venues/%suburb%/%venue%/', false); } add_filter('post_type_link', 'venue_permalink', 1, 3); function venue_permalink($post_link, $post_obj, $leavename) { $post = &get_post($post_obj); if ( is_wp_error( $post ) ) return $post; $address = get_post_meta( $post_obj->ID, 'address', true ); $newlink = str_replace( '%suburb%', $address, $post_link ); return $newlink; }