web-dev-qa-db-fra.com

Les méta-boîtes personnalisées devraient-elles être en mesure de produire des codes abrégés identiques à ceux de l'éditeur de publication natif de Wordpress?

Autrement dit: les méta-boîtes personnalisées devraient-elles pouvoir produire des codes abrégés de la même manière que l'éditeur de publication natif de Wordpress?

La raison pour laquelle je pose cette question est parce que j’ai créé ma propre boîte à méta personnalisée pour la saisie d’un code court à partir du plug-in Cart66 afin d’afficher un bouton "Ajouter au panier", mais lorsque j’essaie, le texte est imprimé à partir du code court plutôt que de restituer le bouton réel. .

Ma meta box actuelle:

<?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
Mr.Brown

Réponse courte: non .

Les codes courts permettent d’injecter du contenu directement dans le contenu de publication , par l’utilisateur , via l’écran de modification.

Si vos données proviennent d'une métabox, vous disposez d'autres moyens, plus efficaces, plus faciles à contrôler, d'injecter du contenu dans le contenu du message: principalement le filtre the_content (pour usage général), ou des actions personnalisées (pour Thèmes qui les fournissent).

Utiliser le filtre the_content pour ajouter votre code est simple:

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' );

Pas besoin d'un shortcode.

De plus, en utilisant un filtre, vous n'avez pas à vous soucier de laisser votre shortcode orphelin si l'utilisateur désactive votre plugin.

Notez que, si vous devez générer un shortcode spécifique, vous pouvez utiliser do_shortcode( '[shortcode_name att="value"]' )

1
Chip Bennett