web-dev-qa-db-fra.com

Enclosure Shortcode dans un autre Enclosure Shortcode annule la fonctionnalité de sortie

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>
1
Michael Ecklund

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

}
5
Michael Ecklund