Переписать пользовательский тип записи URL с другим пользовательским типом записи - PullRequest
0 голосов
/ 18 января 2019

У меня есть два пользовательских типа сообщений Location и House.

Я пытаюсь переписать URL типа домашнего сообщения на /location/%LocationName%/house

Я использовал add_filter('post_type_link', 'postTypeLink', 13, 3) для замены %LocationName%, и постоянная ссылка изменилась на нужный мне формат, однако, когда я нажимаю на ссылку, она только выдает ошибку "страница не найдена".

Я напечатал wp_query и обнаружил, что wp все еще пытается выполнить запрос Location, но с именем %LocationName%/house

например. Дом имеет пост yellow. Таким образом, URL domain.com/location/london/house/yellow сделает запрос местоположения с именем /london/house/yellow вместо запроса дома с именем yellow. это вызвало страницу, не найденную, поскольку у местоположения нет такого сообщения.

Я пытался использовать add_rewrite_rule или сохранить постоянную ссылку, но это привело только к тому же результату.

Код ниже.

    add_action( 'init', 'rewrite_tag', 10, 0 );

    function rewrite_tag() {
       add_rewrite_tag( '%locationName%', '([^/]*)/?$', 'locationName=' );
       add_rewrite_rule(
           '^location/([^/]*)/?$/house',
           'index.php?post_type=house&locationName=$matches[1]',
           'top');
       flush_rewrite_rules(false);
    }

    $args = array(
        'labels' => $labels,
        'description' => 'Manage Research Publication',
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu'  => true,
        'query_var' => true,
        'rewrite' => array(
                'slug' => 'location/%locationName%/house',
                'with_front'=> false,  
                'hierarchical' => true
        ),
        'has_archive' => false,
        'hierarchical' => true,
        'menu_icon' => 'dashicons-clipboard',
        'menu_position' => null,
        'supports' => array('title', 'editor', 'thumbnail'),
        'show_in_rest'          => true,
        'rest_base'             => 'house',
        'taxonomies' => array('category'),
        'rest_controller_class' => 'WP_REST_Posts_Controller',

    );
    register_post_type( 'house', $args );

    add_filter('post_type_link', 'postTypeLink', 13, 3);
    function postTypeLink($link, $post)    {
      global $post;
       if (get_post_type($post) === 'location') {

           $location = a variable from global post
           $link = str_replace('%LocationLName%', $location, $link);


       }
       return $link;
    }
...