我是否在正确的位置使用了flush_rewrite_rules函数?

时间:2015-08-26 作者:saeed shabani

Hello dears

我正在基于WordPress设置API为我的新WordPress插件编写一个管理面板。我正在定义一个字段,用于从此管理面板更改自定义post slug。在一些WordPress站点中更改了自定义slug之后,我们得到了该CPT URL的404个错误。因此,在管理面板中显示slug字段之前,我使用flush\\u rewrite\\u rules()函数。您可以看到下面的代码。现在我想让你告诉我,我是否在正确的位置使用了flush\\u rewrite\\u rules函数?

function display_clink_main_slug(){

    // validate and update clink_main_slug value

    $clink_main_slug_option = get_option(\'clink_main_slug\');
    if( $clink_main_slug_option ){
        $clink_main_slug_option = str_replace(\' \', \'-\', $clink_main_slug_option); // Replaces all spaces with hyphens.
        $clink_main_slug_option = preg_replace(\'/[^A-Za-z0-9\\-]/\', \'\', $clink_main_slug_option); // Removes special chars.  
        update_option( \'clink_main_slug\', $value = $clink_main_slug_option );   
        $clink_main_slug_option = get_option(\'clink_main_slug\');
    }elseif( empty($clink_main_slug_option ) ){
        update_option( \'clink_main_slug\', $value = \'clink\' );
        $clink_main_slug_option = get_option(\'clink_main_slug\');
    }



    flush_rewrite_rules();


    $clink_slug_structure = get_bloginfo(\'url\') . \'/\' . $clink_main_slug_option . \'/link-name\';
    ?>
        <?php echo $clink_main_slug_option; ?>
        <input type="text" name="clink_main_slug" id="clink_main_slug" value="<?php echo $clink_main_slug_option; ?>" />
        <p class="description clink-description"><?php _e(\'Enter the clink plugin base slug for links. In default it set to <code>clink</code>\',\'aryan-themes\'); ?></p>
        <p class="description clink-description"><?php printf( __( \'Current links structure is like: <code>%s</code>\', \'aryan-themes\' ) , $clink_slug_structure ); ?></p>
    <?php 
}

1 个回复
最合适的回答,由SO网友:Ignat B. 整理而成

考虑WordPress Codexflush_rewrite_rules

当与自定义帖子类型一起使用时,此函数非常有用,因为它允许自动刷新WordPress重写规则(对于新的自定义帖子类型,通常需要手动完成)。However, this is an expensive operation so it should only be used when absolutely necessary....

我建议您这样使用:

示例1。只有发展!使用get变量刷新:

if(isset($_GET[\'secret_variable\'])){
   flush_rewrite_rules();
}
然后简单地打电话http://foo.com/?secret_variable=1 冲洗它。

示例2。正在声明新post_type WordPress主题切换操作的刷新规则

function custom_post_type_function(){
    $args = array();
    register_post_type(\'custom_post_type\', $args);
}

function custom_flush_rules(){
    flush_rewrite_rules();
}
add_action(\'after_theme_switch\', \'custom_flush_rules\');
add_action(\'init\', \'custom_post_type_function\');
还有,这个[Where, When, & How to Properly Flush Rewrite Rules Within the Scope of a Plugin?] 可能有助于更好地理解

相关推荐

为什么我的可过滤公文包页面在Slug按钮和Slug输出WORDRPESS之间不能完美地工作?

我目前在Wordpress中有一个公文包自定义页面,可以根据需要工作,但我有一个问题。问题是,当我单击其中一个slug按钮时,主体/输出不是我想要的那样工作,例如在slug IOS中有3个项目,当我单击IOS slug中的“显示3个项目”时,应该是这样,但在这只显示1个项目。我读过很多类似于这个问题的教程,但都没有解决,请有人帮帮我,我一直在尝试解决这个问题,但仍然没有成功。以下是我读过的一篇文章:https://danny.care/a-responsive-filterable-portfolio-t