显示Meta Box的Html的奇数PHP代码

时间:2017-04-26 作者:Summer Developer

我想用add_meta_box() 为我的自定义帖子类型创建元信息。到目前为止还好,但我不明白为什么$callback 看起来是这样的。

example from one WordPress tutorial 这是:

/* Display the post meta box. */
function callback( $post ) { ?>

  <?php wp_nonce_field( basename( __FILE__ ), \'smashing_post_class_nonce\' ); ?>

  <p>
    <label for="smashing-post-class"><?php _e( "Add a custom CSS class, which will be applied to WordPress\' post class.", \'example\' ); ?></label>
    <br />
    <input class="widefat" type="text" name="smashing-post-class" id="smashing-post-class" value="<?php echo esc_attr( get_post_meta( $post->ID, \'smashing_post_class\', true ) ); ?>" size="30" />
  </p>
<?php }
怎么了?> (第二行)和<?php} (在最后一行)?我不明白。

我可以只回显HTML而不是那样做吗?如果只是在函数中输入原始HTML,WordPress如何显示HTML?

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

有时,在处理较大的HTML块时,只需关闭PHP标记并直接键入HTML,而不必尝试echo PHP中的HTML。是的,你应该能够echo 您的HTML。

编辑:我想从您的example 因为在WordPress中,在主题中这样做比在函数中这样做更常见,这里就是这样。从教程中:

不过,您仍然需要显示元框的HTML。这就是smashing\\u post\\u class\\u meta\\u box()函数的作用($上面的回调参数)。

然后将显示您发布的代码示例,并进一步解释:

上述函数的作用是显示元框的HTML输出。它显示隐藏的nonce输入。然后,它显示一个用于添加自定义post类的输入元素,以及输出自定义类(如果已输入)。

好的,这很好,但要理解为什么我们能够在函数中以这种方式编写HTML,我们需要回到教程中的前一步,在那里我们实际添加了元框:

/* Create one or more meta boxes to be displayed on the post editor screen. */
function smashing_add_post_meta_boxes() {

  add_meta_box(
    \'smashing-post-class\',      // Unique ID
    esc_html__( \'Post Class\', \'example\' ),    // Title
    \'smashing_post_class_meta_box\',   // Callback function
    \'post\',         // Admin page (or post type)
    \'side\',         // Context
    \'default\'         // Priority
  );
}
您可以在这里看到,当添加元框时,我们有来自您的问题的回调函数,名为smashing_post_class_meta_box. It is only because the function smashing_post_class_meta_box is hooked to this specific meta box that the HTML is parsed here. 如果您只是运行函数smashing_post_class_meta_box 随机地,它根本不会显示,因为它可能在WordPress初始化之前运行。

相关推荐

仅为主页显示Metabox

我将尝试使用设置字段将metabox添加到主页,但出现问题,请帮助我。删除时,metabox不会显示在页面编辑器中if statement 它显示在所有页面上。add_action(\'add_meta_boxes\', \'metabox_homepage_videos\'); function metabox_homepage_videos($post) { if (is_front_page()): add_meta_box(\'metabox