UPDATE_POST_META在Foreach中不起作用

时间:2018-03-14 作者:dudieboy71

为了避免每次添加一个post meta值(并减少主题中的重复代码),我编写了一个简单的类来存储所有选项,以便进行迭代。该类工作正常,构建了一个可以添加有效选项的对象(格式与向Customizer屏幕添加控件的格式大致相同),并在元框中输出选项表单,但值不会保存。下面是我如何保存选项的,后面有一些注释。如果您有任何想法或需要更多信息,请告诉我:

add_action( \'save_post\', \'save_theme_options\' );
function save_theme_options( $post_id ) {
    global $theme_options;
    foreach ( $theme_options->options as $option ) {
        if ( array_key_exists( $option->id, $_POST ) ) {
            update_post_meta($post_id, $option->meta_key, $_POST[$option->id]);
        }
    }
}
$theme\\u options是全局变量,我在其中实例化我的对象。

$options中每个选项的$id需要一个程序友好的字符串,例如“example\\u option”。(与WP对象中的数字不同,它不是数字。)

因此,设置一个选项,如:

$theme_options->add_theme_option( \'example_text\', array(
    \'title\'         =>  \'Substrate Text Example\',
    \'description\'   =>  \'Example Description\',
    \'label\'         =>  \'Text:\',
    \'type\'          =>  \'text\',
    \'default\'       =>  \'Some text\'
));
我希望$id是“example\\u text”,而$meta\\u key是“example\\u text”。

如果您需要更多信息,请告诉我,谢谢。(此处为第一篇帖子。)

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

这样做有助于确保主题对象已正确实例化。。。

global $theme_options;
if ( (!isset($theme_options) || (!is_object($theme_options)) ) {
    $theme_options = new My_Theme_Options_Class();
}

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在