Форум программистов, компьютерный форум, киберфорум
WordPress
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 0
Регистрация: 20.05.2014
Сообщений: 16

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

01.07.2018, 12:04. Показов 2559. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.

Вывожу виджет RSS на главной странице Wordpress, в файл content.php добавляю следующий код:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
   if(function_exists('the_widget')) { // If the_widget is supported
        $rss_options = array( 
            'title' => 'News',  // Title of the Widget
            'url' => 'https://site.com/feed/', // URL of the RSS Feed
            'items' => 10, // Number of items to be displayed
            'show_summary' => 0, // Show post excerpts?
            'show_author' => 0, // Set 1 to display post author
            'show_date' => 0 // Set 1 to display post dates
        );
    
        the_widget('WP_Widget_RSS', $rss_options);
   }
?>
Виджет дублируется после каждого поста, а надо чтобы только после первого поста, как это можно сделать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.07.2018, 12:04
Ответы с готовыми решениями:

Как сделать чтобы левый виджет не исчезал
Сайт Baloo.by , как сделать чтобы левый виджет не исчезал, при переходе на любую страницу на сайте. Т.е. что бы он всегда был виден.

Как сделать, чтобы клик мыши дублировался?
Как сделать так чтобы клик дублировался? То есть когда я нажал мышкой в координатах x,y , этот Клик повторялся бы в координатах,...

Как делать, чтобы текст введённый в textBox1 автоматический дублировался в textBox2?
Как делать, чтобы текст введённый в textBox1 автоматический дублировался в textBox2?

24
225 / 216 / 89
Регистрация: 12.09.2015
Сообщений: 986
01.07.2018, 16:23
radiolip, писать его не в цикле. Файл шаблона content.php очевидно отвечает за вывод контента каждого поста, а не главной страницы, и уже находится в цикле.
Смотрите иерархию шаблонов и ищите шаблон, который у вас выводит контент на главной странице.
0
 Аватар для wwowa
308 / 261 / 70
Регистрация: 01.12.2008
Сообщений: 1,031
01.07.2018, 22:03
Цитата Сообщение от radiolip Посмотреть сообщение
а надо чтобы только после первого поста, как это можно сделать?
Судя по всему главной страницей у вас и является блог, то есть index.php.
Примерно структура у всех одинакова

PHP
1
2
3
4
5
6
</header>
<?php while ( have_posts() ) : the_post(); ?>
<?php
get_template_part( 'template-parts/content' );?>
<?php endwhile; ?>
<?php the_posts_pagination(); ?>
Проще всего вам добавить виджет перед первым постом, то есть сразу после </header>.
После первого поста несколько геморойно будет, но самый простой способ "в лоб" это добавить переменную счетчик здесь в цикле, а в "контенте" в зависимости от ее значения вывести ваш виджет. Хоть после первого, хоть после 10-го.
0
1 / 1 / 0
Регистрация: 20.05.2014
Сообщений: 16
02.07.2018, 11:27  [ТС]
В index.php работает, не дублируется, но виджет либо в header, либо в footer, в зависимости куда вставлять код. А вот как сделать чтобы виджет был сразу после первого поста?
0
225 / 216 / 89
Регистрация: 12.09.2015
Сообщений: 986
02.07.2018, 11:59
radiolip, покажите весь код content.php.
0
1 / 1 / 0
Регистрация: 20.05.2014
Сообщений: 16
02.07.2018, 12:05  [ТС]
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
/**
 * Template part for displaying posts index
 *
 * @link https://developer.wordpress.org/themes/news/
 *
 * @package news
 */
 
?>
 
<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
    <header class="entry-header">
        <?php
        if ( is_singular() ) :
            the_title( '<h1 class="entry-title">', '</h1>' );
        else :
            the_title( '<h2 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h2>' );
        endif;
 
        if ( 'post' === get_post_type() ) : ?>
        <div class="entry-meta">
            <?php news_posted_on(); ?>
        </div><!-- .entry-meta -->
        <?php
        endif; ?>
    </header><!-- .entry-header -->
 
    
 
    <div class="entry-content">
        <?php
            the_content( sprintf(
                wp_kses(
                    /* translators: %s: Name of current post. Only visible to screen readers */
                    __( 'Continue reading<span class="screen-reader-text"> "%s"</span>', 'news' ),
                    array(
                        'span' => array(
                            'class' => array(),
                        ),
                    )
                ),
                get_the_title()
            ) );
 
            wp_link_pages( array(
                'before' => '<div class="page-links">' . esc_html__( 'Pages:', 'news' ),
                'after'  => '</div>',
            ) );
        ?>
    </div><!-- .entry-content -->
 
