Это довольно странная проблема. Я создаю специальный тип сообщения WordPress в моих файлах functions.php тем, используя следующий формат:
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 ); }
Это дает мне следующую структуру URL для моих продуктов: http://www.mywebsite.com/products/product-name .
Однако, если я переключусь на другую тему (TwentyTen), а затем вернусь, WordPress забудет постоянную ссылку, теперь, когда я просматриваю URL-адрес выше, я получаю свою страницу 404.
По-настоящему странная вещь, которую я заметил, заключается в том, что я могу исправить эту проблему, просмотрев Настройки -> Permalinks в admin. Это временно устраняет проблему, пока следующая тема не удалит / переустановит.
У кого-то еще была аналогичная проблема?
Новая структура WP_Rewrite::flush_rules()
сохраняется только тогда, когда WP_Rewrite::flush_rules()
. Поскольку это дорогостоящая операция (вычисление новых правил и сохранение их в базе данных), вы не должны делать это при каждом вызове init
, но только при изменении структуры. Пользовательский тип сообщения, однако, должен быть зарегистрирован при каждом вызове init
, поскольку он сохраняется в массиве PHP в памяти, а не в базе данных (поэтому он забыл настраиваемый пост при переключении тем: структура permalink все еще существовала, но упоминалась пользовательский тип сообщения, который не был загружен, что дало ошибку).