Замена изменение структуры ссылок на посты Permalinks and Subdomian

Есть плагин WordPress Subdomains который делает выбранные (некоторые или все, в данном случае в качестве поддомена выбрана только категория "категория1") категории в виде поддомена. Из http://мой.сайт/категория1/ получается http://категория1.мой.сайт/

Так же пользуюсь плагином sCategory Permalink, с помошью которого можно выбирать, какая именно категория будет отображатся в адресе поста, если пост относится сразу к нескольким категориям.

Всё былобы хорошо, если бы после исспользования этих двух плагинов вместе, ссылки на посты не преобрели вид http://категория1.мой.сайт/категория2/пост1 не зависимо от того, установлено ли с помощью sCategory "категория1" как выводимая в качестве части адреса на пост.

т.е.
Былобы справедливо, если "категория1" была выбрана с помощью sCategory и адрес поста был бы http://категория1.мой.сайт/пост1
или если бы не была выбрана, то ссылка имела бы вид http://мой.сайт/категория2/пост1
но никак не то что сейчас есть.

Вопрос: Как сделать, чтобы отображалась категория только в том случае, когда она выбрана в качестве главной для постояния ссылки на пост?

Хорошей традицией (во всех смыслах этого выражения), стало то, что я сам отвечаю на свои вопросы.

$sCategoryPermalinkSubDomian = new sCategoryPermalinkSubDomian();
add_filter('post_link', array(&$sCategoryPermalinkSubDomian, 'parseLink'), 10, 2);
unset ($sCategoryPermalinkSubDomian);

class sCategoryPermalinkSubDomian {
function parseLink($permalink, $post) {
    $category_in = get_category_is_subdomains();
    $category = '';
    $cat = null;
    $rewritereplace = array(
    ''
    );
    if ( $category_in && '' != $permalink && 'draft' != $post->post_status) {
                //Убрать поддомены из пермалинка.
                for ( $i = count( $category_in ); $i >= 0; $i-- ){//Проверить все поддомены (перебрать их ID)
                    $cat = get_category($category_in[$i]);
                    $category = $cat->category_nicename; //Получить имя категории по ID для поддомена
                    $rewritecode = array(
                    $category . '.',
                    );
                    if ( $category )
                    $permalink = str_replace($rewritecode, $rewritereplace ,$permalink); //Удалить из пермалинка поста все поддомены.
                }
        }
    return $permalink; 
}
}

Если, к примеру, добавить это в файл вашей темв functions.php,
то эта функция будет убирать во всех пермалинках строки вида: "пддомен."

А тем, кто хочет убирать "поддомен." только для постов, в которых поддомен(категория) не выбраны в качестве главной следует исспользовать этот код:

$sCategoryPermalinkSubDomian = new sCategoryPermalinkSubDomian();
add_filter('post_link', array(&$sCategoryPermalinkSubDomian, 'parseLink'), 10, 2);
unset ($sCategoryPermalinkSubDomian);

class sCategoryPermalinkSubDomian {
function parseLink($permalink, $post) {
    $category_in = get_category_is_subdomains();
    $category = '';
    $cat = null;
    $rewritereplace = array(
    ''
    );
    $category_permalink = $post->ID ? get_post_meta($post->ID, '_category_permalink', true) : null;
    if ( $category_in && '' != $permalink && 'draft' != $post->post_status) {
                if ( !$category_permalink ) {//Если не установлена категория по умолчанию, применить ту которая назначается WordPress'ом
                    $cats = get_the_category($post->ID);
                    $cat = $cats[0];
                    $category_permalink = $cat->cat_ID;
                }
                for ( $i = count( $category_in ); $i >= 0; $i-- )
                    if ( $category_permalink == $category_in[$i] )
                        return $permalink;//Если поддомен является категорией по-умолчанию, то оставить пермалинк, как есть.
                //Когда домен не является категорией по-умолчению для поста.
                //Когда поддомен является частью пермалинка, и его не просили.
                for ( $i = count( $category_in ); $i >= 0; $i-- ){//Проверить все поддомены (перебрать их ID)
                    $cat = get_category($category_in[$i]);
                    $category = $cat->category_nicename; //Получить имя категории по ID для поддомена
                    $rewritecode = array(
                    $category . '.',
                    );
                    if ( $category )
                    $permalink = str_replace($rewritecode, $rewritereplace ,$permalink); //Удалить из пермалинка поста все поддомены.
                }
        }
    return $permalink; 
}

Функция get_category_is_subdomains(); возвращает масив содержащих ID тех категорий, которые включены как поддомены.
простой пример этой функции:

function get_category_is_subdomains()
{
var $default_settings = Array(
'1',//категория с ID=1
'2',//категория с ID=2
'3'//категория с ID=3
);
return $default_settings;
}

И последнее, вторая функция изначально расчитана на то, что вы исспользуете плагин sCategory Permalink

Anonymous
Отправить
Ответ на: