【问题标题】:Shortcodes attributes not working out of page/post editor短代码属性在页面/帖子编辑器中不起作用
【发布时间】:2016-05-27 03:32:06
【问题描述】:

我有一个带有所见即所得编辑器的主题设置页面。我想使用带有属性的简码。

这是具有属性的简码之一,用作示例:

function row( $atts, $content = null ) {
  extract(shortcode_atts(
    array(
    'paddingtop' => 'PADDINGTOP',
    ), $atts )
  );
  return '<div class="row" style="padding-top:'.$paddingtop.';"></div>';
}
add_shortcode( 'fila', 'row');

在这里,我将所见即所得编辑器添加到我的主题设置页面:

array(
  'name'  => '',
  'id'    => 'editor_top_shop',
  'type'  => 'editor',
  'note'  => '',
),

这是我在编辑器中检查和打印内容的方式:

<?php if ( get_option( 'editor_top_shop' ) == true ) {

    $top_shop = get_option( 'editor_top_shop' );
    echo stripslashes(apply_filters("the_content", $top_shop));

<?php } ?>

编辑器中的短代码:

[fila paddingtop="40px"]

最后,这是 HTML 输出:

<div class="row" style="padding-top:PADDINGTOP;"></div>

我会很感激一些反馈,我对此很生气:(

非常感谢! 弗雷德

【问题讨论】:

  • $atts 和 $content 变量中有什么?

标签: php wordpress


【解决方案1】:

你的代码是干净的......我也不明白为什么这应该是结果,除非你在短代码属性的名称中有错字。同时,尝试将 paddingtop 属性设置为默认值 40px 而不是“PADDINGTOP”。然后尝试更改属性的值。

    <?php
        function row( $atts, $content = null ) {
            extract(shortcode_atts(
                    array(
                        'paddingtop' => '40px', /*<== DOESN'T MATTER BUT TRY DEFAULTING THIS TO 40px */
                    ), $atts )
            );
            return '<div class="row" style="padding-top:'. $paddingtop .';"></div>';
        }
        add_shortcode( 'fila', 'row');

另一种方法可能是删除提取功能(因为您只有一个属性要处理)并自己手动进行提取,如下所示:

        function row( $atts, $content = null ) {
            $paddingTop   = isset($atts['paddingtop']) ? $atts['paddingtop'] : "40px";
            return '<div class="row" style="padding-top:'. $paddingTop .';"></div>';
        }
        add_shortcode( 'fila', 'row');

【讨论】:

  • 谢谢Poiz,没有错字,我仔细检查了。如果我设置一个像 40px 这样的默认值,它会起作用,但它需要能够改变它。顺便说一句,删除提取功能不起作用。我有很多具有多个属性的简码,并且都有相同的问题。
  • @FredericGarcia 没错,这就是目标:能够使用您的属性更改短代码中的值。您是否尝试过第二种选择?然后,您可以将 padding top 更改为 80px 以查看它是否反映在您的结果中。
  • 对不起,Poiz 我误会了。我刚刚这样做了,现在我得到的是默认值,而不是文本编辑器中的值。
  • @FredericGarcia 由于您有很多具有相同问题的短代码,那么很明显(就像我已经说过的)您的代码是干净的。那么,麻烦应该在其他地方。它肯定不在您在这里向我们展示的代码中,因为我认为它没有任何问题。预计它应该可以正常工作。从您所说的来看,关键是 $atts 没有正确传递给简码。
【解决方案2】:

终于找到了解决办法:)

正如你所说的@Poiz,几乎所有代码都可以,但我当时做了一些改动来打印。这里的解决方案:

$top_shop = get_option( 'ace_top_shop' );
$top_shop = stripslashes($top_shop);
echo (apply_filters("the_content", $top_shop));

我必须分开脱衣,而不是同时做。不知道为什么......但它的工作原理! :)

【讨论】:

    猜你喜欢
    • 2015-05-10
    • 2014-03-19
    • 1970-01-01
    • 2017-07-27
    • 2018-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多