WordPress как на ладони

Ссылка на комментарий с учётом страницы в многостраничной ленте комментариев

Имеется виджет, выводящий последние комментарии и имеется многостраничная лента комментариев. Ссылки на комментарии в виджете имеют вид page_id=170#comment-2153, но так как в ленте насколько страниц, то при переходе по ссылке перехода к самому комментарию не происходит, так как для этого нужна ссылка типа page_id=170&cpage=13#comment-2153

Вопрос - как исправить ситуацию, чтобы любые линки на комментарии в виджете (да и вообще везде на сайте) формировались с учётом страницы?

Связанный с ним вопрос - можно ли настроить систему так, чтобы при наведении курсора на ссылку, ведущую к комментарию, текст комментария полностью всплывал в модальном окне?

0
Quatrix
7.5 лет назад
  • 0
    Kama9616

    Вам нужно отредактировать код виджета.

    Собрать правильную ссылку поможет функция get_comments_link()

    Весь текст комментария можно получить с помощью get_comment_text()

    Quatrix 7.5 лет назад

    Спасибо за ответ. Но что-то я совсем запутался. Дело в том, что такая же ошибка присутствует в стороннем плагине, выводящем оповещения о комментариях и ответах на них, что наводит на мысль об ошибках в глобальных настройках.
    Изучил по вашим ссылкам, дошёл в результате до кодекса wordpress и файла comment-template.php который, вроде и отвечает в т.ч. за получение ссылок для виджетов. И застрял. Чисто теоретически там ошибок быть не дОлжно.Однако ж...
    Я так понимаю глобально зв получение интересующей меня ссылки отвечает вот этот участок.

    function get_comments_link( $post_id = 0 ) {
    	$hash = get_comments_number( $post_id ) ? '#comments' : '#respond';
    	$comments_link = get_permalink( $post_id ) . $hash;
    
    	/**
    	 * Filters the returned post comments permalink.
    	 *
    	 * @since 3.6.0
    	 *
    	 * @param string      $comments_link Post comments permalink with '#comments' appended.
    	 * @param int|WP_Post $post_id       Post ID or WP_Post object.
    	 */
    	return apply_filters( 'get_comments_link', $comments_link, $post_id );
    }
    
    /**
     * Display the link to the current post comments.
     *
     * @since 0.71
     *
     * @param string $deprecated   Not Used.
     * @param string $deprecated_2 Not Used.
     */
    function comments_link( $deprecated = '', $deprecated_2 = '' ) {
    	if ( !empty( $deprecated ) )
    		_deprecated_argument( __FUNCTION__, '0.72' );
    	if ( !empty( $deprecated_2 ) )
    		_deprecated_argument( __FUNCTION__, '1.3.0' );
    	echo esc_url( get_comments_link() );
    }

    но сообразить что тут не так я не могу. Либо я не туда залез.
    Кстати, изначально искал аналог в файлах темы - не нашёл.

    Quatrix 7.5 лет назад

    Хотел сначала отредактировать предыдущий коммент, потом подумал, что если вдруг его кто-то уже видел - просто внесу путаницу. Посему добавлю новым комментом.

    Я целый день изучал коды и эксперементировал. Нашёл у себя в системе ещё один виджет, который аналогичен по функциям - выводит последние комменты. Подключил - и о чудо - он генерирует правильные ссылки. Значит всёже дело в виджете и плагине оповещения.

    У правильно работающего виджета всё достаточно просто:

    '<a href="' . esc_url( get_comment_link( $comment ) ) . '">' . get_the_title( $comment->comment_post_ID ) . '</a>'

    а вот у работающего через "ж" я так и не нашёл нужной строчки, но не это важно - виджеты можно поменять. А вот с плагином оповещения сложнее. Строки, отвечающие за вывод ссылки выглядит так

    'notice_subject'=>'Ответ на комментарий',
    				'notice_content'=>'Пользователь <a href="'.get_author_posts_url($comment->user_id).'">'.get_the_author_meta('display_name',$comment->user_id).'</a> 
    ответил на ваш <a href="'.get_permalink($comment->comment_post_ID).'#comment-'.$comment->comment_ID.'">комментарий</a>'

    я знаю что последняя, но привёл весь блок целиком на всякий случай. И я не могу сообразить как правильно пересобрать нужный код. Вернее дважды пробовал и wordpress благосклонно отключал плагин. Ошибка.
    Вся надежда на вас.

    Я понимаю, что логичнее было бы обратится к авторам, но они меня тупо игнорируют неделю. Как я понял по общению с ними по другим вопросам "в мире бесплатного если что-то работает у них, но не работает у других - это исключительно проблемы "других"".

    PS. Здесь же мне надо вывести сам текст комментария - после оповещения. Я был бы крайне благодарен если бы вы помогли мне правильно это сделать. Самостоятельные попытки приводили либо к ошибке синтаксиса, либо к отключению плагина.

    Kama 7.5 лет назад
    'Пользователь <a href="'.get_author_posts_url($comment->user_id).'">'.get_the_author_meta('display_name',$comment->user_id).'</a> 
    ответил на ваш <a href="' . esc_url( get_comment_link( $comment ) ) . '">комментарий</a>'
    Quatrix 7.5 лет назад

    Огромаднейшее спасибо - работает. Я сам пытался что-то вроде этого собрать, но мозгов не хватило убрать из ссылки лишнее.
    Одно непонятно - зачем авторы такую сложную конструкцию создали, когда можно было бы проще.
    Насчёт вывода текста - подскажите? (тут должен быть краснеющий смайлик, потупивший очи долу)

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация