вообщем в чем проблема есть сайт на вп нужна структура ссылок ЧПУ состояющая из таксономий. Сразу говорю что статью подсмотрел на каме, под себя переделал и урлы поменялись в админке на те что нужны мне и ссылки тоже везде поменялись но проблема в том что выдает 404 ошибку при переходе по ссылкам. Я уже и обновлял пермалинки в постоянных ссылках меню и произвольные пермалинки поставил %postname и что только не делал но заставить понимать вп мои ссылки никак не могу. Мой код ниже. Посоветуйте что-то ибо дня 4 уже сижу над этой проблемой.
add_filter('term_link', 'deal_realty_tax_link_fix', 10, 3);
function deal_realty_tax_link_fix( $link, $term, $taxonomy ){
if( ! in_array( $taxonomy, array('property-status') ) ) return $link;
$uri = $_SERVER['REQUEST_URL'];
if( $taxonomy == 'property-status' ){
$link = preg_replace('~^(.*?/)(?:'. implode('|', __type_deal_elements()) .')/.*~', '\1', $uri ) . $term->slug;
}
return esc_url( user_trailingslashit(home_url($link)));
}
if(1){
//add_action('wp', 'xxxxxxx'); // debug
function xxxxxxx($wp){
print_r( get_queried_object() );
print_r( $wp );
print_r( $GLOBALS['wp_rewrite'] );
exit;
}
global $wp_rewrite;
$wp_rewrite->add_permastruct('property', '%property-status%/%property-type%/%property-city%/%postname%/', false);
// поправим параметры запроса - удалим 'country' и добавим 'post_type=realty', потому что '?p=208' не работает, а '?p=208&post_type=realty' работает
//$this->query_vars = apply_filters( 'request', $this->query_vars );
add_action('request', 'remove_unwanted_query_vars' );
function remove_unwanted_query_vars( $vars ){
if( !empty($vars['property-city']) ){
$_city = explode('/', $vars['property-city']);
$vars['property-city'] = end( $_city ); // последний элемент
}
if( !empty($vars['property-type']) ){
$_property_type = explode('/', $vars['property-type']);
$vars['property-type'] = end( $_property_type ); // последний элемент
}
// запрос типа записи 'realty' - параметры: country, type_realty, type_deal
if( isset($vars['p'], $vars['property-type']) && $vars['post_type'] === 'property' ){
$deal = __type_deal_elements();
if( $vars['property-status'] == end($deal) )
unset( $vars['property-status'] );
}
return $vars;
}
//add_rewrite_rule('^property/.+?/(?:sale|rent)/.+?/([0-9]+)/?', 'index.php?p=$matches[1]&post_type=property', 'top' );
add_filter('property'.'_rewrite_rules', 'delete_property_rewrite_rules' );
function delete_property_rewrite_rules( $rules ){
// должен быть до правил стран
$rules = array(
'property/('. implode('|', __type_deal_elements() ) .')/(.+?)/(.+?)/([0-9]+)/?$' => 'index.php?post_type=property&p=$matches[1]&property-status=$matches[2]&property-type=$matches[3]&property-city=$matches[4]',
);
return $rules;
}
## добавим правила перезаписи для 'country', 'type_deal', 'type_realty'
add_filter('city'.'_rewrite_rules', 'add_more_city_rewrite_rules' );
function add_more_city_rewrite_rules( $rules ){
// должен быть после правил типа запии 'realty'
$_first_part = '/(.+?)/('. implode('|', __type_deal_elements() ).')';
$_pade_part = 'page/?([0-9]{1,})';
$more_riles = array(
"$_first_part/(.+?)/$_pade_part/?$" => 'property-status=$matches[1]&property-type=$matches[2]&property-city=$matches[3]&paged=$matches[4]',
"$_first_part/$_pade_part/?$" => 'property-status=$matches[1]&property-type=$matches[2]&paged=$matches[3]',
"$_first_part/(.+?)/?$" => 'property-status=$matches[1]&property-type=$matches[2]&property-city=$matches[3]',
"$_first_part/?$" => 'property-status=$matches[1]&property-type=$matches[2]',
);
$rules = array_merge( $more_riles, $rules );
//die( print_r($rules) );
return $rules;
}
// array( sale, rent, sale-rent )
function __type_deal_elements(){
$deal_terms = get_terms(array( 'taxonomy'=>'property-status','hide_empty'=>0, 'fields'=>'id=>slug' ));
//$deal_terms[] = implode('-', $deal_terms); // sale-rent
return $deal_terms;
}
## Отфильтруем ЧПУ произвольного типа
add_filter('post_type_link', 'property_permalink', 1, 2);
function property_permalink( $permalink, $post ){
if( false === strpos($permalink, '%property-city%') ) return $permalink;
//global $wp_rewrite;
//$perm = $wp_rewrite->get_extra_permastruct('realty');
// Получаем элементы таксы 'country'
$city_path = __build_tax_uri( get_the_terms( $post, 'property-city') ); // много уровней - asd/asd
// type_realty_path
$property_type_path = __build_tax_uri( get_the_terms( $post, 'property-type') ); // много уровней - asd/asd
$property_status_path = __build_tax_uri( get_the_terms( $post, 'property-status') ); // один уровень - asd
return strtr( $permalink, array(
'%property-status%' => $property_status_path,
'%property-type%' => $property_type_path,
'%property-city%' => $city_path,
'%postname%' => $post->post_name,
) );
}
## Получает цепочку из ярлыков указанного термина - вврехи пока у термина не будет родителей - 'parent/child/child'
function __build_tax_uri( $terms ){
if( is_wp_error($terms) || empty($terms) || ! ( is_object(reset($terms)) || is_object($terms) ) )
return 'no_terms'; // элемента таксы нет, а должен быть...
$term = is_object(reset($terms)) ? reset($terms) : $terms;
$path = array( $term->slug );
while( $term->parent ){
$term = get_term( $term->parent );
$path[] = $term->slug;
}
return implode('/', array_reverse($path) );
}
add_action('template_redirect', 'rudr_post_type_redirect');
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Мне надо хранить в классе соответствия между строками и числамиПорядок не важен, поэтому хочу использовать std::unordered_map, причём строки должны...
Файл helloexe, при запуске требует dll'ки, могу закинуть их в папку, но можно ли сделать hello
Есть класс в котором перегружаются операцииВ main происходит тестирование перегрузок, т