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

Хуки

Фильтры

События

Хуки 35 комментариев
Полезные 1 Все
  • Максим

    Тимур, круто все!!!
    Не подсткажешь, как уйти от привязки к домену?
    К примеру - разрабатываю дома на локалке для клиента сайт. Использую OpenServer. Называю папку к примеру clientdomain.loc/ и при установке вордпресс также указываю этот домен. Естественно домен записывается в базу, а также при редактировании контента, добавления медиаматериалов через стандартный загрузчик вордпресс, добавления ссылок движок формирует полные абсолютные ссылки типа http : // clientdomain.loc/wp-content/uploads/...
    Какой фильтр можно использовать в админке, чтобы при сохранении постов, записей и всех остальных сущностей, а также при загрузке материалов в базу сохранялись ссылки без домена? (например "/wp-content/uploads/...")

    1
    • Максим

      Сделал небольшой велосипед.
      Сначала на самое первое событие вешаем функцию

      function define_url(){
        if ( !defined('WP_HOME') ){
      	define('WP_HOME','http://'.$_SERVER['HTTP_HOST']);
        }
        if ( !defined('WP_SITEURL') ){
      	define('WP_SITEURL','http://'.$_SERVER['HTTP_HOST']);
        }
      }
      add_action('muplugins_loaded','define_url', -10);

      либо в файле wp-config.php устанавливаем константы

      define('WP_HOME','http://'.$_SERVER['HTTP_HOST']);
      define('WP_SITEURL','http://'.$_SERVER['HTTP_HOST']);

      Далее создаем функцию фильтрации

      function filter_url($url){
        if(is_array($url)){
      	foreach($url as $k => $v){
      	  $url[$k] = filter_url($v);
      	}
        } else {
      	$url = str_replace(WP_SITEURL, '', $url);
        }
        return $url;
      }

      Использую ее в фильтрах

      add_filter('wp_insert_attachment_data','del_domain_from_url');
      add_filter('load_image_to_edit_attachmenturl', 'del_domain_from_url');
      add_filter('attachment_link', 'del_domain_from_url');
      // Пожалуй, главный фильтр
      add_filter('wp_insert_post_data', 'del_domain_from_url');
      // а также эти фильтры
      add_filter('get_sample_permalink', 'del_domain_from_url');
      add_filter('edit_post_link', 'del_domain_from_url');
      add_filter('preview_post_link', 'del_domain_from_url');
      add_filter('get_avatar_url', 'del_domain_from_url');
      add_filter('theme_file_uri', 'del_domain_from_url');
      add_filter('template_directory_uri', 'del_domain_from_url');
      add_filter('theme_root_uri', 'del_domain_from_url');
      add_filter('content_url', 'del_domain_from_url');
      
      function del_domain_from_url($link) {
        return filter_url($link);
      }
      
      1
      • Kama4711

        Опасный немного велосипед... Но если все работает, то это хорошо... А для создания относительных ссылок есть функция wp_make_link_relative()

        • Максим

          Блин, классная функция. Сразу не нашел ее. Тогда вместо замены подстроки в функции можно сделать проверку, содержит ли значение текущий домен, а потом передавать строку в функцию. Суть в том, чтобы все, что летит в базу (при загрузке файлов, сохранении постов и т.п.) очищалось именно от текущего домена. Ведь в посте может быть ссылка и на другой ресурс, а эта функция чистит от домена с протоколом абсолютно все ссылки.
          А фильтр get_sample_permalink используется лишь для удобства в админке.

Здравствуйте, !

Ваш комментарий
Предпросмотр