it-swarm.com.de

Benutzerdefinierte WordPress-Post-Typen unterbrechen den Permalink bei der Neuinstallation des Themas

Das ist ein ziemlich seltsames Problem. Ich erstelle einen benutzerdefinierten WordPress-Beitragstyp in meiner Datei themes functions.php im folgenden Format:

add_action('init', 'product_register');

function product_register() {
$args = array(
    'label' => __('Products'),
    'singular_label' => __('Product'),
    'public' => true,
    'show_ui' => true,
    'capability_type' => 'post',
    'hierarchical' => false,
    'rewrite' => true,
    'supports' => array('title', 'editor', 'thumbnail')
);

register_post_type( 'product' , $args );
}

Dies gibt mir die folgende URL-Struktur für meine Produkte: http://www.mywebsite.com/products/product-name .

Wenn ich jedoch zu einem anderen Thema (TwentyTen) wechsle und dann zurückschalte, vergisst WordPress den Permalink. Wenn ich jetzt zur obigen URL navigiere, erhalte ich meine 404-Seite.

Das wirklich Seltsame, das mir aufgefallen ist, ist, dass ich dieses Problem beheben kann, indem ich zu Einstellungen -> Permalinks in admin navigiere. Dies behebt das Problem vorübergehend, bis das nächste Thema deinstalliert/neu installiert wird.

Hat noch jemand ein ähnliches Problem gehabt?

1
jnthnclrk

Die neue Permalink-Struktur wird nur gespeichert, wenn WP_Rewrite::flush_rules() aufgerufen wird. Da dies eine teure Operation ist (Berechnen der neuen Regeln und Speichern in der Datenbank), sollten Sie dies nicht bei jedem Aufruf von init tun, sondern nur, wenn Sie die Struktur ändern. Der benutzerdefinierte Beitragstyp muss jedoch bei jedem init-Aufruf registriert werden, da er in einem PHP -Array im Speicher und nicht in der Datenbank gespeichert wird (weshalb er den benutzerdefinierten Beitrag beim Themawechsel vergessen hat: der Permalink Die Struktur war noch vorhanden, verwies jedoch auf einen benutzerdefinierten Beitragstyp, der nicht geladen wurde (was zu einem Fehler führte).

3
Jan Fabry