it-swarm.com.de

Verwenden von benutzerdefinierten Feldern in URLs mit benutzerdefiniertem Beitragstyp

Ich entwickle eine Autostelle mit Ausstellungsräumen. Jeder Ausstellungsraum benötigt eine eigene URL, die auf seinem Standort basiert. Der Ort (Stadt und Landkreis/Bundesland) ist bereits als zwei benutzerdefinierte Felder eingefügt. Wenn es sich zum Beispiel um "Showroom A" in Liverpool, Merseyside, handelt, lautet die URL folgendermaßen:

http://www.domain.com/location/merseyside/liverpool/showroom-a/

Ich habe einen benutzerdefinierten Beitragstyp "Showroom", dessen Umschreiberegeln auf "false" gesetzt sind (obwohl er zuvor im Test auf "true" gesetzt war). Wenn ich jedoch den fraglichen Beitrag erstelle, gibt es ein Problem. Der Permalink wird als alles BAR den Namen des Ausstellungsraums gegeben (d. H. http://www.domain.com/location/merseyside/liverpool/ ). Das Aufrufen dieser URL verursacht einen 404-Fehler und fügt sogar "showroom-a" (zum Beispiel) am Ende des Codes hinzu ( http://www.domain.com/location/merseyside/liverpool/showroom-a/ ) verursacht auch einen 404-Fehler. Hier ist mein Code.

function add_rewrite_rules()
{
    // Register custom rewrite rules

    global $wp_rewrite;

    $wp_rewrite->add_rewrite_tag('%showroom%', '([^/]+)', 'showroom=');
    $wp_rewrite->add_rewrite_tag('%post_custom_data%', '([^/]+)', 'post_custom_data=');
    $wp_rewrite->add_permastruct('showroom', 'location/%post_custom_data%', false);

}

function permalinks($permalink, $post, $leavename)
{
    $no_data = 'no-data';
    $post_id = $post->ID;

    if($post->post_type != 'showroom' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft'))) {
        return $permalink;
    }

    $state = sanitize_title_with_dashes(get_post_meta($post_id, 'state', true));
    $city =  sanitize_title_with_dashes(get_post_meta($post_id, 'city', true));
    $data = $state . "/" . $city;

    if (!$data) {
        $data = $no_data;
    }

    $permalink = str_replace('%post_custom_data%', $data, $permalink);

    return $permalink;    
}

add_action('init', 'add_rewrite_rules');
add_filter('post_type_link', 'permalinks', 10, 3);

Irgendwelche Ideen oder Hilfe wäre dankbar :)

5
Rhys Wynne

Ich habe es geschafft, das zu beheben.

Grundsätzlich habe ich die Permastruktur folgendermaßen geändert:

$wp_rewrite->add_permastruct('showroom', 'location/%state%/%city%/%showroom%', false);

Ich habe dann state & city als zwei separate Variablen aufgenommen und sie in der Permalink-Struktur mit den folgenden Zeilen ersetzt:

$permalink = str_replace('%state%', $state, $permalink);
$permalink = str_replace('%city%', $city, $permalink);

Mit $state & $city mit get_post_meta von der Post gepackt.

4
Rhys Wynne