Администратор сайта Wordpress не может публиковать <iframe>s в мультисайтовой сети - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть многосайтовая сеть Wordpress. Я обнаружил, что если вы не являетесь администратором сети, администраторы сайта не могут публиковать теги <iframe>s или <script>.

Что я пробовал:

  • Добавлена ​​возможность unfiltered_html для роли администратора
  • Добавлен iframe к глобальному $allowedtags
  • Добавлено iframe к extended_valid_elements с использованием фильтра tiny_mce_before_init

Я много читал, и я знаю, что есть плагин Iframe, но было бы лучше, если бы мои пользователи могли копировать и вставлять Iframes с YouTube и т. Д.

Любое понимание очень ценится!

РЕДАКТИРОВАТЬ: полный код ниже

function add_theme_caps() {
    $role = get_role('administrator');
    $role->add_cap('unfiltered_html');
}
add_action('admin_init', 'add_theme_caps');



public function add_tags()
{
    global $allowedtags;
    $allowedtags['iframe'] = [
        'src'               => [],
        'width'             => [],
        'height'            => [],
        'frameborder'       => [],
        'style'             => [],
        'allowfullscreen'   => []
    ];
}
add_action('init', 'add_tags');



public function add_mce_tags($options) {
    // Comma separated string of extended tags
    $ext = 'iframe[align|longdesc|name|width|height|frameborder|scrolling|marginheight|marginwidth|src]';

    if (isset($options['extended_valid_elements'])) {
        $options['extended_valid_elements'] .= ',' . $ext;
    } else {
        $options['extended_valid_elements'] = $ext;
    }
    // maybe; set tiny paramter verify_html
    // $options['verify_html'] = false;
    return $options;
}
add_filter('tiny_mce_before_init', 'add_mce_tags');

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

admin не является допустимой ролью по умолчанию, думаю, вы ищете administrator. Также считается хорошей практикой убедиться, что ваш $role объект действительно определен (хотя в этом случае это не должно быть проблемой), это должно заставить вас работать:

function add_theme_caps() {
    if( $role = get_role( 'administrator' ) ){
        $role->add_cap('unfiltered_html');
    }
}
add_action( 'admin_init', 'add_theme_caps' );
0 голосов
/ 04 сентября 2018

Вы можете решить эту проблему, используя шорткод. Если вы не нашли нужного решения.

Нечто подобное

add_shortcode('book', array('iframe_shortcode', 'shortcode')); class iframe_shortcode {
    function shortcode($atts, $content=null) {
          extract(shortcode_atts(array(
               'url'      => '',
               'scrolling'      => 'yes',
               'width'      => '680',
               'height'      => '850',
               'frameborder'      => '0',
               'marginheight'      => '0',
          ), $atts));
          if (empty($url)) return '<!-- Iframe: You did not enter a valid URL -->';
     return '<iframe src="'.$url.'" title="" width="'.$width.'" height="'.$height.'" scrolling="'.$scrolling.'" frameborder="'.$frameborder.'" marginheight="'.$marginheight.'"><a href="'.$url.'" target="_blank">'.$url.'</a></iframe>';
    } }
...