【问题标题】:Custom styles for Wordpress TinyMCEWordpress TinyMCE 的自定义样式
【发布时间】:2012-05-12 18:26:37
【问题描述】:

我已经阅读了一些关于向 WYSIWYG (TinyMCE) 编辑器添加自定义样式的教程。它们似乎都不适用于最新版本的 Wordpress。我正在使用 v3.3.2。 instructions from the codex 工作,但以有限的方式......

注意:为了 100% 清楚,我正在尝试添加一个“样式”下拉列表,作者可以使用该下拉列表将我的自定义样式应用于文本。 (请不要将我的问题与如何使用 editor-style.css 设置编辑器自身的样式...)

我设法让代码正常工作,但只使用my_mce_before_init() 中的注释行。这个版本的问题是它添加了带有通用<span> 的类。我正在尝试使用更强大的代码版本(如下所示),但有些地方不太对劲。样式下拉框出现,但它是空白的。如果我点击它,第一项是“样式”,但什么也不做。我怀疑我的阵列有问题。希望比我知识渊博的人能直截了当。

这是我主题的functions.php中的相关代码...

这是我添加按钮的方法:

// Add the Style selectbox to the second row of MCE buttons
function my_mce_buttons_2($buttons)
{
    array_unshift($buttons, 'styleselect');
    return $buttons;
}
add_filter('mce_buttons_2', 'my_mce_buttons_2');

这是我添加样式的方法(当我取消注释时它会起作用):

//Define the actual styles that will be in the box
function my_mce_before_init($init_array)
{
    // add classes using a ; separated values
    //$init_array['theme_advanced_styles'] = "Section Head=section-head;Sub Section Head=sub-section-head";

    $temp_array['theme_advanced_styles'] = array(
        array(
            'title' => 'Section Head',
            'block' => 'h3',
            'classes' => 'section-head'
        ),
        array(
            'title' => 'Sub Section Head',
            'block' => 'h4',
            'classes' => 'sub-section-head'
        )       
    );

    $styles_array = json_encode( $temp_array['theme_advanced_styles'] );

            //  THIS IS THE PROBLEM !!!! READ BELOW
    $init_array['theme_advanced_styles'] = $styles_array;

    return $init_array;
}
add_filter('tiny_mce_before_init', 'my_mce_before_init');

更新:我想通了(请参阅下面的答案)。在向下滚动之前,请注意在上面的代码中,theme_advanced_styles 是错误的键。以我正在做的方式定义自定义样式时,它应该是style_formats。我怀疑这是一个常见的错误。

【问题讨论】:

    标签: wordpress tinymce wordpress-theming


    【解决方案1】:

    看来你正在使用这个(很棒的)教程:http://alisothegeek.com/2011/05/tinymce-styles-dropdown-wordpress-visual-editor/
    对我来说效果很好,所以我将您的代码与我的代码进行了比较:您似乎缺少一个

    'wrapper' => true
    

    作为每个子数组的第四个参数。这对于在您的选择的父元素上添加一个类(它可以扩大您的选择范围)以及在添加类之前不围绕您的确切选择创建新元素是必需的。
    因此,如果您选择一个段落的一部分或 2 个段落的一部分,它将选择整个段落(不太确定 2 个段落的事情,请测试 :) 但至少它不会在您的周围创建内联元素准确的选择)。

    来自文档(以上链接):

    wrapper [optional, default = false]
      if set to true, creates a new block-level element
      around any selected block-level elements
    

    我的自定义:

    $style_formats = array(
        array(
            'title' => 'Column',
            'block' => 'div',
            'classes' => 'col',
            'wrapper' => true
        ),
        array(
            'title' => 'Some div with a class',
            'block' => 'div',
            'classes' => 'some_class',
            'wrapper' => true
        ),
        array(
            'title' => 'Title with other CSS',
            'selector' => 'h3',
            'classes' => 'other_style'
        ),
        array(
            'title' => 'Read more link',
            'selector' => 'a',
            'classes' => 'more'
        )
    );
    

    希望对你有用

    【讨论】:

    • 谢谢费利佩。这是我发现的第一批教程之一,但它对我不起作用。我尝试添加他的代码和安装他的插件,在这两种情况下,当它处于活动状态/未注释状态时,我都会得到一个白屏死机。如果你看看下面的 cmets,看来我不是唯一一个。您运行的是哪个版本的 Wordpress?
    • 我只是仔细检查了它,它仍然无法正常工作,即使使用'wrapper'=>true。为了安全起见,我恢复到将选项定义为字符串的(注释)版本,它仍然可以工作......(但通过在所有内容周围添加<span>s)。所以这意味着我在数组中声明类的方式一定有问题。令人沮丧的是,我找不到任何关于该替代方案的文档。 TinyMCE 文档 (tinymce.com/wiki.php/Configuration:theme_advanced_styles) 几乎不存在,根本没有提到这个替代方案。
    • ...我只是注意到我们忽略了另一个差异(请参阅我的答案)。非常感谢您的帮助。
    【解决方案2】:

    啊哈!

    我发现了问题:定义自定义类的两个不同版本必须添加到设置数组中的不同键。

    这个版本...

    "Section Head=section-head;Sub Section Head=sub-section-head";
    

    ...必须是'theme_advanced_styles' 的值。

    而这个版本...

    $style_formats = array(
    array(
        'title' => 'Column',
        'block' => 'div',
        'classes' => 'col',
        'wrapper' => true
        ),
    );
    

    ...必须是 TinyMCE 设置数组中'style_formats' 的值。

    我已更改为第二种样式,但没有注意到数组的不同键。

    【讨论】:

    • 能否提供完整的工作代码?我也在努力让它工作,但还没有运气。
    • 使用问题中的原始代码,但将 'theme_advanced_styles' 替换为 'style_formats'。
    • 仅供参考......对于那些试图让它发挥作用的人 - 它确实 - 答案中没有提到的技巧(但在问题中)是你必须 json_encode $style_formats 数组,然后将其分配给 style_formats 设置
    【解决方案3】:

    Wordpress 提供了向编辑器添加自定义样式表的功能:http://codex.wordpress.org/Function_Reference/add_editor_style

    【讨论】:

      猜你喜欢
      • 2020-05-22
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 2017-02-22
      • 1970-01-01
      • 2010-10-27
      相关资源
      最近更新 更多