Wordpress – пользовательская постоянная ссылка принимает любые параметрыPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Wordpress – пользовательская постоянная ссылка принимает любые параметры

Сообщение Anonymous »

Мне нужно создать собственную структуру постоянных ссылок, я хочу отображать пользовательскую таксономию в URL-адресе, например:

Код: Выделить всё

www.example.com/ristoranti/italia/milano/my-post-slug
Первый сегмент — это категория сообщений, добавленная с помощью меню «Категории WP».
и milano — это таксономии, созданные с помощью специального плагина, где milano является дочерним элементом italia:

Код: Выделить всё

function mlt_create_custom_taxonomies()
{
$labels = [
'name'              => _x( 'Locations', 'taxonomy general name', 'mlt' ),
'singular_name'     => _x( 'Location', 'taxonomy singular name', 'mlt' ),
'search_items'      => __( 'Search Locations', 'mlt' ),
'all_items'         => __( 'All Locations', 'mlt' ),
'parent_item'       => __( 'Parent Location', 'mlt' ),
'parent_item_colon' => __( 'Parent Location:', 'mlt' ),
'edit_item'         => __( 'Edit Location', 'mlt' ),
'update_item'       => __( 'Update Location', 'mlt' ),
'add_new_item'      => __( 'Add New Location', 'mlt' ),
'new_item_name'     => __( 'New Location Name', 'mlt' ),
'menu_name'         => __( 'Location', 'mlt' ),
];

$args = [
'labels' => $labels,
'exclude_from_search' => true,
'has_archive'         => true,
'hierarchical'        => true,
'rewrite'             => array( 'with_front' => false, 'hierarchical'        => true, ),
'show_ui'             => true,
'show_tagcloud'       => false,
];

register_taxonomy( 'location', [ 'post' ], $args );
}
add_action('init', 'mlt_create_custom_taxonomies');
Чтобы добавить пользовательские таксономии к URL-адресу, я отредактировал структуру постоянных ссылок следующим образом:

Код: Выделить всё

/%category%/%location%/%postname%/
Я также добавил правило перезаписи для %location%, чтобы добавить таксономии:

Код: Выделить всё

function location_post_type_link( $link, $post ) {

if ('post' == $post->post_type) {
if ( $terms = get_the_terms( $post->ID, 'location' ) ) {
foreach ($terms as $term) {
$tax_array[] = $term->slug;
}
$link = str_replace( '%location%', implode('/',$tax_array), $link );
}
}
return $link;
}
add_filter( 'post_link', 'location_post_type_link', 10, 2 );
С помощью этого кода я могу создать ссылку.

Проблема в том, что если я создам поддельный URL-адрес, например:

Код: Выделить всё

www.example.com/ristoranti/XXXXX/XXXX/my-post-slug
Я вижу сообщение, хотя XXXX/XXX совершенно неверны.

Как это возможно? Как я могу убедиться, что таксономия в URL-адресе правильна?

Подробнее здесь: https://stackoverflow.com/questions/444 ... any-params
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»