Одинаковые url в разных категориях wordpress

E1
На сайте с 05.09.2010
Offline
122
5032

Здравствуйте!

Сайт надо перевести на WP. И есть определенная структура, которую надо повторить.

Вопрос: есть ли возможность реализовать средствами вордпресса следующую ситуацию:

site.ru/articles/page.html

site.ru/news/page.html

т.е., чтобы в разных категориях были страницы с одинаковыми slug?

Спасибо

A
На сайте с 23.11.2016
Offline
7
#1
End1:
Здравствуйте!
Сайт надо перевести на WP. И есть определенная структура, которую надо повторить.

Вопрос: есть ли возможность реализовать средствами вордпресса следующую ситуацию:
site.ru/articles/page.html
site.ru/news/page.html
т.е., чтобы в разных категориях были страницы с одинаковыми slug?

Спасибо

Да. Проблем не будет.

E1
На сайте с 05.09.2010
Offline
122
#2

..так-то есть проблема ))

Wordpress не даёт указать одино и то же url страницы в разных категориях.

A
На сайте с 23.11.2016
Offline
7
#3
End1:
..так-то есть проблема ))
Wordpress не даёт указать одино и то же url страницы в разных категориях.

Url конечно должны быть разными. Но slug - это не есть url

TA
На сайте с 12.06.2009
Offline
116
TiA
#4
End1:
т.е., чтобы в разных категориях были страницы с одинаковыми slug?

В WordPress slug-и (псевдонимы) для категорий и записей в рамках одного типа должны быть уникальными. Обойти это ограничение сложно. Гораздо проще будет настроить редиект.

Профессиональная верстка и разработка сайтов на WordPress (http://www.maultalk.com/topic139110s0.html)
E1
На сайте с 05.09.2010
Offline
122
#5

Как всё сложно с вами, сударь :)

Не даёт wordpress указать один и тот же postname 2 раза.

Например вот так никак не получается:

site.ru/articles/postname.html

site.ru/news/postname.html

TA
На сайте с 12.06.2009
Offline
116
TiA
#6

End1, WordPress и дополнения к нему иногда используют выборку категории по slug (https://codex.wordpress.org/Function_Reference/get_category_by_slug). Если будет две категории с одинаковым псевдонимом, то указанная функция будет работать неправильно.

A
На сайте с 23.11.2016
Offline
7
#7
End1:
Как всё сложно с вами, сударь :)

Не даёт wordpress указать один и тот же postname 2 раза.

Например вот так никак не получается:
site.ru/articles/postname.html
site.ru/news/postname.html

да я понял Вас, я почему то подумал, что таких ограничений нет в wp. По Вашему вопросу можно сделать следующее

function wp_cpt_unique_post_slug($slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug) {

if ( in_array( $post_status, array( 'draft', 'pending', 'auto-draft' ) ) )
return $slug;

global $wpdb, $wp_rewrite;

// store slug made by original function
$wp_slug = $slug;

// reset slug to original slug
$slug = $original_slug;

$feeds = $wp_rewrite->feeds;
if ( ! is_array( $feeds ) )
$feeds = array();

$hierarchical_post_types = get_post_types( array('hierarchical' => true) );
if ( 'attachment' == $post_type ) {
// Attachment slugs must be unique across all types.
$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND ID != %d LIMIT 1";
$post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_ID ) );

if ( $post_name_check || in_array( $slug, $feeds ) || apply_filters( 'wp_unique_post_slug_is_bad_attachment_slug', false, $slug ) ) {
$suffix = 2;
do {
$alt_post_name = substr ($slug, 0, (200 - ( strlen( $suffix ) + 1 )) ) . "-$suffix";
$post_name_check = $wpdb->get_var( $wpdb->prepare($check_sql, $alt_post_name, $post_ID ) );
$suffix++;
} while ( $post_name_check );
$slug = $alt_post_name;
}
} elseif ( in_array( $post_type, $hierarchical_post_types ) ) {
if ( 'nav_menu_item' == $post_type )
return $slug;
// Page slugs must be unique within their own trees. Pages are in a separate
// namespace than posts so page slugs are allowed to overlap post slugs.
$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d AND post_parent = %d LIMIT 1";
$post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_type, $post_ID, $post_parent ) );

if ( $post_name_check || in_array( $slug, $feeds ) || preg_match( "@^($wp_rewrite->pagination_base)?\d+$@", $slug ) || apply_filters( 'wp_unique_post_slug_is_bad_hierarchical_slug', false, $slug, $post_type, $post_parent ) ) {
// $suffix = 2;
// do {
$alt_post_name = substr( $slug, 0, (200 - ( strlen( $suffix ) + 1 )) );// . "-$suffix";
// $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name, $post_type, $post_ID, $post_parent ) );
// $suffix++;
// } while ( $post_name_check );
$slug = $alt_post_name;
}
} else {
// Post slugs must be unique across all posts.
$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type = %s AND ID != %d LIMIT 1";
$post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_type, $post_ID ) );

if ( $post_name_check || in_array( $slug, $feeds ) || apply_filters( 'wp_unique_post_slug_is_bad_flat_slug', false, $slug, $post_type ) ) {
// $suffix = 2;
// do {
$alt_post_name = substr( $slug, 0, (200 - ( strlen( $suffix ) + 1 )) );// . "-$suffix";
// $post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $alt_post_name, $post_type, $post_ID ) );
// $suffix++;
// } while ( $post_name_check );
$slug = $alt_post_name;
}
}

return $slug;
}
add_filter('wp_unique_post_slug', 'wp_cpt_unique_post_slug', 10, 6);
- если это вставить в functions.php, то wp не будет проверять ссылки. Я просто закомментировал те места, где прибавляется суфикс. Нужно конечно сделать все по умному. Сейчас у меня мозгов не хватит. Если у Вас не получится я завтра отпишу как правильно. Постараюсь)
u3Bepr
На сайте с 03.03.2011
Offline
60
#8

если переносите сайт на вордпресс, то делайте сразу нормально и правильно - задавайте для каждого УРЛ уникальные значения, а старые ссылки свои редиректом направляйте на новый УРЛ. для этого и плагин можно вкинуть, что бы в хтакес не писать кучу правил

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий