web-dev-qa-db-fra.com

arrêtez la suppression de shortcode dans la catégorie et les pages d'archives

À l'aide du thème par défaut Wordpress 2010 1.1 de Wordpress, les codes courts fonctionnent sur la page principale du blog et sur des pages de publication individuelles, mais sont supprimés sur les pages de catégorie et d'archive.

Par exemple, restez dans le fichier functions.php du thème:

add_shortcode('tsc', 'tsc_process_shortcode' );

function tsc_process_shortcode($atts, $content = null) {
return 'INSERTED TEXT ' . $content;
}

Le texte inséré n'est pas généré à partir de [tsc] dans le contenu de publication affiché sur les pages de catégorie et d'archive. Comment puis-je faire en sorte que les codes courts fonctionnent sur les pages de catégorie et d'archive?

1
BigToe

Les codes courts sont extraits de l'extrait avant que les filtres ne soient appliqués. Essayez quelque chose de plus comme ça:

function tsc_execute_shortcodes_in_excerpts( $text, $raw_text ){
  if(empty($raw_text)){
    $text = get_the_content('');
    $text = apply_filters('the_content', $text);
    $text = str_replace(']]>', ']]>', $text);
    $text = strip_tags($text);
    $excerpt_length = apply_filters('excerpt_length', 55);
    $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
    $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
    if ( count($words) > $excerpt_length ) {
      array_pop($words);
      $text = implode(' ', $words);
      $text = $text . $excerpt_more;
    } else {
      $text = implode(' ', $words);
    }
  }
  return $text;
}

add_filter( 'wp_trim_excerpt', 'tsc_execute_shortcodes_in_excerpts', 10, 2 );

Cela relance fondamentalement wp_trim_excerpt() sur le contenu (moins le strip-tease shortcode) s'il a été coupé pour commencer. Si vous voulez cibler uniquement votre shortcode, vous pouvez faire quelque chose comme ceci après get_the_content(''):

$text = str_replace( '[tsc', '{tsc', $text );
$text = strip_shortcodes( $text );
$text = str_replace( '{tsc', '[tsc', $text );

J'espère que cela pourra aider.

1
John P Bloch

En supposant que vous utilisiez les boucles d'archive et de catégorie par défaut de 2010, utilisez the_excerpt au lieu de the_content. C'est pourquoi les codes abrégés ne sont pas générés. Heureusement, il existe un correctif simple pour cela. Ajoutez simplement cette ligne au fichier themes.php

add_filter( 'the_excerpt', 'do_shortcode', 11 );

J'espère que cela t'aides.

1
Bainternet