Intereting Posts
Теги списка по полю post_meta Как я могу отправить электронное письмо через 24 часа после первого электронного письма? Функция WordPress get_posts, длина 1300 строк Как получить дочернюю тему для загрузки скриптов из родительской темы? Связанный с WordPress плагин – показывать только, если связанный контент Добавить категорию в переменный продукт Листинг заголовков и настраиваемых полей записей в подкатегориях Как установить плагин jQuery dotdotdot для WordPress? Регистрация jQuery убивает функции администратора pre_get_posts в настраиваемом типе сообщений Пагинация несколько работает на главной странице, не обновляется при нажатии «prev» «Страница не найдена» из-за символа шляпы («^») в имени загружаемого файла Может ли короткий код, включенный в постсоциальное содержимое, добавлять стили к <head>? Pretty paged permalinks в пользовательской петле типа сообщения Как перенаправить теги с старого сайта Joomla на новый сайт WordPress?

Ссылка на регулярное выражение String вместо роли 'contributor'

в настоящее время я использую приведенный ниже код, чтобы добавить rel=nofollow и target=_blank ко всем внешним ссылкам содержимого моего сайта, но я хотел бы, чтобы это произошло только на страницах Contributors. IE, авторы сообщений и выше не имеют правил перезаписи.

 <?php add_filter( 'the_content', 'cn_nf_url_parse'); function cn_nf_url_parse( $content ) { $regexp = "<a\s[^>]*href=(\"??)([^\" >]*?)\\1[^>]*>"; if(preg_match_all("/$regexp/siU", $content, $matches, PREG_SET_ORDER)) { if( !empty($matches) ) { $srcUrl = get_option('siteurl'); for ($i=0; $i < count($matches); $i++) { $tag = $matches[$i][0]; $tag2 = $matches[$i][0]; $url = $matches[$i][0]; $noFollow = ''; $pattern = '/target\s*=\s*"\s*_blank\s*"/'; preg_match($pattern, $tag2, $match, PREG_OFFSET_CAPTURE); if( count($match) < 1 ) $noFollow .= ' target="_blank" '; $pattern = '/rel\s*=\s*"\s*[n|d]ofollow\s*"/'; preg_match($pattern, $tag2, $match, PREG_OFFSET_CAPTURE); if( count($match) < 1 ) $noFollow .= ' rel="nofollow" '; $pos = strpos($url,$srcUrl); if ($pos === false) { $tag = rtrim ($tag,'>'); $tag .= $noFollow.'>'; $content = str_replace($tag2,$tag,$content); } } } } $content = str_replace(']]>', ']]&gt;', $content); return $content; } 

Solutions Collecting From Web of "Ссылка на регулярное выражение String вместо роли 'contributor'"

Для этого есть author_can() :

 add_action( 'loop_start', 'wpse105294_nofollow_author' ); function wpse105294_nofollow_author() { ! author_can( $GLOBALS['post']->ID, 'edit_others_posts' ) AND add_filter( 'the_content', 'cn_nf_url_parse'); } 

Поэтому вы добавляете только этот обратный вызов фильтра для авторов и других ролей, у которых нет возможности edit_others_posts . По умолчанию это Subscriber и Author . Для получения дополнительной информации ознакомьтесь с статьей Кодекса о ролях и возможностях .

редактировать

Поскольку я в последнее время сделал некоторые вещи с PHP HTML DOM Parser, я подумал, что лучше использовать этот. Для легкости вещей код был в основном сделан из ответа @Alex на SO .

 add_filter( 'the_content', 'cn_nf_url_parse'); function wpse_105294_Content_Parser( $content ) { $dom = new DOMDocument; $dom->loadHTML( $content ); // DOMXPath() might be just too much $anchors = $dom->getElementByTagName( 'a' ); foreach ( $anchors as $a ) { if ( ! $a->hasAttribute( 'rel' ) OR '' === ( $rel = trim( $a->getAttribute( 'rel' ) ) ) ) continue; $rel = preg_split( '/\s+/', $rel ); if ( in_array( 'nofollow', $rel ) ) continue; $rel[] = 'nofollow'; $anchor->setAttribute( 'rel', implode( ' ', $rel ) ); } $html = ''; // Remove `html\body` before returning foreach ( $dom->getElementsByTagName( 'body' )->item(0)->childNodes as $el ) $html .= $dom->saveXML( $el, LIBXML_NOEMPTYTAG ); return $html; }