Skip to content

Как убрать комментарии для страниц картинок в WordPress

Привет, друзья! Сегодня речь опять пойдет про WordPress. Дело в том, что для каждого загруженного медиафайла в WordPress создается отдельная страница, как для и записей. Но шаблон для этих страниц берется по-умолчанию из файла single.php и к ним добавляется форма комментариев. Я считаю, что это не очень хорошо, т.к. туда вам смогут спамить! Прямого воздействия через настройки WordPress убрать комментарии от туда нельзя. Но я знаю несколько хаков, которые нам помогут!

Вариант 1

Вы можете скопировать файл single.php и переименовать его в attachment.php. А в нем убрать функцию подключения файла комментариев. Вот возможный код для данного файла. Но в вашей теме он будет наверное другой.

<?php get_header(); ?>

<div id="primary" <?php gridiculous_primary_attr(); ?>>

<?php
while ( have_posts() ) : the_post();
get_template_part( 'content', 'page' );
endwhile; // end of the loop.
?>

</div><!-- #primary.c8 -->

<?php get_footer(); ?>

Вариант 2

Вы можете немного исправить файл single.php. Дело в том, что WordPress таким страницам дает отдельный тип записи attachment. И мы можем подключать комментарии только в том случае, если запись не имеет тип attachment. Найдите в вашем файле single.php примерно такую строку:

comments_template( '', true );

И замените ее на следующую:

if (get_post_type( get_the_ID() ) != 'attachment' ) {comments_template( '', true );}

Вариант 3

Или вы можете использовать следующий хук WordPress. Добавьте в файл function.php следующий код:

add_action( 'pre_comment_on_post', 'remove_comments_from_attachments', 10, 2 );
/**
* Function to remove the comment section from all attachment pages
*
* @param  $open
* @param  $post_id
*/
function remove_comments_from_attachments( $open, $post_id ){
return ( 'attachment' == get_post_type( $post_id )  ) ? false : $open;
}

Заключение

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

Обновление

Так, урок уже опубликован и я проверил работу 1-го и 2-го варианта. Мне почему-то приглянулся первый вариант, но для его использования вы должны знать, как создать правильный файл attachment.php, потому что, если скопировать содержимое файла single.php и убрать все лишнее для страниц с медиа файлами, не будет появляться картинка (если данный медиа файл — картинка). Поэтому вот вам код, который будет выводить картинку. Вставьте его перед строкой с кодом get_content();:

<?php if ( wp_attachment_is_image( $post->id ) ) : $att_image = wp_get_attachment_image_src( $post->id, "full"); ?>
<p class="attachment"><a href="<?php echo wp_get_attachment_url($post->id); ?>" title="<?php the_title(); ?>" rel="attachment"><img src="<?php echo $att_image[0];?>" width="<?php echo $att_image[1];?>" height="<?php echo $att_image[2];?>" class="attachment-medium" alt="<?php $post->post_excerpt; ?>" /></a>
</p>
<?php else : ?>
<a href="<?php echo wp_get_attachment_url($post->ID) ?>" title="<?php echo wp_specialchars( get_the_title($post->ID), 1 ) ?>" rel="attachment"><?php echo basename($post->guid) ?></a>
<?php endif; ?>

Вот и все, что касается создания файла attachment.php.