Ответы в темах

Просмотр 15 ответов — с 1 по 15 (всего 15)
  • При установленном WP-post-view выдать просмотры можно функцией echo_post_views($post_id):

    if (function_exists('echo_post_views')) {
        echo_post_views(get_post()->ID);
    }

    Каждый такой вызов производит 3 обращения к БД и увеличивает значение счётчика просмотров на 1, поэтому вызывать её следует только на странице поста и только для этого же поста.
    Причём при первом вызове для определённого поста функция выдаёт 0, хотя счётчик устанавливается в 1.

    На странице архива можно аналогичным образом использовать wp_get_post_views($post_id).

    Может быть плагин не тот? Я имел в виду этот: https://wordpress.org/plugins/post-views/.

    Возникает ли при вызове get_post_views() какое-нибудь сообщение об ошибке?
    Присутствует ли в меню «Настройки» пункт «Post Views» и выдаётся ли на его экране информация по просмотрам?

    Сразу после активации плагина вызов get_post_views(…) для любого поста выдаёт 0.

    Количество одобренных комментариев находится в поле comment_count объекта поста:

    echo '<span class="entry-meta-ncomments">', get_post()->comment_count, '</span>';

    Также можно использовать get_comments() с аргументом 'count' => true:

    $n_count = get_comments(array('post_id' => $post_id, 'count' => true, /* другие параметры */ ));

    Такой подход выполнит дополнительное обращение к БД. Его имеет смысл использовать, если требуется рассчитать количество комментариев в выборке по определённым параметрам (статус, идентификатор автора и т.д.);

    Для подсчёта количества просмотров требуется плагин, считающий просмотры.
    Например post-views — он добавит функцию get_post_views(), использовать которую можно, например, так:

    if (function_exists('get_post_views')) {
        $n_views = get_post_views('normal', 'total', 'content', false, get_post()->ID);
        echo '<span class="entry-meta-nviews">', $n_views, '</span>';
    }

    Проверка на наличие функции необходима на случай отключения плагина.

    • Ответ изменён 4 года, 5 месяцев назад пользователем Gottfrid Q.. Причина: в листинге указана переменная $post вместо функции get_post()

    Опечатка в строке var sel = win.sate().get('selection'), att;.
    Должно быть win.state() вместо win.sate().

    В этом случае callback должен относиться к классу, которому принадлежит $data:

    class Simple_Shop_Controller {
        private $view;
        private $data;  // методы $view не имеют доступа к $data
    
        ...
    
        function create_menu () {
            add_menu_page( 'Simple Shop Products',
                ... // аргументы
                array($this, 'shop_page_cb'), // метод этого же класса
                ... // остальные аргументы
            );
        }
    
        // формирование страницы:
        public function shop_page_cb () {
            // здесь имеем доступ как к $view, так и к $data
            $this->view->create_products($this->data);
        }
    
    }

    Метод shop_page_cb должен быть публичным, т.к. будет вызываться функцией add_menu_page.
    Как-то так…

    Ошибка выглядит так, как будто у плагина «Yoast SEO» (размещается в /wp-content/plugins/wordpress-seo/) отсутствуют некоторые файлы. Попробуйте его переустановить (деактивировать, удалить, поставить заново и активировать).

    Страница скрыта: тег body имеет класс tag, которому задано display:none в /wp-content/themes/SabrinaResponsive/style.css, строка 669.
    Возможно, класс уже предназначался для каких-либо элементов страницы, когда разработчик решил использовать его для страницы архива меток. Поэтому пусть переименует класс, относящийся к странице, в tag-archive, например, и перенесёт на него с .tag те функционал и стили, что относятся к странице архива.
    Как-то так…

    Зайдите в БД и просмотрите графу user_login таблицы wp_users — там будут имена учётных записей всех зарегистрированных пользователей.
    Префикс у таблиц может отличаться, стандартный — wp_.

    У абзацев поста .art-postcontent.clearfix > p верхний марджин составляет 12px, а у картинки — 0, и у заголовка нижний марджин тоже 0.
    Можно добавить margin-bottom:12px; к заголовку h2.art-postheader — с отступом над абзацем он схлопнется, а над картинкой — нет, поэтому она съедет вниз на высоту отступа текста. После этого она ещё слегка выше текста — можно скорректировать, например, верхним марджином у img.wp-post-image.
    Как-то так…

    Если правильно понял, речь идёт о списке записей.
    Набор действий под элементами списка можно изменить фильтром 'post_row_actions'. Фильтр имеет два аргумента:

    • $actions — массив вида 'action_id' => 'action_link';
    • $post — пост.

    Вам надо из массива удалить $actions['view']. Т.е. код примерно такой:

    add_filter('post_row_actions', function ($actions, $post) {
        if ($post->post_type == 'post')
            unset($actions['view']);
        return $actions;
    }, 10, 2);

    Проверка типа поста обязательна, т.к. фильтр обрабатывает посты всех неиерархических типов.

    Виджет «Рубрики» является штатным и находится в /wp-includes/default-widgets.php, класс WP_Widget_Categories. Исходники WP и штатных/устанавливаемых тем и плагинов менять не следует — изменения будут потеряны при следующем обновлении; также изменения могут содержать неочевидные ошибки.
    Поэтому логично будет запилить дочернюю тему, которая будет использовать twentyfourteen в качестве основной, затем в style.css, после импорта стилей родительской темы, дописать стили для виджета.
    Если этого не будет достаточно (т.е. не получится реализовать анимацию силами transition и :hover) — добавить js-скрипт, реализующий анимацию, и в functions.php надо этот скрипт выдать на страницу по хуку 'wp_enqueue_scripts'. Как-то так…

    Селекторы элементов виджета: тело — .widget_categories, элементы — .cat-item, дочерние списки — .children. Т.е. селектор подрубрик выглядит как-то так '.widget_categories .children .cat-item'.

    Информация по дочерним темам: https://codex.wordpress.org/Child_Themes.

    Тут надо использовать wp.media — его надо подключить вызовом wp_enqueue_media() по хуку 'admin_enqueue_scripts'.
    Затем — при первом клике по кнопке — надо создать всплывающее окно. Переменную с ним разместите в родительском замыкании — чтобы создавать его только один раз.
    Код примерно таков (возможны опечатки):

    // замыкание обработчика ready
    var win; // <-- это - окно со вложениями
    $("#кнопка").click(function () {
        if (!win) {
            // окно не создано - создать:
            win = wp.media({
                title: "Заголовок всплывшего окна",
                multiple: false,  // выбор одного изображения
                button: {
                    text: "Выбрать",
                    requires: {selection: false}  // чтобы можно было сбросить выбор.
                },
                library: {type: "image"} // отоборажать только картинки
            });
    
            win.on('select', function () {
                var sel = win.sate().get('selection'), att;
                if (sel.length) {
                    att = sel.first().toJSON();
                    // тут обрабатывается выбранная картинка
                    // в att.url - ссылка на атачмент;
                    // в att.id - идентификатор атачмента;
                    // в att.sizes - масштабированные версии атачмента;
                } else {
                    // выбор не сделан или сброшен
                }
            });
    
            win.on('open', function () {
                // тут надо отметить картинку, которая уже выбрана
                var att, sel = win.state().get('selection');
                sel.reset();
                if (/* какой-то атачмент выбран */) {
                    // допустим, что идентификатор атачмента - в att_id
                    att = wp.media.attachment(att_id);
                    att.fetch();
                    sel.add(att);
                }
            });
        }
    
        win.open();
    
    });

    В обработчике select ссылки на масштабированные версии изображения находятся в att.sizes['размер'].url.
    При открытии окна — событие open — отмечается выбранное прежде изображение — имеет смысл только при первом открытии, если выбор был сохранён прежде и не пуст на момент создания окна.

    Как-то так…

    Какой-то js-скрипт добавляет к полю ввода input.searchform-s стили display:none и visibility:visible. Вам надо display:none убрать, visibility:visible оставить, затем скорректировать dom и стили его и остальной формы поиска (находящуюся в .text-near-menu; скрипты копируют форму ещё куда-то в #top-bar, оно там скрыто и находится рядом с синей круглой штукой сверху справа; так что форм на странице две).

    Навскидку сверстать можно как-нибудь так:
    input.searchform-s, оберните в див, которму дайте padding-right:Xpx, где Xpx — ширина бокса с пиктограммой с лупой (где-то 16-20px), и position:relative.
    Сам inputwidth:100%, outline:none и border:none.
    Рамку и отступы можно привязать прямо к форме или обернуть всё её содержимое в див и привязать к нему.
    Ссылку a.submit уберите, пиктограмму установите в качестве фона на input.searchsubmit, и задайте ему float:right, ширина и высота — размер пиктограммы (16-20px); и пустой value. Также перенесите на него события click с a#trigger-overlay.
    Затем всё это надо покрасить, выровнять и отладить.
    Как-то так…

    Добрый день.
    Возможно. Стоимость и сроки зависят от деталей.
    Пишите на dyscolus@yandex.ru.

Просмотр 15 ответов — с 1 по 15 (всего 15)