WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

Хуки

Фильтры

События

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

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

    • Kama4457

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

  • Макс

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

    Ответить4 месяца назад #
  • Максим
    @

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

    1
    Ответить3 месяца назад #
    • Максим
      @

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

      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
      Ответить2 месяца назад #
      • Kama4457

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

        Ответить2 месяца назад #
        • Максим
          @

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

          Ответить2 месяца назад #
          • Kama4457

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

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

            Ответить2 месяца назад #
            • Максим
              @

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

              Ответить2 месяца назад #
              • campusboy1712 cайт: wp-plus.ru
                @

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

                2
                Ответить2 месяца назад #
                • Максим
                  @

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

                  Ответить2 месяца назад #

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

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