</article><!-- #post-<?php the_ID(); ?> -->
0
225 / 216 / 89
Регистрация: 12.09.2015
Сообщений: 986
02.07.2018, 12:47
radiolip, ну в теории это должно работать вот так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
add_filter( 'the_content', 'user_the_content_filter' );
function user_the_content_filter($content) {
    if(in_the_loop() && isset($GLOBALS['used_content_filter']) && $GLOBALS['used_content_filter'] === true) {
        return $content;
    }
 
    if(in_the_loop()) {
 
        if(function_exists('the_widget')) { // If the_widget is supported
            $rss_options = array( 
                'title' => 'News',  // Title of the Widget
                'url' => 'https://site.com/feed/', // URL of the RSS Feed
                'items' => 10, // Number of items to be displayed
                'show_summary' => 0, // Show post excerpts?
                'show_author' => 0, // Set 1 to display post author
                'show_date' => 0 // Set 1 to display post dates
            );
 
            ob_start();
            the_widget('WP_Widget_RSS', $rss_options);
            $widget_code = ob_get_contents();
            ob_end_clean();
        }
 
        $content = $content.$widget_code;
 
        $GLOBALS['used_content_filter'] = true;
    }
    return $content;
}
Но, как говорится, это не точно.

UPD. Это нужно вставлять в файл функций.
0
1 / 1 / 0
Регистрация: 20.05.2014
Сообщений: 16
02.07.2018, 13:13  [ТС]
Виджет после первого поста, только дублируется и в самом посте тоже. И RSS не работает.
0
225 / 216 / 89
Регистрация: 12.09.2015
Сообщений: 986
02.07.2018, 13:48
radiolip, в самом посте? У вас в шаблоне вывода поста цикл есть?
RSS не работает, потому что url неправильный.
0
1 / 1 / 0
Регистрация: 20.05.2014
Сообщений: 16
02.07.2018, 18:44  [ТС]
Не, url правильный поставил. Да, в самом посте, снизу.

Добавлено через 33 секунды
Может у кого есть еще идеи?

Добавлено через 5 минут
В этой теме есть что-то похожее

Как в цикле WP вывести виджет между 3 и 4 постами
0
225 / 216 / 89
Регистрация: 12.09.2015
Сообщений: 986
02.07.2018, 20:16
Лучший ответ Сообщение было отмечено radiolip как решение

Решение

radiolip,
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
add_filter( 'the_content', 'user_the_content_filter' );
function user_the_content_filter($content) {
    if(in_the_loop() && !is_singular() && isset($GLOBALS['used_content_filter']) && $GLOBALS['used_content_filter'] === true) {
        return $content;
    }
 
    if(in_the_loop() && !is_singular()) {
 
        if(function_exists('the_widget')) { // If the_widget is supported
            $rss_options = array( 
                'title' => 'News',  // Title of the Widget
                'url' => 'https://site.com/feed/', // URL of the RSS Feed
                'items' => 10, // Number of items to be displayed
                'show_summary' => 0, // Show post excerpts?
                'show_author' => 0, // Set 1 to display post author
                'show_date' => 0 // Set 1 to display post dates
            );
 
            ob_start();
            the_widget('WP_Widget_RSS', $rss_options);
            $widget_code = ob_get_contents();
            ob_end_clean();
        }
 
        $content = $content.$widget_code;
 
        $GLOBALS['used_content_filter'] = true;
    }
    return $content;
}
Почему rss не работает – отдельная тема.

