以编程方式设置固定链接的问题

时间:2013-05-27 作者:Shaikh Aezaz

我创建了一个插件,以编程方式激活我的主题。我想使用编程设置默认永久链接。它似乎不适用于自定义帖子类型。它可以很好地与默认的自定义帖子类型配合使用。

我用9999优先级在admin\\u页脚挂钩上尝试了它,但没有帮助。

我使用的代码是:

add_action(\'admin_footer\',\'default_permalink\',9999); 
function default_permalink(){ 
  if(get_option(\'change_permalink\')!= \'post_name_permalink\') { 
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure( \'/%postname%/\' );
    $wp_rewrite->flush_rules(); 
    if(function_exists(\'flush_rewrite_rules\')){ 
      flush_rewrite_rules(true);
    } //Set default permalink to postname end       
    update_option(\'change_permalink\',\'post_name_permalink\'); 
  }
}
请帮忙。

3 个回复
SO网友:Achintha Samindika

试着做这样的事情。

<?php
/* 
Plugin Name: My Custom Plugin
Plugin URI: 
Description: 
Author:
Version: 1.0 
Author URI:  
*/

/* Runs when plugin is activated */
register_activation_hook(__FILE__, \'mcp_install\'); 

/* Runs on plugin deactivation*/
register_deactivation_hook( __FILE__, \'mcp_remove\' );

function mcp_install() {

    //Make sure that .htaccess file is there.
    add_action(\'init\', \'change_permalinks\', 20);


    //Activate your theme also.
}

function mcp_remove() {

}

function mcp_change_permalinks() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure(\'/%postname%/\');
    $wp_rewrite->flush_rules();
}

function mcp_custom_init() {
  $labels = array(
    \'name\' => \'Books\',
    \'singular_name\' => \'Book\',
    \'add_new\' => \'Add New\',
    \'add_new_item\' => \'Add New Book\',
    \'edit_item\' => \'Edit Book\',
    \'new_item\' => \'New Book\',
    \'all_items\' => \'All Books\',
    \'view_item\' => \'View Book\',
    \'search_items\' => \'Search Books\',
    \'not_found\' =>  \'No books found\',
    \'not_found_in_trash\' => \'No books found in Trash\', 
    \'parent_item_colon\' => \'\',
    \'menu_name\' => \'Books\'
  );

  $args = array(
    \'labels\' => $labels,
    \'public\' => true,
    \'publicly_queryable\' => true,
    \'show_ui\' => true, 
    \'show_in_menu\' => true, 
    \'query_var\' => true,
    \'rewrite\' => array( \'slug\' => \'book\' ),
    \'capability_type\' => \'post\',
    \'has_archive\' => true, 
    \'hierarchical\' => false,
    \'menu_position\' => null,
    \'supports\' => array( \'title\', \'editor\', \'author\', \'thumbnail\', \'excerpt\', \'comments\' )
  ); 

  register_post_type( \'book\', $args );
}

add_action( \'init\', \'mcp_custom_init\', 10);

SO网友:Nicolai Grossherr

执行以下操作:

function setup_permalinks_by_default() {
    global $wp_rewrite;
    $wp_rewrite->set_permalink_structure(\'/%postname%/\');
    $wp_rewrite->flush_rules();
}
add_action(\'after_switch_theme\', \'setup_permalinks_by_default\')
但是,如果我没有弄错的话,这将不会考虑创建.htaccess 文件

编辑:
缺少关于自定义帖子类型的部分;也许最好是像rarst所说的那样,在自定义post类型注册时进行;

另一种可能性是add_rewrite_rule 并将其添加到上述函数中,更多信息请点击此处:
http://codex.wordpress.org/Rewrite_API/add_rewrite_rule
http://wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api-the-basics/

编辑:请参见milos注释

SO网友:Rarst

自定义帖子类型的重写规则由其注册参数控制(请参阅rewrite 在里面register_post_type() ) 可能不应该在外部进行修改。

还要注意,在每次页面加载时刷新重写规则对性能极为不利。只有当它们发生变化时才应该这样做,比如在激活插件时。

结束

相关推荐

Taxonomy based permalinks

在我的网站上,我使用自己的分类法。我希望分类学与permalink相结合。因此,如果一个新闻页面有分类法,permalink就会改变。像这样:mysite。com/%custom\\u tax%/blog/%postname%,如果是一个页面,请点击:mysite。com/%custom\\u tax%/%postname%但如果没有我想要的分类法:mysite。com/blog/%postname%,如果它是一个页面:mysite。com/%postname%我怎样才能轻松地做到这一点?我已经设置了%c