Intereting Posts
Использование pre_get_posts назначает пользовательскую почту редактору wordpress Массовый тег добавления (или любой ярлык) на сообщения, у которых есть пользовательский отрывок Удаляет ли wp_delete_user () все содержимое пользователя? PHP включает в себя действия AJAX Разрешить пользователям устанавливать автора сообщения Родительская тема style.css не имеет правила CSS. Он использует отдельный файл CSS. Зачем импортировать родительский стиль style.css, создавая несколько стилей css родителя? как комбинировать условия AND, OR и NOT, где Использование класса WPDB Действительно ли изображения WP реагируют по умолчанию? Как можно создать пост после 1 года Категории раскрывающегося списка, используемые в форме, не показывают результатов, когда все выбрано Редактор страницы отсутствует Шаблоны выпадающие Получите термин id, относящийся к пользовательской таксономии, на пользовательской странице шаблона one-post-type.php проблема options.php – данные не сохранены Получить категорию не работает на URL

Redeclare / Change Slug настраиваемого типа плагина

Возможно ли повторное использование / изменение пули существующего настраиваемого типа плагина (без простого редактирования плагина)?

То есть, если плагин X создает собственный тип сообщения с помощью slug / uncookedtoast /, можно ли добавить фильтр в functions.php (или что-то подобное), которое изменяет slug на / bread /?

Да, это возможно, но если плагин создает собственный тип сообщения, используя параметр rewrite => array('slug' => 'post_type') , то вряд ли вы сможете заменить пул ,

Когда создаются настраиваемые типы сообщений, правила перезаписи URL записываются в базу данных. В зависимости от того, какое действие инициирует создание настраиваемого типа сообщения (например, действие init ), WordPress будет очищать правила перезаписывания и восстанавливать пули пользовательского типа сообщения независимо от того, какие изменения вы пытаетесь сделать.

Тем не менее, вы можете предоставить пользовательские пули для настраиваемых типов сообщений. В следующем примере предполагается, что у вас есть настраиваемый тип movies и вы пытаетесь изменить /movies/ slug to /films/ .

Чтобы быть полным, вот основная функция, используемая для определения типа персонализированного movies . Плагин, на который вы ссылаетесь, должен делать что-то вроде этого:

 function movies_register_post_type() { register_post_type( 'movies', array( 'labels' => array( 'name' => __('Movies'), 'singular_name' => __('Movie') ), 'public' => true, 'has_archive' => true, 'rewrite' => array( 'slug' => 'movies' ) ) ); } // end example_register_post_type add_action('init', 'movies_register_post_type'); 

Вы можете изменить таблицу опций, предоставив свои собственные правила на основе существующего типа сообщений.

В принципе, мы это сделаем:

  • Возьмите существующий набор правил, а затем напишите наши собственные собственные пули
  • Дайте новому правилу более высокий приоритет, чем пул настраиваемого типа сообщения.

Вот как вы можете это сделать:

 function add_custom_rewrite_rule() { // First, try to load up the rewrite rules. We do this just in case // the default permalink structure is being used. if( ($current_rules = get_option('rewrite_rules')) ) { // Next, iterate through each custom rule adding a new rule // that replaces 'movies' with 'films' and give it a higher // priority than the existing rule. foreach($current_rules as $key => $val) { if(strpos($key, 'movies') !== false) { add_rewrite_rule(str_ireplace('movies', 'films', $key), $val, 'top'); } // end if } // end foreach } // end if/else // ...and we flush the rules flush_rewrite_rules(); } // end add_custom_rewrite_rule add_action('init', 'add_custom_rewrite_rule'); 

Теперь у вас есть два способа доступа к вашим фильмам:

  • /movies/Back-To-The-Future
  • /films/Back-To-The-Future

Обратите внимание, что я не рекомендую подключать add_custom_rewrite_rule к действию init поскольку он будет срабатывать слишком часто. Это просто пример. Лучшим местом для применения функции будет активизация темы, активизация плагина, возможно, действие save_post и т. Д. В зависимости от того, что вам нужно сделать, вам может потребоваться только один раз запустить его или несколько раз.

На этом этапе вам может потребоваться обновить постоянные ссылки для настраиваемого типа сообщений, чтобы использовать ' /movies/ slug. Например, если вы перейдете к /films/ , вы увидите список всех ваших фильмов, но зависание над заголовком покажет, что /movies/ slug все еще используется.

Чтобы сделать еще один шаг, вы можете технически установить 301 переадресацию, чтобы поймать все ссылки на /movies/ чтобы перенаправить их /films/ коллегу, но все это зависит от того, что вы пытаетесь сделать.