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

Как удалить или полностью отключить страницы вложений?

Я бы хотел полностью отключить все страницы вложений.

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

1
Гость
5.5 лет назад
  • 0
    Kama9602

    Используй такой хук. Он удаляет правила ЧПУ связанные со страницами вложений. После вставки кода, например, в файл functions.php нужно сбросить правила ЧПУ. Для этого нужно просто зайти в Настройки > Постоянные ссылки.

    ## Удаляет ЧПУ связанные со страницами вложений
    add_filter( 'rewrite_rules_array', 'remove_attachment_rewrite_rules' );
    function remove_attachment_rewrite_rules( $rules ) {
    	foreach( $rules as $regex => $query ){
    		if( strpos( $regex, 'attachment' ) || strpos( $query, 'attachment' ) ) 
    			unset( $rules[ $regex ] );
    	}
    
    	return $rules;
    }
    Комментировать
  • 1
    kolshix779 paxtoy.com

    Может будет полезно - у меня сайт галерея - и для вложений создан файл image.php

    есть 2 типа вложений, с прикреплением вложения к посту и без.

    Вот код, тут можете подкрутить чтоб для всех вложений была 404 ошибка.
    Сейчас настроено так чтоб только авторизированные пользователи видели все вложения, а не авторизированные видели только картинки, которые прикреплены к постам.

    Можете оставить доступ только для админа , а остальным 404

    add_action( 'template_redirect', 'sitecare_redirect_unattached_images' );
    /**
     * Redirects the attachment page for any image which has not been attached to a
     * post, page, or custom post type to the current site's home URL.
     *
     * @since  0.1.0
     * @uses   is_attachment()
     * @uses   get_queried_object()
     * @return void
     */
    
    function sitecare_redirect_unattached_images() {
    
    	$login=0;
    	if ( is_user_logged_in() ) {
    		$login = 1 ;
    	}
    
    	if ( ! is_attachment() ||  $login == 1) {
    		return;
    	}
    	$parent = get_queried_object()->post_parent;
    	if ( ! empty( $parent ) ) {
    		return;
    	}
    	if (  $login == 0 ) {       
    			global $wp_query;
    			$wp_query->set_404();
    			status_header( 404 );
    			nocache_headers();
    
    			return true; // для обрыва хука 
    
    		exit;
    
    	}
    }
    
    // для вас можно так 
    
    function sitecare_redirect_unattached_images() {    
    	$login=0;
    	if ( is_user_logged_in() && current_user_can('manage_options')  ) { 
    		$login = 1 ;
    	}
    
    	if ( ! is_attachment() ||  $login == 1) {
    		return;
    	}
    	if (  $login == 0 ) {       
    			global $wp_query;
    			$wp_query->set_404();
    			status_header( 404 );
    			nocache_headers();
    			return true; // для обрыва хука 
    		exit;   
    	}
    }
    
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация