我正在复制此教程以制作自己的自定义元框https://www.sitepoint.com/adding-meta-boxes-post-types-wordpress/
它工作得很好,但是我需要能够在这个元框中输入脚本标记,保存脚本并将其输出到页面上。
当我输入脚本标记或div标记之类的内容时,它将清除元框字段,而不会在更新页面后保存或输出我输入的内容。
我注意到代码有以下内容:
// Sanitize user input.
$my_data = sanitize_text_field( $_POST[\'global_notice\'] );
但即使我删除了这一行,它仍然不会在元框中保存或输出我的脚本。
我还需要做些什么才能使脚本和标记正常工作?这不起作用有什么原因吗?
非常感谢。
*编辑
下面是我在一个插件中使用的完整代码,该插件用于创建metabox,并提供了一个用于输出metabox内容的短代码。
<?php
/*
Plugin Name: VBO Tickets Plugin Embed
Plugin URI: https://www.vbotickets.com
Description: Add your plugin code to any page or post on your WordPress site.
Version: 0.1
Author: VBO Tickets
*/
function global_notice_meta_box() {
$screens = get_post_types();
foreach ( $screens as $screen ) {
add_meta_box(
\'global-notice\',
__( \'VBO Plugin Embed\', \'vbotickets\' ),
\'global_notice_meta_box_callback\',
$screen
);
}
}
add_action( \'add_meta_boxes\', \'global_notice_meta_box\' );
function global_notice_meta_box_callback( $post ) {
// Add a nonce field so we can check for it later.
wp_nonce_field( \'global_notice_nonce\', \'global_notice_nonce\' );
$value = get_post_meta( $post->ID, \'_global_notice\', true );
echo \'<p><strong>Paste your VBO plugin embed code in the text area below:</strong></p>\';
echo \'<textarea style="width:100%;min-height:150px;" id="global_notice" name="global_notice">\' . esc_attr( $value ) . \'</textarea>\';
echo \'<p><strong>Next, copy/paste</strong> <code>[vbo-plugin-embed]</code> <strong>into the content area where you want the plugin to load on this page.</strong></p>\';
}
/**
* When the post is saved, saves our custom data.
*
* @param int $post_id
*/
function save_global_notice_meta_box_data( $post_id ) {
// Check if our nonce is set.
if ( ! isset( $_POST[\'global_notice_nonce\'] ) ) {
return;
}
// Verify that the nonce is valid.
if ( ! wp_verify_nonce( $_POST[\'global_notice_nonce\'], \'global_notice_nonce\' ) ) {
return;
}
// If this is an autosave, our form has not been submitted, so we don\'t want to do anything.
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) {
return;
}
// Check the user\'s permissions.
if ( isset( $_POST[\'post_type\'] ) && \'page\' == $_POST[\'post_type\'] ) {
if ( ! current_user_can( \'edit_page\', $post_id ) ) {
return;
}
}
else {
if ( ! current_user_can( \'edit_post\', $post_id ) ) {
return;
}
}
/* OK, it\'s safe for us to save the data now. */
// Make sure that it is set.
if ( ! isset( $_POST[\'global_notice\'] ) ) {
return;
}
// Sanitize user input.
//$my_data = sanitize_text_field( $_POST[\'global_notice\'] );
$my_data = $_POST[\'global_notice\'];
// Update the meta field in the database.
update_post_meta( $post_id, \'_global_notice\', $my_data );
}
add_action( \'save_post\', \'save_global_notice_meta_box_data\' );
// Add shortcode [vbo-plugin-embed]
function vbo_embed_sc( $atts ){
global $post;
// retrieve the global notice for the current post
$global_notice = esc_attr( get_post_meta( $post->ID, \'_global_notice\', true ) );
return $global_notice;
}
add_shortcode( \'vbo-plugin-embed\', \'vbo_embed_sc\' );
这是我正在测试的URL
https://demo.vbotickets.com/photos/现在的问题是,我已经将scrtips/HTML保存在元框中,但输出是纯文本,而不是实际运行代码/脚本。还有什么方法可以运行它吗?
谢谢