将元值添加到固定链接

时间:2012-08-13 作者:user1255062

我有出版物,我只想在永久链接中添加年份和月份。目前,发布年份和月份作为元值添加到帖子中。我已将出版物设置为自定义帖子类型,并为出版物的特定标题创建了分类法。我希望permalink是:

出版物/出版物名称/出版年份/出版月份/职务名称

我只想将发布年份和月份的元值添加到永久链接中。

到目前为止,我已经能够提取发布的年度和月份并将其添加到url,但不幸的是,当我尝试访问帖子时,我一直得到404。我想我在下面的步骤中走错了方向。。。

任何帮助都将不胜感激。

以下是我按照以下顺序执行的步骤:

由于我在url中添加了出版年份和出版月份,我读到我必须让WordPress知道这些自定义查询字符串变量。我添加了以下函数来注册这些自定义变量:

function pubyear_register_rewrite_tag() {  
    add_rewrite_tag( \'%pubyear%\', \'([0-9]{4})\');  
}  

add_action( \'init\', \'pubyear_register_rewrite_tag\');

function pubmonth_register_rewrite_tag() {  
   add_rewrite_tag( \'%pubmonth%\', \'([0-9]{2}\');  
}  

add_action( \'init\', \'pubmonth_register_rewrite_tag\');
向permalink结构中添加了年份和月份:

add_filter(\'post_type_link\', \'pub_term_permalink\', 10, 4);

function pub_term_permalink($permalink, $post, $leavename, $sample)
{
    if ( false !== strpos( $permalink, \'%publication-title%/%pubyear%/%pubmonth%\' ) ) {

     //get the publication-title
     $publicationtype = get_the_terms( $post->ID, \'publication-type\' );

     //get the year of the publication
     $pubyear = date(\'Y\', get_post_meta($post->ID, \'pub_date\', true));

     //get the month of the publication
     $pubmonth = date(\'m\', get_post_meta($post->ID, \'pub_date\', true));

     $rewritecode = array(
         \'%publication-type%\',
         \'%pubyear%\',
         \'%pubmonth%\',
         $leavename? \'\' : \'%postname%\',
     );

     $rewritereplace = array(
         array_pop($publicationtype)->slug,
         $pubyear,
         $pubmonth,
         $post->post_name
     );

     $permalink = str_replace($rewritecode, $rewritereplace, $permalink);    

 }
    return $permalink;
}
3)添加重写规则:

function pub_add_rewrite_rules() {  
    add_rewrite_rule(  \'^([^/]*)/([0-9]{4})/([0-9]{2})/([^/]+)?\', \'publications/index.php?pagename=$matches[3]\', \'top\' );  
}  

add_action( \'init\', \'pub_add_rewrite_rules\' );
4)确保已注册自定义帖子类型,并包括此重写数组:

\'rewrite\' => array
    (
            \'slug\' => \'publications/%publication-type%/%pubyear%/%pubmonth%\',
    \'with_front\' => false
         ),

2 个回复
SO网友:user1255062

能够让它工作。我想我会把我们所做的写下来,希望将来能对别人有所帮助(或者有人可以给我反馈如何更好地改进!)

注册的自定义重写规则

add_action(\'init\', \'pub_rewrite_rules\');

function pub_rewrite_rules()
{
    global $wp_rewrite;

    $wp_rewrite->add_rewrite_tag( \'%pubyear%\', \'([0-9]{4})\', \'pubyear=\');
    $wp_rewrite->add_rewrite_tag( \'%pubmonth%\', \'([0-9]{2})\', \'pubmonth=\');
}
  • 创建了Permalink结构

     function pub_permalink($permalink, $post, $leavename)
     {
         if ( false !== strpos( $permalink, \'%publication-type%/%pubyear%/%pubmonth%\' ) ) {
    
             $publicationtype = get_the_terms($post->ID, \'publication-type\');
             $pubyear = date(\'Y\', get_post_meta($post->ID, \'publication_date\', true));
             $pubmonth = date(\'m\', get_post_meta($post->ID, \'publication_date\', true));
    
             $rewritecode = array(
                   \'%publication-type%\',
                   \'%pubyear%\',
                   \'%pubmonth%\',
                   $leavename? \'\' : \'%postname%\',
             );
    
             $rewritereplace = array(
                   array_pop($publicationtype)->slug,
                   $pubyear,
                   $pubmonth,
                   $post->post_name
             );
    
             $permalink = str_replace($rewritecode, $rewritereplace, $permalink);    
        }
        return $permalink;
    }
    
    注册分类法

    注册自定义打印后重写数组,包括:

     \'slug\' => \'publications/%publication-type%/%pubyear%/%pubmonth%\',
    
    进入永久链接设置页面并保存或刷新重写规则()

  • SO网友:Alfonso Matute

    什么时候是pub_permalink() 打过电话吗?也许你错过了动作或过滤器?

    EDIT : 您错过了这一行:

    add_filter(\'post_link\', \'pub_permalink\', 10, 3);
    

    结束

    相关推荐

    Page Name and Permalinks

    我正在使用WordPress 3.2.1,刚刚在我的网站上添加了一个名为“中心管理”的页面,这反过来又创建了一个永久链接:http://localhost:8888/mysite/centre-management/对于我刚刚创建的页面。之后,我把这个页面弄得一团糟,想重新开始。因此,当我现在创建另一个与上述名称相同的新页面时,即“中心管理”,WordPress现在为我创建一个永久链接:‎http://localhost:8888/mysite/centre-管理-2/这不是我想要的。我希望它显示为:ht