• Rozwiązano marira

    (@marira)


    Mam wtyczkę Akismeta podłączoną i generuje ona w panelu admina w komentarzach linki z wiadomościami tzw. Oś czasu komentarzy np. w oczekujących lub spamie typu „Przepuszczony przez akismeta”, „oznaczony jako spam przez” itp. Chciałabym żeby te lilnki nie były widoczne dla użytkowników tylko dla administratora. Na poziomie autora te linki są widoczne. Może ktoś wie jak je ukryć np. przed autorem ale administratorem już nie. Będę wdzięczna za pomoc.

Viewing 10 replies - 1 through 10 (of 10 total)
  • Thread Starter marira

    (@marira)

    Zauważyłam coś i muszę naprawić zapytanie. Otóż, dobrze żeby te linki z wiadomościami się pojawiały w komentarzach, ale żeby nie można było na nie kliknąć i przejść do moderowania komentarza. Tylko same wiadomości informacyjne nie klikalne.

    Moderator amistad18

    (@amistad18)

    Mógł/a byś podać przykład strony na której tak masz? Oraz nazwy używanego szablonu?

    Dodatkowo – jesteś pewny/a że po wylogowaniu się, albo na innej przeglądarce, jako gość lub jedynie autor komentarza (ale nie zalogowany użytkownik WordPressa) też są widoczne te linki do moderacji? Jak dla mnie jest to praktycznie niemożliwe 🙂

    Thread Starter marira

    (@marira)

    Dziękuję za zainteresowanie moimm pytaniem. Po wylogowaniu oczywiście nie widać ich 🙂 Po zalogowaniu w roli autora te linki widać. Mam szablon Albizia. Ale to nie ma znaczenia bo na innych szablonach też to widać. Po prostu Akismet dodaje takie powiadomienia, jeżeli coś dodaje się do spamu lub on sam uzna za spam. W prosty sposób w Akismecie w jednym z plików można odlinkować, i wiadomości pozostają, ale kilkać w nie już nie można. Ale jeżeli będzie aktualizacja Akismeta wówczas trzeba pamiętać gdzie się odlinkowało, w którym pliku inaczej te linki znów będa czynne. Chciałam to zrobić poprzez dodanie odpowiedniej funkcji w function.php, żeby nie myśleć, że to może po aktualizacji się zmienić, ale nie mogę znależć odpowiedenej formułki że tak powiem na ten problem.

    Moderator amistad18

    (@amistad18)

    To wtedy powiedz jaką masz wersję akismenta, oraz w których linijkach dokonujesz modyfikacji.

    Thread Starter marira

    (@marira)

    Nie wiem gdzie spojrzeć jaka jest wersja Akismeta, w każdym razie nie pisze żeby go aktualizować a mam wersję wordpessa 3.4.1. Jeżeli chodzi o ten link to podaję: w folderze akismeta plik admin.php w lini 382 jest taka funkcja:

    $b['history'] = '<a href="comment.php?action=editcomment&c='.$comment->comment_ID.'#akismet-status" title="'. esc_attr__( 'View comment history' ) . '"> '. __('History') . '</a>';

    Jeżeli tutaj odlinkuje to na stronie admina, w komentarzach, pojawiają się wiadomości Akismeta, ale nie można na nie kliknąć, i dobrze, bo kliknięcie przenosi do edycji komentarza, a ja nie chcę żeby te komentarze edytować, dlatego chciałabym to odlinkować, ale nie w pliku admin.php tylko w swoim szablonie w function.php, żeby nie mieć problemów kiedy akismeta będe w przyszłości aktualizować. Może cos poradzisz?

    Moderator amistad18

    (@amistad18)

    Spróbuj dodać coś takiego na końcu pliku functions.php:

    remove_filter( 'comment_row_actions', 'akismet_comment_row_action', 11, 2 );
    
    function akismet_comment_row_action_fixed( $a, $comment ) {
    
    	// failsafe for old WP versions
    	if ( !function_exists('add_comment_meta') )
    		return $a;
    
    	$akismet_result = get_comment_meta( $comment->comment_ID, 'akismet_result', true );
    	$akismet_error = get_comment_meta( $comment->comment_ID, 'akismet_error', true );
    	$user_result = get_comment_meta( $comment->comment_ID, 'akismet_user_result', true);
    	$comment_status = wp_get_comment_status( $comment->comment_ID );
    	$desc = null;
    	if ( $akismet_error ) {
    		$desc = __( 'Awaiting spam check' );
    	} elseif ( !$user_result || $user_result == $akismet_result ) {
    		// Show the original Akismet result if the user hasn't overridden it, or if their decision was the same
    		if ( $akismet_result == 'true' && $comment_status != 'spam' && $comment_status != 'trash' )
    			$desc = __( 'Flagged as spam by Akismet' );
    		elseif ( $akismet_result == 'false' && $comment_status == 'spam' )
    			$desc = __( 'Cleared by Akismet' );
    	} else {
    		$who = get_comment_meta( $comment->comment_ID, 'akismet_user', true );
    		if ( $user_result == 'true' )
    			$desc = sprintf( __('Flagged as spam by %s'), $who );
    		else
    			$desc = sprintf( __('Un-spammed by %s'), $who );
    	}
    
    	// add a History item to the hover links, just after Edit
    	if ( $akismet_result ) {
    		$b = array();
    		foreach ( $a as $k => $item ) {
    			$b[ $k ] = $item;
    			if (
    				$k == 'edit'
    				|| ( $k == 'unspam' && $GLOBALS['wp_version'] >= 3.4 )
    			) {
    				$b['history'] = '<a href="comment.php?action=editcomment&c='.$comment->comment_ID.'#akismet-status" title="'. esc_attr__( 'View comment history' ) . '"> '. __('History') . '</a>';
    			}
    		}
    
    		$a = $b;
    	}
    
    	if ( $desc )
    		echo '<span class="akismet-status" commentid="'.$comment->comment_ID.'"><a href="comment.php?action=editcomment&c='.$comment->comment_ID.'#akismet-status" title="' . esc_attr__( 'View comment history' ) . '">'.htmlspecialchars($desc).'</a></span>';
    
    	if ( apply_filters( 'akismet_show_user_comments_approved', get_option('akismet_show_user_comments_approved') ) == 'true' ) {
    		$comment_count = akismet_get_user_comments_approved( $comment->user_id, $comment->comment_author_email, $comment->comment_author, $comment->comment_author_url );
    		$comment_count = intval( $comment_count );
    		echo '<span class="akismet-user-comment-count" commentid="'.$comment->comment_ID.'" style="display:none;"><br><span class="akismet-user-comment-counts">'.sprintf( _n( '%s approved', '%s approved', $comment_count ), number_format_i18n( $comment_count ) ) . '</span></span>';
    	}
    
    	return $a;
    }
    
    add_filter( 'comment_row_actions', 'akismet_comment_row_action_fixed', 12, 2 );

    I w tym kodzie zmień co tam musisz, akismeta przywróć do oryginalnej formy, i sprawdź czy działa.

    Thread Starter marira

    (@marira)

    Wkleiłam kod, i jest tak. Linki się zdublowały. Zamiast jednej wiadomości są dwie, oczywiście takie same. Po prostu kod nie usuwa linku który już jest, wręcz odwrotnie nadpisuje go. Pomimo wszystko chciałam chociaż spróbować i odlinkować, pomimo że link wyrzucam z function.php to i tak na stronie dalej istnieje, zupełnie jakby kod nie reagował. Ale ja po południu sprawdzę go jeszcze raz, teraz jest 02.05, maślą mi się oczy a za oknem burza więc nie myślę za dobrze. Na spokojnie po południu jeszcze raz sprawdzę. Ale dziękuję Ci z całego serca za pomoc i za Twój trud, doceniam to bardzo. Pozdrawiam. Jak dokładnie sprawdzę napiszę ponownie.

    Thread Starter marira

    (@marira)

    I już sprawdziłam, i poprawiłam. Zrobiłeś niewielki błąd. Podaję nową wersję, która u mnie działa. Mam nadzieję, że komuś jeszcze się przyda. W kodzie zamiesciłam uwagi. Tam jest podane który link należy usunąć żeby Akismet nie wyświetlał podlinkowania tylko samą wiadomość. Bo te wiadomości są ważne, ale podlinkowanie prowadzi do osi czasu dzięki której użytkownik może wejść i sam edytować czyjś komentarz. Jeżeli ktoś daje na stronie dostęp wielu użytkownikom to jest to zbędne bo tam pokazuje adres email użytkownika. Dziękuję Ci raz jeszcze za pomoc!

    Plik należy wkleić do function.php w folderze swojego obecnego templata.

    remove_filter( 'comment_row_actions', 'akismet_comment_row_action', 10, 2 );//tutaj dałeś wartość 11,2 a powinno być 10,2 tak jak na dole dlatego zdublowalo linki
    
    function akismet_comment_row_action_fixed( $a, $comment ) {
    
    	// failsafe for old WP versions
    	if ( !function_exists('add_comment_meta') )
    		return $a;
    
    	$akismet_result = get_comment_meta( $comment->comment_ID, 'akismet_result', true );
    	$akismet_error = get_comment_meta( $comment->comment_ID, 'akismet_error', true );
    	$user_result = get_comment_meta( $comment->comment_ID, 'akismet_user_result', true);
    	$comment_status = wp_get_comment_status( $comment->comment_ID );
    	$desc = null;
    	if ( $akismet_error ) {
    		$desc = __( 'Awaiting spam check' );
    	} elseif ( !$user_result || $user_result == $akismet_result ) {
    		// Show the original Akismet result if the user hasn't overridden it, or if their decision was the same
    		if ( $akismet_result == 'true' && $comment_status != 'spam' && $comment_status != 'trash' )
    			$desc = __( 'Flagged as spam by Akismet' );
    		elseif ( $akismet_result == 'false' && $comment_status == 'spam' )
    			$desc = __( 'Cleared by Akismet' );
    	} else {
    		$who = get_comment_meta( $comment->comment_ID, 'akismet_user', true );
    		if ( $user_result == 'true' )
    			$desc = sprintf( __('Flagged as spam by %s'), $who );
    		else
    			$desc = sprintf( __('Un-spammed by %s'), $who );
    	}
    
    	// add a History item to the hover links, just after Edit
    	if ( $akismet_result ) {
    		$b = array();
    		foreach ( $a as $k => $item ) {
    			$b[ $k ] = $item;
    			if (
    				$k == 'edit'
    				|| ( $k == 'unspam' && $GLOBALS['wp_version'] >= 3.4 )
    			)
    					{
    				$b['history'] = '<a href="comment.php?action=editcomment&c='.$comment->comment_ID.'#akismet-status" title="'. esc_attr__( 'View comment history' ) . '"> '. __('History') . '</a>';
    			}
    		}
    
    		$a = $b;
    	}
    
    	if ( $desc )
    		echo '<span class="akismet-status" commentid="'.$comment->comment_ID.'"><a href="comment.php?action=editcomment&c='.$comment->comment_ID.'#akismet-status" title="' . esc_attr__( 'View comment history' ) . '">'.htmlspecialchars($desc).'</a></span>'; // tutaj proszę zdjąć ten link <a href="comment.php?action=editcomment&c='.$comment->comment_ID.'#akismet-status" title="' . esc_attr__( 'View comment history' ) . '"> czyli odlinkować i bedzie widac powiadomienia ale bez mozlliwosci klikniecia
    
    	if ( apply_filters( 'akismet_show_user_comments_approved', get_option('akismet_show_user_comments_approved') ) == 'true' ) {
    		$comment_count = akismet_get_user_comments_approved( $comment->user_id, $comment->comment_author_email, $comment->comment_author, $comment->comment_author_url );
    		$comment_count = intval( $comment_count );
    		echo '<span class="akismet-user-comment-count" commentid="'.$comment->comment_ID.'" style="display:none;"><br><span class="akismet-user-comment-counts">'.sprintf( _n( '%s approved', '%s approved', $comment_count ), number_format_i18n( $comment_count ) ) . '</span></span>';
    	}
    
    	return $a;
    }
    
    add_filter( 'comment_row_actions', 'akismet_comment_row_action_fixed', 10, 2 ); //tutaj dałeś wartość 12,2 a powinno być 10,2
    Moderator amistad18

    (@amistad18)

    Te liczby 11 i 12 oznaczają priorytet, im mniejsza liczba, tym jest wyższy priorytet. We wtyczce dodany filtr miał priorytet 10, nie byłem pewien czy usuwając filtr z priorytetem także 10, uda się to zrobić, dlatego dałem większe liczby aby na pewno próbowało usunąć filtr już po tym jak go doda, a nie przed nim. Nie byłem pewien czy WP czasem nie obsługuje priorytetu od 1-10, nigdzie nie mogłem znaleźć tej informacji, a jako że sam nie mam tego problemu to nie mogłem też tego przetestować – teraz już przynajmniej wiemy 🙂

    Cieszę się że sama sobie poradziłaś z poprawieniem tego, nawet bez powyższego wytłumaczenia w poprzednim poście 🙂

    Thread Starter marira

    (@marira)

    Zapoznaję się z wordpressem od miesiąca. Jeszcze się go uczę, ale nie jestem laikiem w oskryptowaniu. Tutaj jest znacznie inaczej niż w normalnych skryptach, ale mniej więcej łapię co chodzi 🙂 Dlatego mogłam po pryjrzeniu się mniej więcej wyczuć co może być nie tak 🙂 Miło mi było współpracować z Tobą 🙂

Viewing 10 replies - 1 through 10 (of 10 total)
  • Temat ‘Linki Akismeta’ jest zamknięty na nowe odpowiedzi.