P.S. Оказывается страница конкретной записи для in_the_loop() это true... Очень умно, WP, очень...
0
1 / 1 / 0
Регистрация: 20.05.2014
Сообщений: 16
03.07.2018, 10:53  [ТС]
Ну вроде бы все работает кроме самой RSS.

PHP
1
PHP message: PHP Warning:  mysqli_query(): Error reading result set's header in /home/site/web/site.com/public_html/wp-includes/wp-db.php on line 1924" while reading response header from upstream, client: 177..., server: site.com, request: "GET /feed/ HTTP/1.1", upstream: "fastcgi://127.0.0.1:9002", host: "site.com", referrer: "https://site.com/feed/"
0
225 / 216 / 89
Регистрация: 12.09.2015
Сообщений: 986
03.07.2018, 10:54
radiolip, "site.com" ну? URL-то неправильный.
0
1 / 1 / 0
Регистрация: 20.05.2014
Сообщений: 16
03.07.2018, 11:30  [ТС]
URL для примера.
0
225 / 216 / 89
Регистрация: 12.09.2015
Сообщений: 986
03.07.2018, 11:33
radiolip, что значит для примера? На основе чего вы тогда делаете вывод, что RSS не работает? Покажите ошибку RSS c работающим url-ом.
0
1 / 1 / 0
Регистрация: 20.05.2014
Сообщений: 16
03.07.2018, 11:42  [ТС]
PHP
1
Ошибка RSS: WP HTTP Error: cURL error 28: Operation timed out after 10001 milliseconds with 0 bytes received
0
225 / 216 / 89
Регистрация: 12.09.2015
Сообщений: 986
03.07.2018, 12:29
radiolip, проблема с curl, скорее всего связана с конфигурацией хостинга, либо с dns-серверами. Пишите в саппорт хостинга.
0
1 / 1 / 0
Регистрация: 20.05.2014
Сообщений: 16
03.07.2018, 21:45  [ТС]
Нужно поменять значение в max_allowed_packet: 16м на 256м.

Теперь нужно сделать так, чтобы не выводить данный виджет в категориях.
0
 Аватар для wwowa
308 / 261 / 70
Регистрация: 01.12.2008
Сообщений: 1,031
03.07.2018, 22:05
Цитата Сообщение от radiolip Посмотреть сообщение
В этой теме есть что-то похожее
Как в цикле WP вывести виджет между 3 и 4 постами
А чем не устроил этот вариант? Там все просто. Сколько видел тем, нигде не меняют content фильтром, а создают различные варианты этого файла и подключают их в нужном месте. Тем более для архива свой шаблон есть?
0
1 / 1 / 0
Регистрация: 20.05.2014
Сообщений: 16
03.07.2018, 22:38  [ТС]
Дело в том, что все эти ухищрения приводят с многочисленным запросам в БД, и сервер начинает зависать. max_allowed_packet: 16м на 256м, на некоторое время решило это, но когда RSS лента обновляется, сервер снова зависает. Именно когда вставляешь код в файл: functions.php

Может есть возможность вывести виджет, без участия этого файла?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.07.2018, 22:38
Помогаю со студенческими работами здесь

Как сделать так, чтобы события мыши обрабатывал QScrollArea, а не виджет, находящийся в нем?
Как сделать так, чтобы события мыши обрабатывал QScrollArea, а не виджет, находящийся в нем? По факту нужно сделать скроллинг по движению...

Как сделать так чтобы виджет-ребенок был на всю площадь виджета-родителя?
собсно сабж.

Как сделать так, чтобы только один виджет всегда обрабатывал события keyPressEvent?
У меня есть виджет который обрабатывает события нажатия клавиш. Рядом с ним расположен другой виджет с кнопками. Когда я нажимаю на кнопки...

Сделать, чтобы то, что выводит php в отдельной странице, выводил в диалоговом окне на главной странице
Есть форма &lt;form method=post action=/preorder.php&gt; &lt;div class=&quot;row half&quot;&gt; &lt;div class=6u&gt; &lt;input name=name placeholder=&quot;Имя&quot;...

Как сделать чтобы часть информации на странице не менялась
Вообще сайт такой, сверху название, меню. потом информация на странице. Короче как сделать так чтобы сверху ничего не менялось когда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru