Я пытаюсь использовать add_meta_box()
для создания метаинформации для моего настраиваемого типа сообщений. Пока все в порядке, но я не понимаю, почему $callback
выглядит так, как он.
Пример из одного учебника WordPress :
/* 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 }
Что случилось ?>
(В строке 2) и <?php}
(в последней строке)? Я не понимаю.
Могу ли я просто откликнуться на HTML вместо этого? Как WordPress отображает HTML, если он просто напечатан в рамках функции?
Иногда при работе с более крупным блоком HTML проще просто закрыть ваши теги PHP и набирать HTML напрямую, а не пытаться echo
HTML-код в PHP. Да, вы также сможете echo
свой HTML-код.
Изменить: я хочу более подробно рассмотреть контекст из вашего примера, потому что в WordPress чаще используется это внутри темы, чем внутри функции, как это имеет место здесь. Из учебника:
Однако вам все равно нужно отображать HTML-код мета-окна. Вот в чем заключается функция smashing_post_class_meta_box () (параметр $ callback сверху).
Затем отображается приведенный вами пример кода и объясняется далее:
То, что делает вышеприведенная функция, отображает вывод HTML для вашего мета-поля. Он отображает скрытый ввод без ввода. Затем он отображает элемент ввода для добавления пользовательского класса 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
. Это связано только с тем, что функция smashing_post_class_meta_box
подключена к этому конкретному мета-окну, где здесь анализируется HTML. Если вы просто запускали функцию smashing_post_class_meta_box
случайным образом, она вообще не отображалась бы, поскольку она, вероятно, будет работать до начала WordPress.