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

Хуки

Фильтры

События

Хуки 40 комментариев
Полезные 1 Вопросы 2 Все
  • Alex

    Здравствуйте, Тимур!
    Большое спасибо за ваш труд!
    Подскажите, пожалуйста, как можно сделать такую вещь:
    надо каждому пользователю показывать (кроме всего прочего общего) персональную страницу (иди запись - не принципиально). Остальные пользователи не должны видеть эту страницу.
    Сам что-то не могу додуматься.
    Спасибо!

    • Kama4659

      Создай страницу, в зависимости от ID юзера выводи там разный контент... Если юзер не авторизован не выводи ссылку на эту страницу, если неавторизованный зайдет на нее напрямую, там будет пусто... Где хранить контент для каждого юзера? Наверное в данных каждого юзера (метаполях см. add_user_meta() )...

  • Макс

    Поскажите, при публикации или апдейте поста нужно ее проверить и (при определенных условиях) запретить публикацию и апдейт. Как это сделать?

  • Максим @

    Тимур, круто все!!!
    Не подсткажешь, как уйти от привязки к домену?
    К примеру - разрабатываю дома на локалке для клиента сайт. Использую 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
      • Kama4659

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

        • Максим @

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

          • Kama4659

            Ты бы плагины просмотрел на эту тему...

            https://wordpress.org/plugins/root-relative-urls/
            https://wordpress.org/plugins/relative-url/

            • Максим @

              Благодарю, второй работает только на вывод. Первый детальней надо посмотреть.
              А вообще для меня не очень понятна такая жесткая привязка сайта к домену unknw

              • campusboy1946 cайт: www.youtube.com/c/wpplus

                А мне нравится такое у WP smile Когда тырят контент, зачастую ссылки остаются на мой домен и порой даже переходы laugh

                2
                • Максим @

                  С этой позиции я с тобой согласен. yes Я не блоггер. Хотя было бы здорово сделать абсолютные ссылки в вордпресс как опцию. Включил - и вордпресс везде и всюду использует домен, даже если сделать относительные ссылки по протоколу (//домен.ру/ссылка/). А для коммерческих проектов эту опцию отключать и безболезненно переносить сайт куда надо.

                  1

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

Ваш комментарий