Intereting Posts
Категория разбиения на страницы не работает Customiser `active_callback` не работает над управлением с помощью метода postMessage. WordPress wp-admin https цикл перенаправления Как использовать разбиение на страницы с помощью get_post_meta Как я могу назначить URL-адрес в качестве отображаемого изображения для публикации в базе данных wordpress Плагин электронной коммерции с функцией «купить для друга» Проверьте, включен ли пользовательский тип отправки для кнопок TinyMCE Запуск пользовательского действия при нажатии кнопки Пользовательская тема хочет удалить одну категорию из всех дисплеев Отбросьте элемент на другую страницу. Как получить дату динамически с archive.php на date.php? Previous / Next Link by Meta Value в CPT Исключить первые 2 сообщения с meta_key из цикла Сообщение о проблеме обновления повторяется, когда страница отправляется после перезагрузки страницы. Styling Admin комментарии в WP 3.1.3

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

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