更改插件选项中的自定义开机自检类型插件

时间:2014-02-25 作者:joshuaiz

我想给用户一个选项,在我的插件中更改一个自定义的帖子类型slug。使用此答案,我能够将其硬编码为函数:

Redeclare/Change Slug of a Plugin's Custom Post Type

那么,当用户更新插件选项时,我如何重写它以进行更新呢?我试过这样的方法:

function add_custom_rewrite_rule() {

$slug = get_option(\'change_rewrite_slug\'); // my plugin option

// First, try to load up the rewrite rules. We do this just in case
// the default permalink structure is being used.
if( ($current_rules = get_option(\'rewrite_rules\')) ) {

    // Next, iterate through each custom rule adding a new rule
    // that replaces \'movies\' with \'films\' and give it a higher
    // priority than the existing rule.
    foreach($current_rules as $key => $val) {
        if(strpos($key, \'my_post_type\') !== false) {
            add_rewrite_rule(str_ireplace(\'my_post_type\', $slug, $key), $val, \'top\');   
        } // end if
    } // end foreach

} // end if/else

// ...and we flush the rules
flush_rewrite_rules();

} // end add_custom_rewrite_rule
add_action(\'init\', \'add_custom_rewrite_rule\');
这行不通。我觉得我错过了一个步骤:一旦插件选项被保存,它需要告诉这个函数启动并获得新的slug。或者也许有更好的方法。

此外,一旦它被更改,我需要函数来更新它,获取当前选项,然后根据任何新输入更改slug。

我之所以需要这样做,是因为插件有一种事件的post类型,但我希望人们能够自定义它,这样,slug就可以是“show”或“gig”或他们想要的任何东西,而不是“event”。

更新:我正在使用此类:http://tareq.wedevs.com/2012/06/wordpress-settings-api-php-class/

以下是选项页面代码的一部分:

 function flush_settings() {

    if( isset( $_REQUEST[\'settings-updated\'] ) )
    flush_rewrite_rules();
}

/**
 * Returns all the settings fields
 *
 * @return array settings fields
 */
function get_settings_fields() {
    $settings_fields = array(

    // Other settings here
        \'djgigs_basic_settings\' => array(
            array(
                \'name\' => \'djgigs_rewrite_slug\',
                \'label\' => __( \'Permalink Slug\', \'wedevs\' ),
                \'desc\' => __( \'Enter a custom permalink slug. The default is \\\'djgig\\\' but you could change it to \\\'gigs\\\' or \\\'events\\\'. \', \'wedevs\' ),
                \'type\' => \'text\',
                \'default\' => \'djgig\',
            ),
        )

    );

    return $settings_fields;
}
不确定这是否是添加flush函数的正确位置,或者类中是否存在使其无法工作的内容。

1 个回复
SO网友:Manny Fleurmond

最好的方法是在显示选项页面之前。就在您致电之前settings_fields, 添加以下内容:

if( isset( $_REQUEST[\'settings-updated\'] ) )
    flush_rewrite_rules();
从其他函数中删除flush\\u rewrite\\u规则,这样就可以了。这对我有用。

结束

相关推荐

子主题中的Functions.php-加载JS

我的主题使用此函数加载Javascript和CSSfunction aitEnqueueScriptsAndStyles() { // just shortcuts $s = THEME_CSS_URL; $j = THEME_JS_URL; aitAddStyles(array( \'ait-jquery-prettyPhoto\' => array(\'file\' => \"$s/