2017-01-05 2 views
0

Для проекта я работаю, я хочу, чтобы достичь следующей постоянную структуру для моих постов:Wordpress пользовательские почтовые Permalinks с таксономией нарушает нормальные страницы

domain.com/special/my-post-slug

где специальная пользовательская таксономия.

Что я сделал:

  • Пошел настройку> Permalinks
  • Выберите пользовательский параметр и трансформированный его на это: /% скидка% /% postname%/
  • зацепили в следующих Wordpress крючков как это:
<?php 

// in functions.php 


add_filter('post_link', 'specials_permalink', 10, 3); 
add_filter('post_type_link', 'specials_permalink', 10, 3); 

function specials_permalink($permalink, $post_id, $leavename) { 

    if (strpos($permalink, '%specials%') === FALSE) { 
     return $permalink; 
    } 

    $post = get_post($post_id); 

    if (!$post) { 
     return $permalink; 
    } 

    $terms = wp_get_object_terms($post->ID, 'specials'); 

    if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) { 
     $taxonomy_slug = $terms[0]->slug; 
    } else { 
     $categories = wp_get_post_categories($post_id->ID, array('fields' => 'all')); 

     if(isset($categories[0])) { 
      $taxonomy_slug = $categories[0]->slug; 
     } else { 
      $taxonomy_slug = 'general'; 
     } 
    } 

    $permalink = str_replace('%specials%', $taxonomy_slug, $permalink); 

    return $permalink; 
} 

Этот код прекрасно работает, но так как я добавил специальную структуру Постоянной ссылки Ф.О. r мои сообщения, мои страницы больше не будут загружаться. Все они приводят к 404. Как только я удаляю% specials% из структуры permalink, они снова работают.

При отладке я узнал, что Wordpress соответствует моим URLs, как следует:

запроса:

фр/мой-слизняк

Строка запроса:

языки = Fr & события = мой -slug

Правило согласованного правильного переоборудования:

(фр | п | еп)/([^ /] +)/$

Сопрягано переписывание запросов:

LANG = фр & события = мой-слизняк

Но это должно быть «pagename» - «специальные». Я уже пытался переназначить некоторые URL-адреса и добавить пользовательские правила перезаписи и все такое, но я не могу найти какое-либо решение. Самая странная часть состоит в том, что согласно WP Codex структура permalink применяется только к сообщениям и страницам архива, а не к страницам. Моя функция, подключенная к ссылке, не запускается при загрузке страницы. Но почему-то Wordpress считает мои страницы особенными.

Я попытался добавить как можно больше информации, но если что-то не хватает, просьба спросить.

ответ

-1

Если вы измените структуру permalink в разделе «Настройки» -> «Постоянная ссылка», вы измените ее для всех типов сообщений (я думаю).

Мое предложение: Оставьте структуру постоянных ссылок, как это по умолчанию (/%postname%/) и добавить проверку после типа в функции фильтра:

function specials_permalink($permalink, $post_id, $leavename) { 

    if ('post' != get_post_type($post_id)) { 
     return $permalink; 
    } 

    // rest of your code 

} 
+0

Если я сделаю это, мои URLs не соответствует ни перезапись править. –

 Смежные вопросы

  • Нет связанных вопросов^_^