web-dev-qa-db-fra.com

Existe-t-il un moyen simple d'itérer tous les codes courts d'une publication?

Je travaille avec un shortcode [translate lang=eng]Apple[/translate] qui ne sera affiché que si la "langue courante" est eng. Si la publication contient, outre ce qui précède, la déclaration [translate lang=rus]Яаблоко[/translate] et que la langue actuelle n'est ni rus ni eng, ni Яаблоко ni Apple ne sont imprimés.

Mon objectif est d’imprimer le message dans la langue par défaut lorsque la langue actuelle ne correspond pas à celle de l’attribut [translate lang]. Cela implique que le message (dans la langue par défaut) sera imprimé autant de fois que [translate] est utilisé dans le message, mais je dois m'inquiéter pour ...

Ce que j'ai besoin de savoir, c'est s'il existe une fonction get_shortcodes() qui me donnera une array (ou autre) de tous les codes courts de la publication. Aurais-je analyser le message avec regex sinon? Avez-vous de meilleures suggestions?

Merci de ne pas me parler de plugins de traduction "supérieurs".

C'est le mieux que je puisse trouver:

function wpse20389_show_shortcode_tags()
{
    echo '<pre>Shortcode Tags: ';
        print_r( $GLOBALS['wp_filter']['the_content'] );
    echo '</pre>';
}
add_action( 'shutdown', 'wpse20389_show_shortcode_tags' );
1
kaiser

il existe une fonction get_shortcode_regex () dans wp-include/shortcodes.php. Il est utilisé par do_shortcode () et d’autres. Il est assez facile d'adopter l'expression regex.

global $post;

$tags = array();
$pattern = '(.?)\[(translate)\b\s+(.*?)(?:(\/))?\](?:(.+?)\[\/translate\])?(.?)';
$pattern = "/$pattern/s";
preg_match_all($pattern, $post->post_content, &$tags, PREG_SET_ORDER);

foreach ($tags as $t ){

// iterate over tags... 

}