2014-11-20 2 views
7

Я хочу, чтобы перенаправить свои статьи в блоге, как это,Как создать постоянную ссылку с именем месяца вместо использования monthnum?

http://www.example.com/blog/2014/september/03/post-name

Но в WordPress это только позволяет мне использовать номер месяца,

http://www.example.com/blog/2014/09/03/post-name.

Я ищу это, но не нашел ничего полезного. Некоторые не ответившие посты, и они даже не говорят, возможно ли это или нет. Даже в документах Wordpress нет ссылок на это. Я нашел следующий код, но он меняет URL-адрес, но не связывает почтовую страницу.

<?php 
/** 
* Plugin Name: Month Name 
* Description: Enables the <code>%monthcode%</code> and <code>%monthname%</code> tag for Permalinks. 
* Author: Roger Chen 
* License: GPLv2 
*/ 

/** 
* Enables use of monthname (january, june) and monthcode (jan, jun). 
* Supports permalinks in the form of /2016-nov/61742/..slug.. or /2016-november/61742/..slug.. 
*/ 
class MonthName { 

/** 
* Month Names 
*/ 
public static $monthnames = array(
    'january', 
    'february', 
    'march', 
    'april', 
    'may', 
    'june', 
    'july', 
    'august', 
    'september', 
    'october', 
    'november', 
    'december', 
); 

/** 
* Month Codes 
*/ 
public static $monthcodes = array(
    'jan', 
    'feb', 
    'mar', 
    'apr', 
    'may', 
    'jun', 
    'jul', 
    'aug', 
    'sep', 
    'oct', 
    'nov', 
    'dec', 
); 

/** 
* Registers all required hooks 
*/ 
public static function init() { 
    add_rewrite_tag('%monthname%', '(' . implode('|', self::$monthnames) . ')'); 
    add_rewrite_tag('%monthcode%', '(' . implode('|', self::$monthcodes) . ')'); 
    add_rewrite_rule(
     '^([0-9]{4})-(' . implode('|', self::$monthnames) . ')/([0-9]+)/?', 
     'index.php?p=$matches[3]', 
     'top' 
    ); 
    add_rewrite_rule(
     '^([0-9]{4})-(' . implode('|', self::$monthcodes) . ')/([0-9]+)/?', 
     'index.php?p=$matches[3]', 
     'top' 
    ); 
} 
/** 
* Filters the month name and month code tags 
*/ 
public static function filter_post_link($permalink, $post) { 
    if (false === strpos($permalink, '%monthname%') && false === strpos($permalink, '%monthcode%')) { 
     return $permalink; 
    } 

    try { 
     $monthindex = intval(get_post_time('n', "GMT" == false, $post->ID)); 

     $monthname = self::$monthnames[$monthindex - 1]; 
     $monthcode = self::$monthcodes[$monthindex - 1]; 

     $permalink = str_replace('%monthname%', $monthname, $permalink); 
     $permalink = str_replace('%monthcode%', $monthcode, $permalink); 

     return $permalink; 
    } catch (Exception $e) { 
     return $permalink; 
    } 
} 

} 

add_action('init', array('MonthName', 'init')); 
add_filter('post_link', array('MonthName', 'filter_post_link'), 10, 2); 

Кто-нибудь, пожалуйста, скажите, возможно ли это или нет. Если возможно, вы можете сказать, как решить эту проблему.

+1

Насколько я знаю. это невозможно,. –

+0

@ Качество-эксперт о! они пропустили основные функциональные возможности. –

+0

Да может быть .. как поддержка wp только monthnum только я думаю. –

ответ

4

Хорошо, вот код. В настоящее время она поддерживает пермалинки следующего формата /2014/nov/23/post-name или /2014/november/23/post-name

<?php 
/** 
* Plugin Name: Month Name Permalink 
* Description: Enables use of <code>%monthcode%</code> or <code>%monthname%</code> tags in permalinks to generate a structure like <code>/2014/nov/23/post-name</code> or <code>/2014/november/23/post-name</code> 
* Author: Anand Shah 
* License: GPLv2 
*/ 

/** 
* Based on the original code by Roger Chen (https://gist.github.com/rogerhub/8306875) 
* Plugin enables use of monthname (january, june) and monthcode (jan, jun) in permalinks 
* Supports permalinks in the form of /2014/nov/23/post-name or /2014/november/23/post-name 
*/ 

class Month_Name_Permalink { 

/** 
* Month Names 
*/ 
public static $monthnames = array(
    'january', 
    'february', 
    'march', 
    'april', 
    'may', 
    'june', 
    'july', 
    'august', 
    'september', 
    'october', 
    'november', 
    'december', 
); 

/** 
* Month Codes 
*/ 
public static $monthcodes = array(
    'jan', 
    'feb', 
    'mar', 
    'apr', 
    'may', 
    'jun', 
    'jul', 
    'aug', 
    'sep', 
    'oct', 
    'nov', 
    'dec', 
); 

/** 
* Registers all required hooks 
*/ 
public static function init() { 
    add_rewrite_tag('%monthname%', '(' . implode('|', self::$monthnames) . ')'); 
    add_rewrite_tag('%monthcode%', '(' . implode('|', self::$monthcodes) . ')'); 
    add_rewrite_rule(
     '^([0-9]{4})/(' . implode('|', self::$monthnames) . ')/([0-9]{1,2})/(.*)?', 
     'index.php?name=$matches[4]', 
     'top' 
    ); 
    add_rewrite_rule(
     '^([0-9]{4})/(' . implode('|', self::$monthcodes) . ')/([0-9]{1,2})/(.*)?', 
     'index.php?name=$matches[4]', 
     'top' 
    );  

} 
/** 
* Filters the month name and month code tags 
*/ 
public static function filter_post_link($permalink, $post) { 
    if (false === strpos($permalink, '%monthname%') && false === strpos($permalink, '%monthcode%')) { 
     return $permalink; 
    } 

    try { 
     $monthindex = intval(get_post_time('n', "GMT" == false, $post->ID)); 

     $monthname = self::$monthnames[$monthindex - 1]; 
     $monthcode = self::$monthcodes[$monthindex - 1]; 

     $permalink = str_replace('%monthname%', $monthname, $permalink); 
     $permalink = str_replace('%monthcode%', $monthcode, $permalink); 

     return $permalink; 
    } catch (Exception $e) { 
     return $permalink; 
    } 
} 

} 

add_action('init', array('Month_Name_Permalink', 'init')); 
add_filter('post_link', array('Month_Name_Permalink', 'filter_post_link'), 10, 2); 
+0

Спасибо, миллион! –

+0

Я рад, что смог помочь :) –

+0

@ И я использую этот плагин, и у меня такая же проблема. Я только что обновил плагин до самой новой версии и все еще не работает. Я тоже попробовал ваш ответ. Пожалуйста помоги! – iluvpinkerton

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