chris
  • 0
Учитель

Создание правила перезаписи для пост-запросов sSecific из отправленной формы?

  • 0

У меня есть форма (метод post), которая позволяет фильтровать мои сообщения по определенным критериям, например, «Самые последние», «На этой неделе», «На прошлой неделе»,…

Он отлично работает, но, конечно, URL-адрес один и тот же для каждого запроса. Я не хочу менять метод отправки на GET и менять URL-адрес с помощью этого трюка. Я ищу решение, в котором я могу добавить правило перезаписи к существующим, что позволило бы иметь «динамические» URL-адреса, такие как

http://myurl.com/самый

последний http://myurl.com/последняя неделя

http://myurl.com/category-1/самый последний

http://myurl.com/category-1/последний -неделю

Правило перезаписи, которое ищет слова «самый последний», «последняя неделя»… в конце URL-адреса, удаляет их, а затем возвращается к обычным правилам перезаписи. Таким образом, этот предопределенный почтовый запрос будет работать для категорий, страниц, сообщений и т. д.

Надеюсь, вы, ребята, понимаете, что я имею в виду!

Share
  1. Думаю, это будет не слишком сложно. Предполагая, что количество пользовательских «динамических» URL-адресов известно, это должно помочь:

    foreach ( array( 'most-recent','last-week','category-1/most-recent','category-1/last-week') as $page )
      add_rewrite_rule( "$page/?$", 'index.php', 'top' );
    

    Это говорит WordPress: «Всякий раз, когда у вас есть структура URL-адреса, соответствующая X, относитесь к ней так, как если бы URL-адрес был просто site.com/index.php, и проверяйте это правило прежде всего». WordPress будет рассматривать ее как домашнюю страницу, но также отправит $_POST информацию из формы и получит правильную информацию.

    Этот первый аргумент является регулярным выражением, поэтому было бы неплохо preg_quote() заранее прогнать каждый элемент.

    Надеюсь, это помогло!

    РЕДАКТИРОВАТЬ

    Я бы настоятельно рекомендовал не использовать какие-либо регулярные выражения с подстановочными знаками для этой операции. В противном случае страницы начнут соответствовать этому правилу.

    Для наших целей думайте об этих структурах как о позициях, разделенных символом / . Например, в category-1/most-recent позиция 1 будет, category-1 а позиция 2 будет most-recent . Итак, для всех структур создайте массив для каждой позиции со всеми строками, которые могут войти в эту позицию. Итак, у вас может быть что-то вроде этого:

    $timing = array(
      'most-recent',
      'last-week',
    );
    $cats = array(
      'category-1',
      'category-2',
      'category-3'
    );
    $timing = array_map( 'preg_quote', $timing );
    $timing = implode( '|', $timing );
    $cats = array_map( 'preg_quote', $cats );
    $cats = implode( '|', $cats );
    add_rewrite_rule( "($timing)/?$", 'index.php', 'top' );
    add_rewrite_rule( "($cats)/($timing)/?$", 'index.php', 'top' );
    
    • 0
    • Спасибо за оказанную помощь. Но у меня есть 2 вопроса. 1. Это добавляет новое правило перезаписи поверх других, верно? поэтому его следует добавить в событие, такое как правила flush_rewrite..? чтобы он не добавлялся при каждом запросе страницы? 2. Можно ли сделать регулярное выражение более адаптивным; так что это будет работать для каждой категории? например, представьте, что у вас есть 10 категорий и 5 фильтров, тогда вам нужно добавить 50 правил перезаписи, хотя на самом деле вам нужен только один. Меня не волнует, если я в конечном итоге не смогу иметь страницу, сообщение или категорию, такие как последняя неделя, самые последние,…

      • 0
    • Я бы просто подключил его к init. Вам нужно сбросить правила перезаписи, чтобы они тоже вступили в силу. Я изменю ответ, чтобы включить ответ на второй вопрос.

      • 0
    • можете ли вы взглянуть на вопрос ниже ПОЖАЛУЙСТА

      • 0
  2. я часами пытался именно то, что вы написали, и хотя начал гуглить и исследовать… это просто не работает. Хотя я написал небольшую функцию, которая показывает правила перезаписи в админке. Я сделал снимок экрана и прикрепил его, а хотя и ссылку. Было бы здорово, если бы у вас или у кого-то есть решение или идея….

    вот одна ссылка, которая должна работать. Я опускаю категории, чтобы немного упростить это.

    http://localhost/myurl.com/summarizes/interviews/from-this-week

    мне не разрешено прикреплять снимок экрана, это правило добавляется

    (с этой недели|с этого месяца|с момента большого взрыва)/?$ index.php (резюме/интервью)/(с этой недели|с этого месяца|с момента большого взрыва) /?$ index.php

    • 0

Оставить ответ

You must login to add an answer.