Intereting Posts
Может ли кто-нибудь сказать, как «отправлять» (не страницы) в wordpress без внутреннего URL-адреса? Вывод показывает страницу вместо списка сообщений блога Как подключить 2 веб-сайта WordPress? Преобразование категории сообщений в пользовательский тип сообщения с использованием (MySQL) запросов Как изменить? Lang = cn в / cn / Выберите несколько категорий из CPT для отображения в виджере Builder LayersWP Должен ли я кэшировать выходные данные короткого кода в блоге WordPress? Гравитация Формы перенаправляются на основе условий Поиск дочерних страниц с определенного родителя страницы Измените язык плагина через его файлы Po Удалите многосайтовый «блог» из специального пользовательского типа сообщения Условные теги, возвращающие разные результаты для разных областей на странице? Получать персонализированный почтовый тип по категориям в шаблоне страницы admin-ajax.php больше не загружается Скрыть кнопку ответа после вызова метода moveForm

Как правильно переписать URL-адрес пользовательским var

Я пытался переписать магазин uri, и теперь у меня есть этот код:

add_filter('rewrite_rules_array','wp_insertMyRewriteRules'); add_filter('query_vars','wp_insertMyRewriteQueryVars'); add_filter('wp_loaded','flushRules'); // Remember to flush_rules() when adding rules function flushRules(){ global $wp_rewrite; $wp_rewrite->flush_rules(); } // Adding a new rule function wp_insertMyRewriteRules($rules) { $newrules = array(); $newrules['shop/brand/(brand)/?$'] = 'shop.php?brand=$matches[1]' ; //$wp_rewrite->rules = $new_rules + $wp_rewrite->rules; return $newrules + $rules ; } // Adding the bid var so that WP recognizes it function wp_insertMyRewriteQueryVars($vars) { array_push($vars, 'brand'); return $vars; } 

но независимо от того, что я делаю, я не могу заставить это работать. Я использую плагин Monkeyman Rewrite Analyzer для просмотра активных перезаписных файлов и что он говорит мне, что бренд «не является публичным и не будет сохранен». Кроме того, он меняет мой shop.php на shop_php …

 shop/brand/(brand)/?$ shop_php?brand: (brand) 

Почему это такой беспорядок? Я попытался как можно меньше изменить .htaccess; также, поскольку я хочу, чтобы это было в теме.

Итак, во-первых, никогда не сбрасывайте правила перезаписи на каждую загрузку страницы. Лучше сделать это при активации плагина один раз.

Шаг 1: добавьте правило перезаписи:

 add_action( 'init', 'wpse26555_add_rewrite' ); function wpse26555_add_rewrite() { // You should probably rewrite to index.php instead of shop.php? add_rewrite_rule( '/shop/brand/([^/]+)/?$', 'index.php?brand=$matches[1]', 'top' ); } 

Шаг 2: добавьте запрос var

 add_filter( 'query_vars', 'wpse26555_add_vars' ); function wpse26555_add_vars( $vars ) { $vars[] = 'brand'; return $vars; } 

Затем включите активацию плагина (потому что что-то вроде этого, вероятно, должно быть в файле плагина).

 <?php // Somewhere in your plugin's main file register_activation_hook( __FILE__, 'wpse26555_activation' ); function wpse26555_activation() { // Add the rule first wpse26555_add_rewrite(); // Then flush rewrite rules flush_rewrite_rules(); } 

Затем на переднем конце вы можете сделать что-то вроде этого:

 if( $brand = get_query_var( 'brand' ) ) { // Do stuff with $brand here } 

Может быть, лучшей стратегией было бы переписать бренд на определенную страницу? Или, может быть, бренд может быть своего рода таможенной таксономией?

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

спасибо за длинный ответ. Дело в том, что я не создаю плагин здесь, а просто пытаюсь взаимодействовать с ним. его плагин магазина [theCartPress], и я сделал свой собственный дизайн вокруг него и сделал страницу shop.php для такого типа сообщений типа [tcp_product].

Я получаю все сообщения этого типа сообщений, перенаправленные в нужный файл, но я также хочу иметь возможность отображать их по бренду. У меня есть _GET, поэтому я могу сделать? brand = mybrand, но я хочу использовать wordpress permalinks. На самом деле у меня есть обычная таксономия. Это то, что я использую после моего GET:

  if (($_GET['brand'] == 'owl') || !isset($_GET['brand'])) { $brand = 'owl'; } else { $brand = $_GET['brand']; } $args = array( 'post_type' => 'tcp_product', 'posts_per_page' => 30, 'tax_query' => array( array('taxonomy' => 'tcp_product_supplier', 'field' => 'slug', 'terms' => $brand))); $loop = new WP_Query( $args ); 

извините мод за использование ответа, но переформатирование комментариев невозможно.