Intereting Posts
Предупреждение Javascript появляется перед тегом <! DOCTYPE> Атрибуты по умолчанию для штрих-кода по умолчанию, отличные от параметров по умолчанию Приоритет add_action и таксономия, используемые в плагине Переместить боковую панель выше содержимого ниже, когда реагирование Скрыть элемент меню и его подменю и отобразить ссылку «Войти», если пользователь вышел из системы Как я могу узнать, когда я могу выполнять функции WordPress? Функция поиска панели не работает Как получить исходный комментарий при обработке ответа Как настроить аргумент поиска в WP_Query, чтобы показать только те же результаты? Как оптимизировать производительность без переходных процессов? Новые комментарии сначала не работают Как зарегистрировать меню на основе условия ACF Ограничение количества возвращенных результатов Добавление терминов таксономии на основе пользовательского поля Как я получу 1 последнее сообщение из запроса на 5 сообщений?

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

Я отправлю весь код плагина ниже. Вот проблема, с которой я сталкиваюсь. Я использую значения, которые импортируются в настраиваемые поля в настраиваемом типе сообщений для создания 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 🙁