我正在尝试在pagelines dms框架中设置一个前端选项面板,用户可以从中更改blogname和blogdescription。到目前为止,我已经设置了包含文本字段“blogname”的表单blogdescription\'如下
add_filter(\'pl_sorted_settings_array\', \'add_global_panel2\');
function add_global_panel2($settings){
$settings[\'privacy\'] = array(
\'name\' => \'Blog Name\',
\'icon\' => \'icon-eye-open\',
\'opts\' => array(
// Regular Options Engine
array(
\'key\' => \'blogname\',
\'type\' => \'text\',
\'label\' => \'blog Name\'
),
// Regular Options Engine
array(
\'id\' => \'blogdescription\',
\'type\' => \'text\',
\'label\' => \'blog description\'
),
)
);
// Finally we return the new array
return $settings;
}
然而,我不确定如何将其与wordpress选项联系起来。我在pagelines dms编辑器中找到了以下函数。设置。php是我成功的关键,但我不确定如何以正确的方式实现它:
/*
* This class contains all methods for interacting with WordPress\' data system
* It has no dependancy so it can be used as a substitute for WordPress native functions
* The options system inherits from it.
*/
class PageLinesData {
function meta($id, $key, $default = false){
$val = get_post_meta($id, $key, true);
if( (!$val || $val == \'\') && $default ){
$val = $default;
} elseif( is_array($val) && is_array($default)) {
$val = wp_parse_args( $val, $default );
}
return $val;
}
function meta_update($id, $key, $value){
update_post_meta($id, $key, $value);
}
function opt( $key, $default = false, $parse = false ){
$val = get_option($key);
if( !$val ){
$val = $default;
} elseif( $parse && is_array($val) && is_array($default)) {
$val = wp_parse_args( $val, $default );
}
return $val;
}
function opt_update( $key, $value ){
update_option($key, $value);
}
function user( $user_id, $key, $default = false ){
$val = get_user_meta($user_id, $key, true);
if( !$val ){
$val = $default;
} elseif( is_array($val) && is_array($default)) {
$val = wp_parse_args( $val, $default );
}
return $val;
}
function user_update( $user_id, $key, $value ){
update_user_meta( $user_id, $key, $value );
}
}
(整个文件的副本可在此处找到:
http://themes.svn.wordpress.org/dms/1.0.2/editor/editor.settings.php)
如果有人能帮助我,我将不胜感激。
提前感谢!
SO网友:Luke
好啊
所以我找到了解决问题的办法;
Pagelines将每个键和值对编码为json字符串,在wp\\u options表中有自己的名为pl\\u settings的选项。
它们还允许您使用以下命令访问每个键->值对:$value=pl\\u设置(\'option\\u key\')
因此,我采取了使用以下代码来满足我的需要的方法:
add_filter(\'pl_sorted_settings_array\', \'add_global_panel2\');
function add_global_panel2($settings){
$settings[\'privacy\'] = array(
\'name\' => \'About Your Loved One\',
\'icon\' => \'icon-heart\',
\'opts\' => array(
// Regular Options Engine
array(
\'key\' => \'blogname\',
\'type\' => \'text\',
\'label\' => \'the name of your loved one\',
\'help\' => \'test\'
),
// Regular Options Engine
array(
\'key\' => \'blogdescription\',
\'type\' => \'text\',
\'label\' => \'a message to your loved one\',
\'help\' => \'test\'
),
)
);
update_option(\'blogname\', $value = pl_setting(\'blogname\'));
update_option(\'blogdescription\', $value = pl_setting(\'blogdescription\'));
// Finally we return the new array
return $settings;
}
以这种方式工作的唯一缺点是,我需要刷新浏览器两次,一次更新其中一个值,使其在相应的选项上实际生效。
如果有人能做得更好,请告诉我。