За последние 24 часа нас посетили 73882 программиста и 10145 роботов. Сейчас ищут 2845 программистов ...

Убрать slug произвольного типа записей из URL

Тема в разделе "PHP для новичков", создана пользователем TigraDP, 27 фев 2018.

  1. TigraDP

    TigraDP Новичок

    С нами с:
    27 фев 2018
    Сообщения:
    2
    Симпатии:
    0
    Привет. Помогите решить задачку. Сам я немного не очень в этом...
    Нужно убрать slug произвольного типа записей из URL - WordPress
    В сети нашел функцию. Все работает, но у меня несколько типов записи и не пойму как их все обработать. Вот функция для одного типа:

    function remove_post_slug( $post_link, $post, $leavename ) {

    if ( 'тип записи'!= $post->post_type || 'publish' != $post->post_status )

    {
    return $post_link;
    }


    $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );

    return $post_link;

    }
    add_filter( 'post_type_link', 'remove_post_slug', 10, 3 );


    function parse_request_trick( $query ) {

    if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
    return;
    }

    if ( ! empty( $query->query['name'] ) ) {
    $query->set( 'post_type', array( 'post', 'тип записи', 'page' ) );
    }

    }
    add_action( 'pre_get_posts', 'parse_request_trick' );


    Как перебрать условия в первой функции я разобрался
    -------------
    function remove_post_slug( $post_link, $post, $leavename ) {

    if ( ('тип записи1'!= $post->post_type)&& ('тип записи2'!= $post->post_type)&& ('тип записи3'!= $post->post_type)&& || 'publish' != $post->post_status )

    {
    return $post_link;
    }


    $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );

    return $post_link;

    }
    add_filter( 'post_type_link', 'remove_post_slug', 10, 3 );

    ----------

    А вот как теперь перебрать и вывести нужный мне массив не могу понять


    ----------------
    function parse_request_trick( $query ) {

    if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
    return;
    }

    if ( ! empty( $query->query['name'] ) ) {
    $query->set( 'post_type', array( 'post', 'тип записи', 'page' ) );
    }

    }
    add_action( 'pre_get_posts', 'parse_request_trick' );
    -------------------

    Спасибо, если кто ответит...
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Ну вот же, указываешь все типы записей, и радуешься.

    Хотя лично я такие трюки не люблю
     
  3. TigraDP

    TigraDP Новичок

    С нами с:
    27 фев 2018
    Сообщения:
    2
    Симпатии:
    0
    Спасибо. Все заработало. А можно подробней, почему не любите такие трюки и какая альтернатива? Проблема в том, что postype высвечивается в урле перед самим постом. Типа домен/постайп/пост... А если удалит из строки имя поста и перейти на домен/постайп, то там ничего не будет ибо это не страница. А некоторые пользователи любят переходить по категориям таким образом. Ну и гугл индексирует подобную ссылку и с выдачи можно попасть в точку сайта, которой не существует.
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Гугл сам по себе ничего не индексирует, он ходит только по тем ссылкам, которые есть на сайте или в интернете. Он не делает предположений о структуре сайта.
    Там архив, по идее.

    Не люблю, потому что это вмешательство в работу ядра WP.