Как получить красивые URL-адреса с помощью add_query_arg в permalinks

С помощью add_query_arg() приятно добавлять дополнительные параметры к URL-адресу, а также легко создать правило перезаписи. Все идет нормально. Но проблема заключается в замене URL, выполняемой wordpress.

Когда у меня есть URL-адрес, например:

www.mysite.com/?page_id=1&myvar=test

, и я набираю этот URL-адрес в адресную строку браузера с активированными постоянными ссылками. Эта ссылка станет следующей:

www.example.com/pagename/?myvar=test

НО : я бы хотел получить:

www.example.com/pagename/test

Наконец, я хотел бы использовать код вроде:

<a href="<?php add_query_arg( 'myvar', 'test', get_permalink() ) ?>"> .... </a>

, что приведет к:

www.example.com/pagename/test

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

7 голосов | спросил user3114592 20 FriEurope/Moscow2013-12-20T12:55:20+04:00Europe/Moscow12bEurope/MoscowFri, 20 Dec 2013 12:55:20 +0400 2013, 12:55:20

2 ответа


4

Просто столкнулся с такой же ситуацией и наткнулся на этот вопрос во время поиска.

Кажется, что это невозможно. Сам Core просто добавляет строки к URL-адресу, если разрешены довольно постоянные ссылки, см. https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/link-template.php#L571

Для всех, кто заинтересован в этом: вы можете сделать что-то подобное в своем коде:

if ( '' != get_option('permalink_structure') ) {
    // using pretty permalinks, append to url
    $read = user_trailingslashit( get_permalink() . 'test' ); // www.example.com/pagename/test
  } else {
    $read = add_query_arg( 'test', '', get_permalink() ); // www.example.com/pagename/?test
  }

Это решение также было рекомендовано Jon Cave в комментарии к официальному блогу: https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686

ответил swissspidy 10 J000000Thursday14 2014, 21:14:30
0

Решение Wordpress должно было бы добавить правила перезаписи, чтобы сделать что-то вроде этого:

    add_action( 'init', 'my_rewrite_add_rewrites' );
    function my_rewrite_add_rewrites()
    {
        add_rewrite_rule( 'calendar/([0-9]{4})/?$', 'index.php?post_type=events&year=$matches[1]', 'top' );
        add_rewrite_rule( 'calendar/([0-9]{4})/page/?([0-9]{1,})/?$', 'index.php?post_type=events&year=$matches[1]&paged=$matches[2]', 'top' );
    }

подробнее: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule

ответил Jonathan Joosten 16 FebruaryEurope/MoscowbThu, 16 Feb 2017 12:05:53 +0300000000pmThu, 16 Feb 2017 12:05:53 +030017 2017, 12:05:53

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132