KEY_WP_PAGE_TEMPLATE在哪里传递?

时间:2013-09-26 作者:Bobby

当添加自定义post meta框时,我理解name 属性input 您输入的将通过表单传递到服务器。

因此,如果我有

<input type="text" name="my_custom_field" id="my_custom_field" />
使用

get_post_meta($post->ID, \'my_custom_field\', true);
我能找回它的价值input 是可能的。

关于这一点,我在谷歌上搜索了一下如何定位自定义页面模板,这就是我发现的。

global $post;
function func_name {
    if ( \'foobar.php\' == get_post_meta( $post->ID, \'_wp_page_template\', true ) ) {
         do something...
     }
}
add_action( \'add_meta_boxes_page\', \'func_name\' );
在哪里_wp_page_template 来自

我在页面属性元框的WP后端编辑页面上进行了检查,但没有字段具有该键名称。让我感到奇怪的是_wp_page_template 也显示在数据库wp\\U POSTETA表中。

有人能帮我解释一下吗?

提前谢谢。

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

HTML属性name 是发送到服务器的内容。有一些PHP代码读取它并使用特定的键将其存储在数据库中。

HTML名称和数据库键不必是相同的字符串。PHP代码可以使用完全不同的名称,也可以将一个值拆分为多个数据库值。

模板属性处理程序执行以下操作:它采用名称page_template 从页面属性metabox并将其存储为_wp_page_template 在数据库中。前导下划线可防止该字段显示在自定义字段元框中。

请参见中的此部分wp_insert_post():

if ( !empty($page_template) && \'page\' == $data[\'post_type\'] ) {
    $post->page_template = $page_template;
    $page_templates = wp_get_theme()->get_page_templates();
    if ( \'default\' != $page_template && ! isset( $page_templates[ $page_template ] ) ) {
        if ( $wp_error )
            return new WP_Error(\'invalid_page_template\', __(\'The page template is invalid.\'));
        else
            return 0;
    }
    update_post_meta($post_ID, \'_wp_page_template\',  $page_template);
}

SO网友:s_ha_dum

从表单保存数据并不像您认为的那样是自动的。。。

在添加自定义post meta框时,我知道您输入的任何名称属性都会通过表单传递到服务器。因此,如果<input type="text" name="my_custom_field" id="my_custom_field" />, 使用get_post_meta($post->ID, \'my_custom_field\', true); 可以检索该输入的值。

是的,表单数据将作为POSTGET 数据,但如果不是脚本有意处理,则该数据不会发生任何变化。这通常意味着保存到数据库,但不一定。您可以通过电子邮件发送数据,例如作为联系人表单的一部分。

这个name 表单使用的属性不必与保存到数据库的键匹配。处理表单的代码可以将其保存在程序员想要的任何键下。

您正在讨论的特定数据段由wp_insert_post 中的函数wp-includes/post.php.

结束

相关推荐

隐藏依赖于所选页面模板的Metabox

我正在使用以下内容JQuery script from this answer 根据所选页面模板切换元数据库的显示。下面的示例显示featured image 当default 已选择模板:(function($){ $(function() { $(\'#page_template\').change(function() { $(\'#postimagediv\').toggle($(this).val() == \'default\');&#