2015-01-08 3 views
0

Я использую постоянные ссылки на мои сообщения в Wordpress. Мой постоянная ссылка /%category%/%postname%/ - так ссылки ссылаются на название категории. Моя проблема в том, что я использую некоторые категории для группировки своих сообщений. Например: признакам, рекомендации модераторов и т. Д. Я хочу, чтобы эти категории отображались в ссылках. Возможно ли это, и если да, то как это можно сделать?Постоянная ссылка на этот вопрос с категорией

+0

Если вы используете категорию слизняка он уже должен показывать ... но это звучит, как вы используете какой-то тип файла шаблона для " группировать ваши сообщения ". Если бы вы могли предоставить этот код или начать там ... –

+0

@TimHallman Мои сообщения имеют 2 или 3 категории. Я хочу исключить некоторые категории из постоянных ссылок. –

+0

Хорошо, получилось ... возможно, нужно фильтровать постоянные ссылки. Я приведу ниже пример с примером. –

ответ

1
add_filter('post_link', 'filter_permalink_categories', 10, 3); 

function filter_permalink_categories($permalink, $post, $catname) { 

    if($post->filter == $catname) { 

     $permalink = str_replace($catname, '', $permalink); 

    } 

    return $permalink; 

} 

Это может быть не совсем то, что вам нужно, но должно дать вам представление о том, как фильтровать постоянные ссылки.

Кроме того, вы можете проверить фильтр category_link. Извините, Wordpress CODEX не работает heres the link though

+0

Этот метод очищает категорию от моего url. Но я хочу изменить другую категорию сообщения. Является ли это возможным? –

+0

Да, вам в основном нужно загрузить переменную '$ catname' с массивом или строкой категорий, которые вы хотите удалить, а затем исправить функцию' str_replace' соответственно. –

+0

Вы также можете изменить название категории с помощью 'str_replace'. Подумайте, удаляете ли вы одну категорию с именем «sample», вы создаете $ catname = 'sample'. Если у вас есть более одной категории, вам нужно будет создать $ catname массив, а затем выполнить цикл с помощью 'str_replace' –

1

Я меняю другую категорию сообщений.

$disallow = array("category-slug-1", "category-slug-2"); 
function selectCategory($postID){ 
    global $disallow; 
    $cats=wp_get_post_categories($postID); 
    foreach ($cats as $key => $value) { 
     $current = get_category($value); 
     if(!in_array($current->slug, $disallow)){ 
      return $current->slug; 
     } 
    } 
} 

И заменить в Permalink с этим:

add_filter('post_link', 'filter_permalink_categories', 10, 3); 
function filter_permalink_categories($permalink, $post, $catname) { 
    global $disallow; 
    foreach ($disallow as $key => $value) { 
     $permalink = str_replace($disallow, selectCategory($post->ID), $permalink); 
    } 
    return $permalink; 

} 

Пожалуйста, помните, сохранить настройки из приборной панели после того, как они Permalink.

+0

хорошая работа;) @fatih –

0

Однако команда WordPress была совершенствует на этом, и теперь можно включать не только один, но несколько категорий внутри URL. В этом уроке мы покажем вам, как сделать это .

WordPress Permalinks with Multiple Categories

Или

function multiple_category_post_link($url = '') 
{ 
    // check permalink structure for the required construct; /%category%/%postname%/ 
    if (strrpos(get_option('permalink_structure'), '%category%/%postname%') !== false) 
    { 
    // get the current post 
    global $post, $wp_query; 

    // prepare variables for use below 
    $post_id = $cat_id = 0; 
    $new_url = ''; 

    // for categories 
    if (is_category()) 
    { 
     // remember current category and post 
     $cat_id = get_query_var('cat'); 
     $post_id = $post->ID; 

     // add the post slug to the current url 
     $new_url = $_SERVER['REQUEST_URI'] . $post->post_name; 
    } 

    // for single posts 
    else if (is_single()) 
    { 
     // last part in the 'category_name' should be the slug for the current category 
     $cat_slug = array_pop(explode('/', get_query_var('category_name'))); 
     $cat = get_category_by_slug($cat_slug); 

     // remember current category and post 
     $post_id = $wp_query->post->ID;  
     if ($cat) $cat_id = $cat->cat_ID; 

     // replace the slug of the post being viewed by the slug of $post 
     $new_url = str_replace('/' . get_query_var('name'), '', $_SERVER['REQUEST_URI']) . $post->post_name; 
    } 

    if ($post_id > 0 && $cat_id > 0 && !empty($new_url)) 
    { 
     // make sure categories match! 
     foreach(get_the_category($post_id) as $cat) 
     { 
     if ($cat->cat_ID == $cat_id) 
     { 
      $url = $new_url; 
      break; 
     } 
     } 
    }  
    } 

    // always return an url! 
    return $url; 
} 
add_filter('post_link', 'multiple_category_post_link'); 
Смежные вопросы