J'ai vu plusieurs questions sur ce sujet, mais aucune ne semble répondre à la question.
J'enregistre actuellement mes codes abrégés sur after_setup_theme
.
function mbe_register_shortcodes() {
require_once( PATH . '/inc/shortcodes.php' );
add_shortcode( 'font', 'mbe_shortcode_font' );
}
add_action( 'after_setup_theme', 'mbe_register_shortcodes' );
Contenu de Shortcodes.php
:
/**
* @param array $attributes
* @param String|null $content
*
* @return string
*/
function mbe_shortcode_font( $attributes = array(), String $content = null ) {
$default_attributes = array(
'color' => false,
'weight' => 'normal',
'align' => 'left'
);
$attributes = shortcode_atts( $default_attributes, $attributes );
if ( $attributes['color'] !== false ) {
$attributes['color'] = 'color';
}
$html = '' . PHP_EOL;
$html .= '<span class="' . esc_attr( $attributes['color'] . ' font-' . $attributes['weight'] . ' text-' . $attributes['align'] ) . '">' . $content . '</span>' . PHP_EOL;
return $html;
}
Exemple de texte:
[font align="center" weight="extra-bold"]YOUR LOCAL [font color="true"]FULL SERVICE[/font] REAL ESTATE OFFICE[/font]
[font align="center" weight="semi-bold-italic"]Our Realtors Know Real Estate![/font]
Avec le code par défaut spécifié ci-dessus, la sortie est comme:
<span class=" font-extra-bold text-center">YOUR LOCAL [font color="true"]FULL SERVICE</span> REAL ESTATE OFFICE[/font]
<span class=" font-semi-bold-italic text-center">Our Realtors Know Real Estate!</span>
Ma sortie désirée est comme:
<span class=" font-extra-bold text-center">YOUR LOCAL <span class="color">FULL SERVICE</span> REAL ESTATE OFFICE</span>
<span class=" font-semi-bold-italic text-center">Our Realtors Know Real Estate!</span>
# 1 j'ai essayé ...
$html .= '<span class="' . esc_attr( $attributes['color'] . ' font-' . $attributes['weight'] . ' text-' . $attributes['align'] ) . '">' . $content. '</span>' . PHP_EOL;
return do_shortcode( $html );
# 1 et sorties ...
<span class=" font-extra-bold text-center">YOUR LOCAL
<span class="color font-normal text-left"></span>
FULL SERVICE</span>
REAL ESTATE OFFICE[/font]
<span class=" font-semi-bold-italic text-center">Our Realtors Know Real Estate!</span>
# 2 Et cela ...
$html .= '<span class="' . esc_attr( $attributes['color'] . ' font-' . $attributes['weight'] . ' text-' . $attributes['align'] ) . '">' . do_shortcode( $content ) . '</span>' . PHP_EOL;
return $html;
# 2 et sorties ...
<span class=" font-extra-bold text-center">YOUR LOCAL
<span class="color font-normal text-left"></span>
FULL SERVICE</span>
REAL ESTATE OFFICE[/font]
<span class=" font-semi-bold-italic text-center">Our Realtors Know Real Estate!</span>
# 3 Et cela ...
$html .= '<span class="' . esc_attr( $attributes['color'] . ' font-' . $attributes['weight'] . ' text-' . $attributes['align'] ) . '">' . do_shortcode( $content ). '</span>' . PHP_EOL;
return do_shortcode( $html );
# 3 et sorties ...
<span class=" font-extra-bold text-center">YOUR LOCAL
<span class="color font-normal text-left"></span>
FULL SERVICE</span>
REAL ESTATE OFFICE[/font]
<span class=" font-semi-bold-italic text-center">Our Realtors Know Real Estate!</span>
TLDR;Les codes courts imbriqués ne peuvent pas avoir le même nom. Vous devez avoir des noms uniques pour les codes courts dans les codes courts.
J'ai trouvé la réponse grâce à @patnz
en réponse à: shortcode dans un autre shortcode .
Si vous regardez le WordPress Codex :: API Shortcode :: Nested Shortcodes vous trouverez la réponse avec un exemple illustratif.
Donc, dans ma situation, comme solution rapide, je viens d'ajouter un autre shortcode.
function mbe_register_shortcodes() {
require_once( PATH . '/inc/shortcodes.php' );
add_shortcode( 'font', 'mbe_shortcode_font' );
add_shortcode( 'font_color', 'mbe_shortcode_font_color' ); // Added
}
add_action( 'after_setup_theme', 'mbe_register_shortcodes' );
Contenu de shortcodes.php
:
function shortcode_font( $attributes = array(), String $content = null ) {
$default_attributes = array(
'weight' => 'normal',
'align' => 'left'
);
$attributes = shortcode_atts( $default_attributes, $attributes );
$html = '<span class="font-' . esc_attr( $attributes['weight'] ) . ' text-' . esc_attr( $attributes['align'] ) . '">' . $content . '</span>';
return do_shortcode( $html );
}
function shortcode_font_color( $attributes = array(), String $content = null ) {
$html = '<span class="color">' . $content . '</span>';
return do_shortcode( $html );
}