In meinem WP v6.1 habe ich zwei benutzerdefinierte Porttypen: company
, product
und benutzerdefinierte Taxonomie country
.
Gewünschte URL-Struktur ist %country%/%company_postname%
und %country%/%product_postname%
bzw. unten ist der Code für $wp_rewrite
:
add_action('init', 'custom_init');
function custom_init() {
global $wp_rewrite;
$company_url="/%country%/%company_postname%";
$product_url="/%country%/%product_postname%";
$wp_rewrite->add_permastruct('company', $company_url, false);
$wp_rewrite->add_permastruct('product', $product_url, false);
$wp_rewrite->add_rewrite_tag("%company_postname%", '([^/]+)', "company=");
$wp_rewrite->add_rewrite_tag("%product_postname%", '([^/]+)', "product=");
}
Mit obigem Code und einem anderen post_type_link
Filterfunktion kann ich meine benutzerdefinierten URLs generieren. Das Problem ist jedoch regelmäßig post
und page
Beiträge werden nicht zurückgegeben gefunden error_404
.
Normale Post-/Seiten-Standard-URL-Struktur: www.example.com/%postname%
Habe versucht add_permastruct
für Beiträge & Seiten, aber das hat nicht funktioniert. Wie zeige ich Seiten und Posts an, während ich die benutzerdefinierten URLs für meine benutzerdefinierten Posts habe?
Aktualisierung 1
Benutzerdefinierte Posts und Taxonomien wurden per Code erstellt.
Beispiel von company
Code
function company_post_type() {
$labels = array(
'name' => _x('Company', 'Post Type General Name', 'text'),
);
$args = array(
'labels' => $labels,
'supports' => array('title', 'editor', 'custom-fields'),
'taxonomies' => array('country'),
'query_var' => true,
'rewrite' => false
);
register_post_type('company', $args);
}
add_action('init', 'company_post_type', 0);
Aktualisierung 2
Und mein post_type_link
Funktion ist:
function post_type_link_function($url, $post) {
// only if post is published
if ('' != $url && !in_array($post->post_status, array('draft', 'pending', 'auto-draft'))) {
// get country terms
$terms = wp_get_object_terms($post->ID, 'country');
// country
if (strpos($url, '%country%') !== FALSE) {
if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) {
$country = urlencode($terms[0]->slug);
$url = str_replace('%country%', $country, $url);
}
}
// post names
$postnames = array('%company_postname%', '%product_postname%', '%postname%');
foreach ($postnames as $postname) {
$postname = $post->post_name;
$url = str_replace($postnames, $postname, $url);
}
return $url;
}
return $url;
}
Aktualisierung 3
Wenn Permalinks auf Plain eingestellt sind www.example.com/?p=123
alle Posts, Seiten und benutzerdefinierten Posts werden gut geladen.
Aktualisierung 4
Ich habe beobachtet, dass Beiträge und Seiten auch nicht verwendet werden single.php
oder page.php
Vorlage. Es nutzt index.php
. Wobei ich diesen Seiten oder Beiträgen keine Vorlagen beigefügt habe.
Update 5 – behoben
Es lag an der 'rewrite' => array('slug' => "https://stackoverflow.com/", 'with_front' => FALSE)
in dem country
benutzerdefinierte Taxonomie. Ohne das rewrite
Jetzt sind die Seiten und Beiträge in Ordnung.
Wie hast du einen benutzerdefinierten Beitrag erstellt?[company, product] (über Plugin oder eigenen Code) ?
– json
10. Dezember 2022 um 7:17 Uhr
Durch eigenen Code siehe bitte meine aktualisierte Frage.
– der König
10. Dezember 2022 um 14:52 Uhr
Und was ist Ihre “andere post_type_link-Filterfunktion”?
– Alexis Vandepitte
11. Dezember 2022 um 13:23 Uhr
post_type_link
Funktionsupdate in der Frage.– der König
13. Dezember 2022 um 13:02 Uhr