WordPress — Пользовательская Таксономия в Постоянной ссылке для Пользовательского Типа Сообщения

У меня есть пользовательский тип сообщения называется место назначения и пользовательская таксономия под названием районы (с такими терминами, как азия, европа, африка, и т.д.) я создал пункт назначения (Венеция) и было ли это связано с регионом (Европа). Теперь я часами пытался заставить постоянную ссылку CPT работать как /%region%/%destination% (например. http://example.com/europe/venice) но это продолжает давать мне 404 Не Найдено. Это соответствующий код:

add_action("init", "register_region_taxonomy");
add_action("init", "create_destinations_post_type");
add_filter("post_type_link", "region_permalink", 10, 3);

Вот как я создал свою собственную таксономию:

function register_region_taxonomy() {
$labels = array(
"name" => _x("Destination Region", "taxonomy general name"),
"singular_name" => _x("Region", "taxonomy singular name"),
"search_items" => __("Search Regions"),
"popular_items" => __("Popular Regions"),
"all_items" => __("All Regions"),
"parent_item" => null,
"parent_item_colon" => null,
"edit_item" => __("Edit Region"),
"update_item" => __("Update Region"),
"add_new_item" => __("Add New Region"),
"new_item_name" => __("New Region"),
"separate_items_with_commas" => __("Separate regions with commas"),
"add_or_remove_items" => __("Add or remove regions"),
"choose_from_most_used" => __("Choose from the most used regions"),
"menu_name" => __("Regions"),
);

register_taxonomy("regions", "destination", array(
"hierarchical" => false,
"labels" => $labels,
"show_ui" => true,
"show_admin_column" => true,
"update_count_callback" => "_update_post_term_count",
"query_var" => "region",
"rewrite" => array("slug" => "region"),
));
}

Это мой пользовательский тип сообщения:

function create_destinations_post_type() {

register_post_type("destination",
// CPT Options
array(
"labels" => array(
"name" => __("destinations"),
"singular_name" => __("destination")
),
"public" => true,
"publicly_queryable" => true,
"has_archive" => true,
"show_ui" => false,
"not_found" => "No destinations Found",
"rewrite" => array("slug" => "%region%", "with_front" => false)
)
);
}

Вот как я ожидаю, что это изменит мою постоянную ссылку для направлений:

function region_permalink($permalink, $post_id, $leavename) {
if (strpos($permalink, "%region%") === FALSE)
return $permalink;

// Get post
$post = get_post($post_id);
if (!$post)
return $permalink;

// Get taxonomy terms
$terms = wp_get_object_terms($post->ID, "regions");

if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]))
$taxonomy_slug = $terms[0]->slug;
else
$taxonomy_slug = "no-region";

return str_replace("%region%", $taxonomy_slug, $permalink);
}

Я последовал за Эта статья шаг за шагом, но безрезультатно. Я пытался идти в Настройки постоянной ссылки страница и сохранить его снова — как уже упоминалось Вот — но безрезультатно (мои постоянные настройки установлены на Название сообщения). Я пробовал звонить flush_rewrite_rules() сразу после создания моего CPT, но нет, это просто не будет работать. Я не уверен, что смог правильно использовать этот ТАК пост потому что я изменил решение так:

add_filter("rewrite_rules_array", "add_destination_rewrite_rules");

function add_destination_rewrite_rules($rules) {
$new = array();
$new['([^/]+)/(.+)/?$'] = 'index.php?destination=$matches[1]';
$new['(.+)/?$'] = 'index.php?region=$matches[0]';

return array_merge($new, $rules); // Ensure our rules come first
}

Пока безуспешно, поэтому я отменил это изменение на данный момент.

Если я попробую http://example.com/venice это действительно входит в постоянную ссылку, и URL в моем браузере изменяется на http://example.com/europe/venice но в итоге это показывает мне ту злую 404 страницу. Есть какие-то подсказки, что я здесь делаю неправильно? Мой .htaccess выглядит так:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wpsite/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wpsite/index.php [L]
</IfModule>

# END WordPress

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …