如何在页面编辑器中添加新选项卡

时间:2013-11-11 作者:Tony Bogdanov

有人知道如何做到这一点吗?

enter image description here

它与元框有关,但我就是想不出正确的语法。

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成

我记得有一次我这样做了,昨天我找到了地方,但代码是。所以今天我对它做了一些改进,我将与大家分享。在我想解释我做什么之前。

首先,有三件事要做:

在标准2旁边添加选项卡标题,在选项卡内容中添加一些内容,使内容在单击选项卡标题时显示,在单击标准选项卡标题时消失,大多数内容都需要js,因此我们还需要在正确的页面中添加js(post.php和post new.php)。

第1点can\'t 可以通过PHP完成,因为这些按钮的标记直接从wp_editor 函数,无需任何过滤器处理。所以唯一的机会就是通过javascript添加它们。

第二点,可以通过PHP轻松完成,使用函数挂钩the_editor 滤器

第三点是通过javascript完成的。

对于所有代码,我创建了一个包含3个文件的简单插件:

  • gmet.php - 主插件文件gmet.js - 包含javascript的文件gmet-content.php - 这个文件包含选项卡内容,我为选项卡内容创建了另一个文件,这样就可以轻松地对其进行自定义,而无需深入研究代码。

    gmet。php

    <?php namespace GMET;
    /*
     * Plugin Name: GM Editor Tab
     * Author: Giuseppe Mazzapica
     * Author URI: http://wordpress.stackexchange.com/users/35541/g-m
     *
     * Text Domain: gmet
     */
    
    
    \\add_action(\'admin_init\', \'\\GMET\\init\'); 
    
    function init() {
      \\load_plugin_textdomain( \'gmet\', false, dirname( \\plugin_basename( __FILE__ ) ) );
      \\add_action(\'admin_enqueue_scripts\', \'\\GMET\\scripts\');
      \\add_filter(\'the_editor\', \'\\GMET\\content\');
    }
    
    function scripts( $page ) {
      if ( $page === \'post.php\' || $page === \'post-new.php\' ) {
        $custom_css = "#content-gmet.active { 
          border-color: #ccc #ccc #f4f4f4; background-color: #f4f4f4; color: #555;
        }";
        wp_add_inline_style( \'colors\', $custom_css );
        \\wp_enqueue_script(\'gmet\', \\plugins_url(\'/gmet.js\', __FILE__ ) );
        \\wp_localize_script( \'gmet\', \'gmetData\', array(
          \'tabTitle\' => __(\'My Custom Tab\', \'gmet\')
        ) );
      }
    }
    
    function content( $content ) {
      preg_match("/<textarea[^>]*id=[\\"\']([^\\"\']+)\\"/", $content, $matches);
      $id = $matches[1];
      // only for main content
      if( $id !== "content" ) return $content;
      ob_start();
      include( \\plugin_dir_path( __FILE__ ) . \'gmet-content.php\' );
      return $content . ob_get_clean();
    }
    
    只有3个功能:第一个设置挂钩,第二个在页面中添加javascript,第三个负责在选项卡页面上添加内容。

    gmet。js公司

    (function($) {
    
      $(document).ready(function() {
        var $bar = $(\'<div></div>\');
        $bar.addClass(\'quicktags-toolbar\');
        $wrap = $(\'#gmet_content_wrap\');
        $wrap.children().css(\'padding\', \'5px 15px\');
        $wrap.prepend($bar);
        $(\'#wp-content-editor-tools #content-html\').before(
          \'<a id="content-gmet" class="wp-switch-editor">\' + gmetData.tabTitle + \'</a>\'
        );
      });
    
      $(document).on(\'click\', \'#content-gmet\', function(e) {
        e.preventDefault();
        var id = \'content\';
        var ed = tinyMCE.get(id);
        var dom = tinymce.DOM;
        $(\'#wp-content-editor-container, #post-status-info\').hide();
        dom.removeClass(\'wp-content-wrap\', \'html-active\');
        dom.removeClass(\'wp-content-wrap\', \'tmce-active\');
        $(this).addClass(\'active\');
        $(\'#gmet_content_wrap\').show();
      });
    
      $(document).on(\'click\', \'#content-tmce, #content-html\', function(e) {
        e.preventDefault();
        $(\'#content-gmet\').removeClass(\'active\');
        $(\'#gmet_content_wrap\').hide();
        $(\'#wp-content-editor-container, #post-status-info\').show();
      });
    
    })(jQuery);
    
    还有3个任务:在document ready上,我设置了一些css,最重要的是,我将选项卡标题标记添加到编辑器中。当用户单击我们的选项卡标题时运行第二个任务:隐藏标准编辑器,并显示我们的内容。到隐藏的标准编辑器,我从中复制并粘贴了som代码wp-admin/js/editor.js. 最后一个任务是最简单的,当单击标准选项卡标题时,我会隐藏选项卡内容并从选项卡标题中删除类“active”。

    gmet含量。php

    <div id="gmet_content_wrap" class="wp-editor-container">
      <!-- Everything you want to output should go inside this div -->
      <h3>Hi there</h3>
      <p>
        <input type="text" class="regular-text" name="gmet_text" placeholder="Example" />
      </p>
      <p>
       <textarea name="gmet_textarea" cols="100" id="gmet_textarea" rows="10"></textarea>
      </p>
    </div>
    
    此文件包含aour选项卡中显示的内容。这只是一个示例,可以根据需要进行自定义,只需记住在包装器div中添加所有内容。

    现在,只需在插件目录中创建一个文件夹,保存其中的所有3个文件,然后转到dasboard并激活插件。

    所有文件都可用作Gisthere.

SO网友:Michael Lewis

这不容易做到。这是硬编码到核心中的,与元框无关。

如果检查这些选项卡的HTML,可以看到一些类,如wp-switch-editor switch-html and switch-tmce. 如果您搜索这些类的核心代码,您可以找到它在哪里创建这些选项卡。

最困难的部分是剖析实际切换它的JavaScript,并添加对新选项卡的支持。

结束

相关推荐

Show posts image attachments

我正在为我的照片博客创建一个归档页面。我的帖子有一个或多个图片。我想在一个页面中显示所有附件缩略图。使用特色图像(the\\u post\\u缩略图)仅显示1个缩略图,我想显示所有附加的图像缩略图。<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <?php $thumbnails = get_posts(\'numberposts=30\'); foreach ($