Привет,
вот как можно сделать ссылку кликабельной:
1) нужно добавить условие: если данные в поле существуют — выводить ссылку, если нет — ничего не выводить:
2) обязательно используйте функцию esc_attr_e()
вместо echo
внутри атрибутов!. Ну это так, на будущее — здесь не понадобится.
3) добавьте дополнительные хелперы для превращения url в ссылки:
// используется в ooh_my_make_clickable и делает http строку ссылкой
function ooh_my_make_url_clickable($matches) {
$url = $matches[2];
$url = esc_url($url);
if (empty($url))
return $matches[0];
return $matches[1] . "<a target=\"_blank\" href=\"$url\" rel=\"nofollow\">$url</a>";
}
// Ищет любой http адрес и автоматически превращает в ссылку
function ooh_my_make_clickable($ret) {
$ret = ' ' . $ret;
$ret = preg_replace_callback('#(?<=[\s>])(\()?([\w]+?://(?:[\w\\x80-\\xff\#$%&~/=?@\[\](+-]|[.,;:](?![\s<]|(\))?([\s]|$))|(?(1)\)(?![\s<.,;:]|$)|\)))+)#is', 'ooh_my_make_url_clickable', $ret);
$ret = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3</a>", $ret);
$ret = trim($ret);
return $ret;
}
Поместите эти хелперы в файл functions.php вашей активной темы и используйте везде, где пожелаете
4) Ваш код должен выглядеть примерно так:
<?php if( get_post_meta( $post->ID, 'avtor', true ) ) echo 'Источник: ' . stripslashes( ooh_my_make_clickable( get_post_meta( $post->ID, 'avtor', true ) ) ) ); ?>
Попробуйте это и дайте знать, если что-то не работает.
Здравствуйте.
Попробовал. Если без http… то не определяет текст ка ссылку.
Получилось вот так:
Источник: https://www.google.com.ua/
а я хочу сделать вот так:
Источник
moysite.com/moiastatia/chujoisite.com/originalnaiastatia/
Такая ссылка получится, если перед chujoisite.com
не указать http://
. Сделайте, чтобы протокол перед выводом добавлялся автоматически, если в произвольном поле он не указан.
2) обязательно используйте функцию esc_attr_e()
вместо echo внутри атрибутов!
Замечание в целом верное, но esc_attr_e()
предназначена только для строк, подлежащих переводу. Для обычных атрибутов нужно использовать esc_attr()
, а для ссылок — esc_url()
:
http://codex.wordpress.org/Function_Reference/esc_attr
http://codex.wordpress.org/Function_Reference/esc_url
3) добавьте дополнительные хелперы для превращения url в ссылки
В WordPress есть штатная функция make_clickable()
:
http://codex.wordpress.org/Function_Reference/make_clickable
Сергей, спасибо, по поводу «указывать http://» — помогло.
Осталась проблемка: если avtor не указано, то автоматом подставляется адрес страницы на которой находимся.
Не критично, но хотелось бы убрать в таких случаях «Источник».
Я в программировании 0, поэтому вывел это так: if(get_post_meta( $post->ID, 'avtor', true)) echo
Получился полный код: <?php if(get_post_meta( $post->ID, 'avtor', true)) echo <a href="<?php echo (get_post_meta($post->ID, 'avtor', true)); ?>">Источник</a> ?>
Но он не работает ))) Выдает ошибку. Лишний знак <
Вот.
Сергей, спасибо большое за комментарии, буду работать с документацией.
@vabzz простите, что желание помочь превратилось в медвежью услугу для вас. Позвольте реабелитироваться перед вами:
<?php
if( get_post_meta( $post->ID, 'avtor', true) )
echo '<a href="' . esc_url( get_post_meta( $post->ID, 'avtor', true) ) . '">Источник</a>';
?>
@dikiy_forester — работает!!! Огромное спасибо!!
Не за что по факту 😀 Спасибо Сергею!
Удачи с вашим проектом!
[SOLVED]