web-dev-qa-db-fra.com

add_shortcode () ne fonctionne pas à l'intérieur de la fonction

J'ai un type de message personnalisé bhour, avec un champ bh_shortcode. Lorsqu'une publication de ce type est enregistrée, j'aimerais qu'elle ajoute un shortcode basé sur la valeur de la publication, bh_shortcode.

Si la valeur de bh_shortcode est "test" et si une balise shortcode [test] apparaît sur un type de message normal, rien ne se passe - le texte [test] n'est pas remplacé.

Si je place add_shortcode('test','save_bhour_details'); en dehors de la fonction, le texte [test] est remplacé.

Comment utiliser la fonction add_shortcode dans une autre fonction?

function bhour_shortcode_handler(){
    global $post,$bhourdays;

    $output='<p>this is a test</p>';

    return $output; 
}



add_action('save_post', 'save_bhour_details');

function save_bhour_details(){
    global $post, $bhourdays;

    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ){
        return;
    }

    if ( get_post_type($post) != 'bhours'){
        return;
    }

    //retrieve current values
    $current = get_post_custom();

    //if($_POST['bh_shortcode']!==$current['bh_shortcode'][0]){
        //remove current shortcode
        remove_shortcode($current['bh_shortcode'][0]);  

        //save new value
        save_bhour_field('bh_shortcode');

        //get current values
        $current = get_post_custom();

        //register new shortcode
        add_shortcode($current['bh_shortcode'][0], 'bhour_shortcode_handler');
    //}

    //register new shortcode
    add_shortcode($current['bh_shortcode'][0], 'bhour_shortcode_handler');
}
1
Force Flow

Il suffit d’utiliser le code suivant dans votre plugin.,

function wp_shortcode( $atts ) {
    extract( shortcode_atts( array(
        'foo' => 'something',
        'bar' => 'something else',
    ), $atts ) );


    //return "foo = {$foo}";
    return your_function();
}
add_shortcode( 'your-shortcode', 'wp_shortcode' );

Je pense que cela peut vous aider à répondre à vos besoins.

1
John Peter