简单地说:定制的元框是否应该能够像Wordpress的原生帖子编辑器那样输出短代码?
我问这个问题的原因是因为我创建了自己的自定义元框,用于从Cart66插件输入一个短代码,以便输出“添加到Cart”按钮,但当我尝试时,它只打印短代码中的文本,而不是呈现实际的按钮。
我的当前元框:
<?php
//////////////////////////////////////////////////////////////////////
// Register Custom Post Type Meta Box -- Add To Cart Button Field //
//////////////////////////////////////////////////////////////////////
add_action( \'add_meta_boxes\', \'store_button_meta_box_add\' );
function store_button_meta_box_add()
{
add_meta_box( \'epr_store_button_meta_id\', \'Add To Cart Button [shortcode]\', \'store_button_meta_box_cb\', \'epr_store\', \'side\', \'high\' );
}
function store_button_meta_box_cb( $post )
{
$values = get_post_custom( $post->ID );
$button = isset( $values[\'meta_box_button_shortcode\'] ) ? esc_attr( $values[\'meta_box_button_shortcode\'][0] ) : \'\';
wp_nonce_field( \'my_meta_box_nonce\', \'meta_box_nonce\' );
?>
<p>
<textarea name="meta_box_button_shortcode" id="meta_box_button_shortcode" row="5" style="width:100%; height:100px;text-align:left;"><?php echo esc_textarea($button); ?></textarea>
</p>
<?php
}
add_action( \'save_post\', \'epr_button_meta_box_save\' );
function epr_button_meta_box_save( $post_id )
{
// Bail if we\'re doing an auto save
if( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE ) return;
// if our nonce isn\'t there, or we can\'t verify it, bail
if( !isset( $_POST[\'meta_box_nonce\'] ) || !wp_verify_nonce( $_POST[\'meta_box_nonce\'], \'my_meta_box_nonce\' ) ) return;
// if our current user can\'t edit this post, bail
if( !current_user_can( \'edit_post\' ) ) return;
// now we can actually save the data
$allowed = array(
\'a\' => array( // on allow a tags
\'href\' => array() // and those anchords can only have href attribute
)
);
// Probably a good idea to make sure your data is set
if( isset( $_POST[\'meta_box_button_shortcode\'] ) )
update_post_meta( $post_id, \'meta_box_button_shortcode\', wp_kses( $_POST[\'meta_box_button_shortcode\'], $allowed ) );
}
?>
最合适的回答,由SO网友:Chip Bennett 整理而成
简短回答:no.
短码用于用户通过后期编辑屏幕将内容直接注入后期内容。
如果您的数据来自元数据库,那么您可以使用其他更好、更高效、更易于控制的方法将内容注入到帖子内容中:主要是the_content
过滤器(用于一般用途)或自定义操作挂钩(用于提供它们的主题)。
使用the_content
添加代码的过滤器很简单:
function my_plugin_filter_the_content( $content ) {
// Get post custom meta
$values = get_post_custom( $post->ID );
// Determine if shortcode meta is set
$my_custom_content = isset( $values[\'meta_box_button_shortcode\'] ) ? esc_attr( $values[\'meta_box_button_shortcode\'][0] ) : \'\';
// Tell WordPress to execute the shortcode
$custom_shortcode_output = do_shortcode( $my_custom_content );
// Append the executed shortcode to $content
$content .= $custom_shortcode_output;
// Return modified $content
return $content;
}
add_filter( \'the_content\', \'my_plugin_filter_the_content\' );
不需要短代码。
此外,使用过滤器,您不必担心如果用户停用您的插件,您的短代码会被孤立。
Note that, if you need to output a specific shortcode, you can use do_shortcode( \'[shortcode_name att="value"]\' )