自定义元框是否应该能够输出与WordPress原生文章编辑器相同的快捷码?

时间:2011-09-26 作者:Mr.Brown

简单地说:定制的元框是否应该能够像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 ) );
}
?>

1 个回复
最合适的回答,由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"]\' )

结束

相关推荐

Multiple Content Shortcodes

我试图为多选项卡面板创建一个快捷代码。用户可以设置每个选项卡的选项卡数、标题和内容。可能是这样的:[tabs number=\'4\'] [tab title=\'First_tab_title\']first tab content[/first_tab] ... ... [/tabs] 现在,我想知道。虽然可以这样做,但我不喜欢这样,我必须创建单独的短代码,如制表符和制表符。是否有其他更好的方法将所有这些信息传递到单个[选项卡]快捷码?