Intereting Posts
Удалить действие из внешнего класса Демистификация и понимание номенклатуры коротких кодов Показать флаг страны в профиле WordPress / Buddypress Проблема с слайдером в wordpress Проверка на стороне сервера для контактной формы 7 Использование другого шаблона в пользовательских таксономии для одностраничных страниц архива Не удалось экспортировать плагины база данных, отправленная в файл JSON «Ошибка при подключении к базе данных» при попытке запустить скрипт через crontab Как показать все сообщения CPT на одной странице? Включать сообщения из некоторых категорий, исключая из других Проблема с классом, фильтрами и обратными вызовами Возможно ли установить WordPress MU на поддомен? Автоматически задавать изображение с первого URL (или тега) первого изображения в статье Как WordPress решает, какой шаблон использовать в качестве главной страницы

Пользовательские поля Постоянная ссылка Плагин не соблюдает дефисы

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

site.com/real-estate/%postname%-%field_City%-%field_State%-%field_Zip_Code%/

в виде

site.com/real-estate/51-main-st- port- jefferson -ny-11777 /

Постоянная ссылка однако составляет 404 .. хотя, если я удалю дефисы в название города и поиск ..

site.com/real-estate/51-main-st- portjefferson -ny-11777 /

чем работает url.

Поэтому я предполагаю, что плагин пропускает что-то с полями с пробелами. Странно, что он корректно отображается в поле permalink в редакторе сообщений, хотя … любая помощь будет высоко оценена.

<?php /* Plugin Name: Custom Fields Permalink 2 Plugin URI: http://athlan.pl/wordpress-custom-fields-permalink-plugin Description: Plugin allows to use post's custom fields values in permalink structure by adding %field_fieldname%, for posts, pages and custom post types. Author: Piotr Pelczar Version: 2.0 Author URI: http://athlan.pl/ */ class CustomFieldsPermalink { const PARAM_CUSTOMFIELD_KEY = 'custom_field_key'; const PARAM_CUSTOMFIELD_VALUE = 'custom_field_value'; public static $checkCustomFieldValue = false; public static function linkPost($permalink, $post, $leavename) { return self::linkRewriteFields($permalink, $post); } public static function linkPostType($permalink, $post, $leavename, $sample) { return self::linkRewriteFields($permalink, $post); } protected static function linkRewriteFields($permalink, $post) { $replaceCallback = function($matches) use (&$post) { return CustomFieldsPermalink::linkRewriteFieldsExtract($post, $matches[2]); }; return preg_replace_callback('#(%field_(.*?)%)#', $replaceCallback, $permalink); } public static function linkRewriteFieldsExtract($post, $fieldName) { $postMeta = get_post_meta($post->ID); if(!isset($postMeta[$fieldName])) return ''; $value = implode('', $postMeta[$fieldName]); $value = sanitize_title($value); return $value; } public static function registerExtraQueryVars($value) { array_push($value, self::PARAM_CUSTOMFIELD_KEY, self::PARAM_CUSTOMFIELD_VALUE); return $value; } public static function processRequest($value) { // additional parameters added to WordPress // Main Loop query if(array_key_exists(self::PARAM_CUSTOMFIELD_KEY, $value)) { $value['meta_key'] = $value[self::PARAM_CUSTOMFIELD_KEY]; // remove temporary injected parameter unset($value[self::PARAM_CUSTOMFIELD_KEY]); // do not check field's value for this moment if(true === self::$checkCustomFieldValue) { if(array_key_exists(self::PARAM_CUSTOMFIELD_VALUE, $value)) { $value['meta_value'] = $value[self::PARAM_CUSTOMFIELD_VALUE]; // remove temporary injected parameter unset($value[self::PARAM_CUSTOMFIELD_VALUE]); } } } return $value; } public static function rewriteRulesArrayFilter($rules) { $keys = array_keys($rules); $tmp = $rules; $rules = array(); for($i = 0, $j = sizeof($keys); $i < $j; ++$i) { $key = $keys[$i]; if (preg_match('/%field_([^%]*?)%/', $key)) { $keyNew = preg_replace( '/%field_([^%]*?)%/', '([^/]+)', // you can simply add next group to the url, because WordPress // detect them automatically and add next $matches indiceis $key ); $rules[$keyNew] = preg_replace( '/%field_([^%]*?)%/', sprintf('%s=$1&%s=', self::PARAM_CUSTOMFIELD_KEY, self::PARAM_CUSTOMFIELD_VALUE), // here on the end will be pasted $matches[$i] from $keyNew, so we can // grab it it the future in self::PARAM_CUSTOMFIELD_VALUE parameter $tmp[$key] ); } else { $rules[$key] = $tmp[$key]; } } return $rules; } } add_filter('pre_post_link', array('CustomFieldsPermalink', 'linkPost'), 100, 3); add_filter('post_type_link', array('CustomFieldsPermalink', 'linkPostType'), 100, 4); add_filter('rewrite_rules_array', array('CustomFieldsPermalink', 'rewriteRulesArrayFilter')); add_filter('query_vars', array('CustomFieldsPermalink', 'registerExtraQueryVars'), 10, 1); add_filter('request', array('CustomFieldsPermalink', 'processRequest'), 10, 1); 

Я ДУМАЛ, ЧТО Я НАПРЯЛ РЕШЕНИЕ .. НО … Я думал, что использование шестнадцатеричного кода для дефиса (% 2D) в настройках постоянной ссылки было решением .. но оказывается, что это работает только в браузере Chrome .. не в IE или Edge .. так что я до сих пор без решения 🙁

Solutions Collecting From Web of "Пользовательские поля Постоянная ссылка Плагин не соблюдает дефисы"

Используйте знак подчеркивания вместо дефиса. Вы можете видеть, что другие имеют ту же проблему. Проблема с подчеркиванием устраняет проблему.

Использование подчеркиваний вместо дефис в постоянной ссылке

НЕВАЖНО

Мне потребовалось некоторое время, чтобы добраться до этого .. но предположение, что использование подчеркивания в качестве разделителей в плагине вместо дефиса, наконец, заставило меня задуматься. Итак, я решил попробовать использовать шестнадцатеричный код для дефиса (% 2D) в качестве разделителя в настройках постоянной ссылки, а низкий – и вот, он сработал.

Итак, если есть другие, которые ищут решение этой проблемы, просто используйте% 2D вместо – при разделении значений настраиваемого поля в поле установки постоянной ссылки.

ВЫКЛЮЧАЕТ ЭТО ТОЛЬКО РАБОТАЕТ В ХРОМЕ .. не работает в firefox или edge 🙁