Как переписать URL пользовательского типа сообщения без типа сообщения в URL - PullRequest
0 голосов
/ 26 декабря 2018

Я работаю на сайте тура.Где у них есть пользовательский тип поста, созданный с помощью специального плагина.Этот пользовательский тип записи имеет базовый слаг, например "/destination/".$post->post_name.Они хотят, чтобы я удалил этот базовый слаг, чтобы он мог быть только $ post-> post_name

Я попробовал код из Интернета, указанный ниже.

Он работает на одном уровне для этого места назначения,Но когда у меня есть родительский пункт назначения, как Нью-Йорк в Соединенных Штатах Америки.Так что не работает.Вот пример:

function update_destination_page_link_filter($post_link, $post, $leavename = null, $sample = null ) {
    if ( $post->post_type === 'destination' ) {
        $post_link = str_replace('/destination/', '/', $post_link);
        if($post->post_parent !== 0){
            $parent_slug = get_parent_link($post->post_parent, '');
            $post_link = '/'.$parent_slug.$post->post_name;
        }
        $post_link = update_url_base( $post, $post_link );
    }
    return $post_link;
}

add_filter( 'post_type_link', 'update_destination_page_link_filter', 1, 3 );


function allow_destination_direct_by_name( $query ) {
     // Only noop the main query
    if ( ! $query->is_main_query() )
        return;

    // Only noop our very specific rewrite rule match
    if ( 2 != count( $query->query )
        || ! isset( $query->query['page'] ) )
        return;

    // 'name' will be set if post permalinks are just post_name, otherwise the page rule will match
    if ( ! empty( $query->query['name'] ) )
        $query->set( 'post_type', array( 'post', 'destination', 'page' ) );
}
add_action( 'pre_get_posts', 'allow_destination_direct_by_name', 1);

Один уровень http://siteurl/united-state-america работает хорошо http://siteurl/united-state-america/new-york не работает.Должна открыться страница местоположения в Нью-Йорке, но она показывает 404. Она также может быть более точной для определения местоположения, например http://siteurl/united-state-america/new-york/brooklyn

1 Ответ

0 голосов
/ 27 декабря 2018

В этом отношении вам может помочь следующий код.

add_filter( 'post_type_link', 'my_post_type_link', 10, 3);
function my_post_type_link($permalink, $post, $leavename) {

    if  ($post->post_type == <your-post-type>) 
    {
        $p_name=$post->post_name;
        $parent_slug = get_parent_link($post->post_parent, '');
        if (isset($parent_slug) && !empty($parent_slug)) 
        {
            $permalink = home_url( "" . $parent_slug . "/" . $p_name . "/");
        }
    }

    return $permalink;

}

add_filter( 'rewrite_rules_array', 'my_rewrite_rules_array');
function my_rewrite_rules_array($rules) {

    $rules = array('([^/]*)/([^/]*)/?$' => 'index.php?post_type=<your-post-type>&name=$matches[2]&meta=$matches[1]') + $rules;

    return $rules;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...