我可以在选项名称/键中使用空格吗?

时间:2013-11-28 作者:ggutenberg

有什么理由我不能在WP选项名称/键中使用空格吗?例如:。

update_option( \'my option name\', \'abc\' );

我找不到任何说明我找不到的内容,但每个示例都使用下划线。我想知道现在或将来使用空格是否真的会破坏任何东西。

3 个回复
最合适的回答,由SO网友:Christopher Ross 整理而成

除一般WordPress实践外(http://make.wordpress.org/core/handbook/coding-standards/php/) 这鼓励在文件名中始终用-替换空格,并且出于其他目的,没有一个固定的理由可以在选项名称中使用空格。

根据我的测试,没有任何技术原因限制您使用空间。

(编辑)进一步看,SQL是:$row=$wpdb->get\\u row($wpdb->prepare(“从$wpdb中选择自动加载->选项,其中option\\u name=%s”,$option));

因此,任何转义值都应该有效,但为了安全起见,您应该始终使用esc\\u sql(),因为它并没有专门这么做。

SO网友:fuxia

您可以使用空格,但在每个键盘上选择此键有点烦人。通常,您可以使用Ctrl+Shift+Arrow来选择字符串。连字符和空格是此类选择的停止点。

SO网友:Philipp

您实际上可以在设置中使用任何字符(除了引号)。这些都是有效的选项名称:

"my option name"
"my:option name"
"MY->OPTION_NAME"
"My/Option/Name"
"my-option-name"

Important Limitations

<选项名称的最大长度必须为64个字符如果指定更长的名称,选项名称将被截断,以便在DB中容纳64个字符(而不是在代码中)。因此,无法再次检索选项值。始终确保选项名称的最大长度为64个字符。

选项名称不区分大小写如果保存选项APIKEY 您还可以通过apikey

小心不要意外使用WP核心选项名称!您应该始终在选项名称前加前缀

My tipp

创建一个小函数,用于为每个插件/主题中的选项键添加前缀/清理选项键,该函数可以为您解决限制,如下所示:

// Makes sure that all option names have same structure.
function sanitize_option_key( $name ) {
    $prefix = \'my_\';
    // Basic sanitation: Trim and make option name lower case.
    $name = strtolower( trim( $name ) );
    // Ensure the option does not contain spaces
    $name = str_replace( array( \'-\', \' \' ), \'_\', $name ); 
    // Prefix prevents any collisions with WP
    $name = $prefix . $name;
    // Also check the max-length
    if ( strlen( $name ) > 64 ) { 
        error_log( \'WARNING - Option name is too long and was truncated: \' . $name );
        $name = substr( $name, 0, 64 ); 
    }
    return $name;
}

// Using this function:

update_option( sanitize_option_key( \'option value\' ), \'test\' );
// option is saved in DB as \'my_option_value\'

echo get_option( sanitize_option_key( \'Option_Value\' ) ); 
// will output \'test\';

结束

相关推荐

为什么`wp_options`表没有`autoload`的索引?

WordPress提供的每个页面的开头都有一个MySQL调用来获取选项:SELECT option_name, option_value FROM wp_options WHERE autoload = \'yes\'; 因为上没有索引autoload 列,MySQL必须查找所有行。我还看到了this answer 表示即使有指数,也不会有业绩提升。在我的应用程序中,我使用了许多瞬态值作为会话替换。他们工作得很好,我有自己的垃圾收集程序。我注意到wp_options 表,我的瞬态值(以_tran