Переписать URL-адрес – вставить пользовательские переменные в качестве пути к каталогу

Я пытаюсь переписать структуру permalink со своим собственным URL-адресом в WordPress для темы «Проект» Divi,

Я уже сменил «Divi slug» с «project» на «prodotti», поэтому в настоящее время URL выглядит следующим образом:

http://www.example.com/prodotti/%postname%/ 

с моей пользовательской функцией

 function custom_post_name() { return array( 'feeds' => true, 'slug' => 'prodotti', 'with_front' => false, ); } add_filter('et_project_posttype_rewrite_args', 'custom_post_name'); 

Я хочу добавить к этим URL- адресам переменную , которая находится для каждого сообщения в post_metadata , чтобы построить URL-адрес:

 http://www.example.com/prodotti/<mypostoptionvalue>/%postname%/ 

например:

 http://www.example.com/prodotti/AEX1102/%postname%/ http://www.example.com/prodotti/AEX1103/%postname%/ http://www.example.com/prodotti/AEX1104/%postname%/ 

Есть ли способ достичь такого поведения?

Я провел много тестов, используя {$permastruct}_rewrite_rules , page_rewrite_rules , post_rewrite_rules и многое другое, начиная с: https://codex.wordpress.org/Class_Reference/WP_Rewrite без результатов.

Solutions Collecting From Web of "Переписать URL-адрес – вставить пользовательские переменные в качестве пути к каталогу"

Я думаю, вы хотите сделать что-то вроде этого:

 add_action('init', 'my_rewrite'); function my_rewrite() { global $wp_rewrite; // Your desired structure $permalink_structure = '/prodotti/%my_custom_variable%/%postname%/' // add the custom variable to wp_rewrite tags $wp_rewrite->add_rewrite_tag("%my_custom_variable%", '([^/]+)', "my_custom_variable="); // Here you need to know the name of the custom post type you want the permalink structure to be used on $wp_rewrite->add_permastruct('custom_post_type_name', $permalink_structure, false); } 

Это должно изменить вашу структуру permalink для типа post. Если вы сейчас посещаете сообщение под названием «foobar» (в wp admin), он должен показать вам постоянную ссылку:

 /prodotti/%my_custom_variable%/foobar/ 

Все, что вам нужно сделать, это перехватить создание постоянной ссылки с помощью hook_ post_type_link и заменить строку «% my_custom_variable%» тем, что вы хотите, примерно так:

 add_filter('post_type_link', 'intercept_permalink', 10, 3); function intercept_permalink ($permalink, $post, $leavename) { //check if current permalink has our custom variable if ( strpos($permalink, '%my_custom_variable%') !== false ) { //get this post's meta data with $post->ID $my_str = get_post_meta($post->ID, 'meta_key'); //maybe check if post meta data is legit and perhaps have some kind of fallback if it's empty or something //Then we just replace the custom variable string with our new string $permalink = str_replace('%my_custom_variable%', strtolower($my_str), $permalink); } return $permalink; } 

Я не тестировал этот конкретный код, но недавно я сделал аналогичные вещи в одном из моих проектов