How to create a permalink with the name of the month instead of using monthnum?

I want to redirect my blog articles, for example,

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

But in wordpress it only allows me to use the month number,

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

I am looking for this, but have not found anything useful. Some unanswered posts, and they don’t even say whether this is possible or not. Even Wordpress docs have no references to this. I found the following code, but it changes the url but does not bind the mail page.

<?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 ); 

Someone will say if this is possible or not. If possible, you can tell how to solve this problem.

+7
php wordpress permalinks
source share
1 answer

Ok, here is the code. It currently supports permalinks in the following format /2014/nov/23/post-name or /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 ); 
+4
source share

All Articles