Múltiplos parâmetros em um tipo de publicação personalizado url rewrite

Eu tenho um tipo de postagem personalizado chamado venues atualmente que eles exibem através do formato url:

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

Gostaria de ter o formato:

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

Mas o subúrbio não tem nenhuma relação com o tipo de postagem personalizado do venue . Os nomes são sempre únicos.

O que precisaria acontecer é no momento da reescrita, ele puxa o {venue-suburb} baseado no {venue-name} ou id e reescreve o URL com essa informação nele.

Isso é algo que é possível e, em caso afirmativo, como posso começar?

Atualização: Aqui está o código que consegui juntar após algumas pesquisas. O resultado: 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; } 

A remoção da seção para% cpt_id% faz com que a página apareça como 404. Reescrever% cpt_id% para “” também faz aparecer a página como um 404. Alguém sabe como remover o post_id?

Solutions Collecting From Web of "Múltiplos parâmetros em um tipo de publicação personalizado url rewrite"

Provavelmente, uma das maneiras mais simples de fazer isso seria fazer do subúrbio do local uma taxonomia customizada não hierárquica. Quando você cria uma publicação do local, adicione um termo para o subúrbio e atribua-o a essa publicação. O parâmetro de reescrita de tipo de cadastro contém uma referência à tag %venue_suburb% , então você pode filtrar post_type_link para replace essa tag pelo termo de subúrbio do local selecionado:

 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; } 

Quando você cria uma postagem, você verá a tag %venue_suburb% no URL até você associar um termo à postagem. Certifique-se de visitar sua página de configurações de permalinks no administrador uma vez que você adiciona o código acima para liberar as regras de reescrita para que tudo isso tenha efeito.

EDIT- Outra versão baseada em seu código. Você terá que modificá-lo para extrair subúrbio de seu meta serializado, eu apenas testei com um string val para endereço:

 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; }