- Вопрос или проблема
- Шаг 1: Перепишите пользовательский слуг для типа поста
- Шаг 2: Добавьте фильтр для post_type_link
- Ответ или решение
- Генерация пользовательских постоянных ссылок на основе пользовательского поля в WordPress
- Шаг 1: Изменение слага для пользовательского типа постов
- Шаг 2: Добавление фильтра для post_type_link
- Дополнительные рекомендации
Вопрос или проблема
Я новичок в WordPress.
Пока у меня есть пользовательский тип поста под названием ‘property’. Этот тип поста имеет одно пользовательское поле под названием ‘property_city’.
В админ панели WP – настройках постоянных ссылок я выбрал опцию Название записи.
Таким образом, посты этого пользовательского типа имеют URL, такие как:
http://xxx.local/properties/edge-apartments/
http://xxx.local/properties/northgate-point/
Я хочу, чтобы эти URL генерировались с использованием города недвижимости, и также хочу изменить префикс свойств на student-properties следующим образом:
http://xxx.local/student-properties/Manchester/edge-apartments/
http://xxx.local/student-properties/Chester/northgate-point/
Я пробовал различные плагины и код, но ни один из них не сработал как ожидалось.
Любая помощь будет оценена.
Спасибо,
Чтобы сгенерировать пользовательский постоянный линк на основе пользовательского поля, попробуйте следующие шаги: –
Шаг 1: Перепишите пользовательский слуг для типа поста
Предположим, что вы разработчик этого проекта, перепишите слуг для пользовательского типа поста при его регистрации. Установите slug
на any-keyword-or-cpt-base/%custom-field-name%
Смотрите следующий пример для вашего случая. В этом примере я использовал student-properties
в качестве слуга CPT для постоянных ссылок и затем слеш /
, за которым следует модификатор %city%
, который будет заменен на этапе 2 на актуальное значение города для каждой постоянной ссылки поста.
$rewrite = array(
'slug' => 'student-properties/%city%',
'with_front' => true,
'pages' => true,
'feeds' => false,
);
$args = array(
'label' => __( 'Properties', 'ds' ),
'description' => __( 'Properties', 'ds' ),
// 'labels' => $labels,
// 'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes' , 'custom-fields'),
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_icon' => 'dashicons-excerpt-view',
'menu_position' => 2,
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'rewrite' => $rewrite,
//'capabilities' => $capabilities,
'show_in_rest' => true
);
register_post_type( 'properties', $args );
Шаг 2: Добавьте фильтр для post_type_link
Чтобы заменить %custom-field-name%, который был ранее установлен в перезаписываемом слуге пользовательского типа поста, нам нужно отфильтровать вывод постоянной ссылки поста следующим образом: –
function digitalsetups_single_property_permalink( $post_link, $id = 0 ){
$post = get_post($id);
if ( is_object( $post ) ){
$property_city = get_post_meta($post->ID, 'property_city', true);
if($property_city) {
return str_replace( '%city%' , $property_city , $post_link );
}
}
return $post_link;
}
add_filter( 'post_type_link', 'digitalsetups_single_property_permalink', 1, 3 );
В приведенном выше коде имя или идентификатор пользовательского поля – это property_city
. Мы получаем значение property_city, и если оно не ложное (вы можете добавить дополнительные проверки здесь), мы заменяем %city%
на значение property_city.
Заметки и советы:
-
Эти шаги предназначены для пользовательского поля.
-
Если вы хотите добавить значение термина таксономии в перезаписываемый слуг, получите термины для таксономии в фильтре и замените на слуг термина.
Кроме того, только для случая таксономии, чтобы обеспечить последовательность в URL, установите перезаписываемый слуг таксономии таким же, как база CPT, которую вы использовали в перезаписываемом слуге CPT. Дайте знать, если это так. Я дам пример кода и больше разъяснений. -
Если вы используете плагин для перезаписи базы CPT, вы можете установить базу оттуда, например:
student-properties/%city%
, а затем в замене%city%
на ваше значение, либо из пользовательской таксономии, либо из пользовательского поля, или что-то еще через фильтрpost_type_link
– смотрите шаг 2.
Попробуйте этот плагин Custom Post Type Permalinks, он позволяет устанавливать постоянные ссылки для пользовательских типов постов. Если ваш клиент не хочет дополнительный плагин, то этот плагин также доступен на GitHub, вы можете форкнуть его или включить эту функциональность в свой собственный плагин или в ваш functions.php
.
Для того чтобы использовать что-то динамическое в постоянной ссылке, это должно быть Структурным Тегом, например, Пользовательские Таксономии, Имя Автора, Дата Публикации и т.д.
Таким образом, вам нужно иметь таксономию под названием ‘Город’, которую вы выберете при создании поста, а затем вы можете использовать эту таксономию в Setings->Permalinks
->
%city%/%postname%
Ответ или решение
Генерация пользовательских постоянных ссылок на основе пользовательского поля в WordPress
Создание пользовательских постоянных ссылок в WordPress — это задача, с которой может столкнуться не только новичок, но и опытные разработчики. В вашем случае необходимо сгенерировать URL-адреса для собственного типа поста «property» (недвижимость), основываясь на пользовательском поле «property_city» (город недвижимости), а также изменить префикс с «properties» на «student-properties».
В этом руководстве мы пошагово рассмотрим, как этого добиться.
Шаг 1: Изменение слага для пользовательского типа постов
Для начала, необходимо зарегистрировать ваши пользовательские посты с новым правилом перезаписи, используя слаг student-properties/%city%
. Пример кода для функции регистрации вашего пользовательского типа поста:
function create_property_post_type() {
$rewrite = array(
'slug' => 'student-properties/%city%',
'with_front' => true,
'pages' => true,
'feeds' => false,
);
$args = array(
'label' => __('Properties', 'ds'),
'description' => __('Properties', 'ds'),
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_icon' => 'dashicons-excerpt-view',
'menu_position' => 2,
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'rewrite' => $rewrite,
'show_in_rest' => true,
);
register_post_type('properties', $args);
}
add_action('init', 'create_property_post_type');
Шаг 2: Добавление фильтра для post_type_link
Теперь, когда вы установили слаг для пользовательского типа поста, необходимо изменить ссылку, которую будет генерировать WordPress, чтобы она использовала значение вашего пользовательского поля «property_city». Для этого используем фильтр post_type_link
:
function digitalsetups_single_property_permalink($post_link, $id = 0) {
$post = get_post($id);
if (is_object($post)) {
$property_city = get_post_meta($post->ID, 'property_city', true);
if ($property_city) {
return str_replace('%city%', sanitize_title($property_city), $post_link);
}
}
return $post_link;
}
add_filter('post_type_link', 'digitalsetups_single_property_permalink', 1, 3);
В этом фрагменте кода мы получаем значение пользовательского поля property_city
и заменяем %city%
на это значение. Использование функции sanitize_title
гарантирует, что название города будет отформатировано правильно для URL.
Дополнительные рекомендации
-
Обновление постоянных ссылок: После внесения изменений в коды, вам необходимо обновить структуру постоянных ссылок в админ-панели WordPress. Перейдите в «Настройки» -> «Постоянные ссылки» и просто нажмите «Сохранить изменения», чтобы сбросить правила перезаписи.
-
Обработка ошибок: Для повышения надежности кода, вы можете добавить дополнительные проверки на наличие значений в пользовательских полях и учесть возможность этих значений быть пустыми.
-
SEO-оптимизация: Убедитесь, что ваши URL-адреса короткие и релевантные, так как это может положительно сказаться на вашем SEO. Используйте ключевые слова, связанные с недвижимостью, и проверяйте уникальность каждую из ссылок.
-
Использование плагинов: Если вы не хотите вмешиваться в код, рассмотрите возможность использования плагинов, таких как Custom Post Type Permalinks. Эти плагины позволяют легко настраивать постоянные ссылки и могут сэкономить ваше время.
Следуя этим шагам, вы сможете успешно создать пользовательские постоянные ссылки для вашего типа поста «property», что сделает вашу структуру URL более удобной и логичной для пользователей.