Форум программистов, компьютерный форум, киберфорум
WordPress
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
-6 / 8 / 0
Регистрация: 22.04.2017
Сообщений: 86
1

Загрузка следующих статей с использованием AJAX в файле page.php

08.06.2018, 16:31. Просмотров 985. Ответов 7
Метки нет (Все метки)

Код приведенный ниже работает в index.php и sidebar.php, но не работает в page.php.
Писали код программист с этого форума. Поэтому почему реализовано все именно так если вдруг спросите, то лучше не спрашивайте. Все равно не смогу ответить. Времени у мастерам нет, поэтому пишу вопрос публично. У кого есть возможность буду рад любой помощи.
Итак, сам код:

sidebar.php
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
  <?php
                    
        $recent = new WP_Query("cat=2&showposts=3");
        
        while($recent->have_posts()) : $recent->the_post();
        
        ?>
        
        <ul>
 
            <li class="news-item_title">
 
                <a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a>
                
            </li>
            
        
        </ul>
        
    <?php endwhile; ?>
    
    <ul>
    
        <?php if (  $wp_query->max_num_pages > 1 ) : ?>
        <script>
            var ajaxurl2 = '<?php echo site_url() ?>/wp-admin/admin-ajax.php';
            var true_posts2 = '<?php echo serialize($wp_query->query_vars); ?>';
            var current_page2 = <?php echo (get_query_var('paged')) ? get_query_var('paged') : 1; ?>;
            var max_pages2 = '<?php echo $wp_query->max_num_pages; ?>';
        </script>
        <div id="loadmore_gs2">Показать еще</div>
        <?php endif; ?>
        
    </ul>
footer.php

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
jQuery(function($){
            $('#loadmore_gs2').click(function(){
                $(this).text('Загрузка...');
                var data = {
                    'action': 'loadmore2',
                    'query2': true_posts2,
                    'page2' : current_page2
                };
                $.ajax({
                    url:ajaxurl2,
                    data:data,
                    type:'POST',
                    success:function(data){
                        if( data ) { 
                            $('#loadmore_gs2').text('Показать еще').before(data);
                            current_page2++;
                            if (current_page2 == max_pages2) $("#loadmore_gs2").remove();
                        } else {
                            $('#loadmore_gs2').remove();
                        }
                    }
                });
            });
        });
    </script>
functions.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function true_load_posts2(){
    $args = unserialize(stripslashes($_POST['query2']));
    $args['paged'] = $_POST['page2'] + 1; // следующая страница
    $args['post_status'] = 'publish';
    $args['cat'] = '2';
    $q = new WP_Query($args);
    if( $q->have_posts() ):
        while($q->have_posts()): $q->the_post(); 
?>
<?php the_post_thumbnail(); ?>
<li class="post_list"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>
<?php
endwhile; endif;
    wp_reset_postdata();
    die();
}
add_action('wp_ajax_loadmore2', 'true_load_posts2');
add_action('wp_ajax_nopriv_loadmore2', 'true_load_posts2');
По какой-то причине не отображается кнопка "Показать еще".

Вопрос: как сделать так чтобы это конструкция работала при выводе в page.php?

Добавлено через 2 часа 34 минуты
Никто не знает?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.06.2018, 16:31
Ответы с готовыми решениями:

Загрузка следующих статей с использованием AJAX в single.php и page.php
Думаю это штука будет полезна многим. Есть такой код. Где-то пол года назад заказывал его у...

Загрузка следующих статей с использованием AJAX
Добрый день! Есть такой код: &lt;ul&gt; &lt;?php if ( have_posts() ) : query_posts('cat=11'); while...

php+ajax загрузка фоток
ВСем привет. Вобщем кто хоть раз загружал фотки на сайте Вконтакте.ру поймет)) Итак сделал...

Передать переменные из js в php с использованием ajax
Всем привет. Знаю, что тем таких много было, я просмотрела уже штук 20, и все равно не могу...

7
223 / 215 / 88
Регистрация: 12.09.2015
Сообщений: 986
10.06.2018, 14:53 2
ENOVSKIY, потому что page.php это шаблон статичных страниц. С чего бы там вообще быть кнопке "Показать ещё"?
Объясните лучше, что вы пытаетесь (хотите) сделать?

P.S. Изучите иерархию шаблонов.
0
-6 / 8 / 0
Регистрация: 22.04.2017
Сообщений: 86
10.06.2018, 15:00  [ТС] 3
Цитата Сообщение от Анар Посмотреть сообщение
Объясните лучше, что вы пытаетесь (хотите) сделать?
Так я же все описал.Хочу чтобы вышеописанное работало не только в indexp.php и sidebar.php, но также и в page.php

Это штуковина выводит определенное число записей из определенной категории, а также подгружает следующие при нажатии на кнопку "Показать еще". Все работает в indexp.php и sidebar.php, а в page.php записи выводит, но кнопку "Показать еще" нет, то есть по сути не работает.
0
223 / 215 / 88
Регистрация: 12.09.2015
Сообщений: 986
10.06.2018, 15:11 4
ENOVSKIY, ну вы не описали ничего. Где например код шаблона page.php? Как можно понять, что у вас там не работает?

Плюс я вам повторю, page.php это шаблон для статичных страниц. Всех статичных страниц вашего сайта. Не нужно запихивать туда циклы, этот шаблон нужен, чтобы взять данные и отобразить их так, как вы записали их через админку, обтянув непосредственно собой (шаблоном).
Если нужно на какой-то из страниц выводить что-то посредствам самого шаблона, то создавайте для этого отдельный шаблон и выбирайте его у конкретной страницы в админке. См. создание кастомных шаблонов.
0
-6 / 8 / 0
Регистрация: 22.04.2017
Сообщений: 86
10.06.2018, 19:55  [ТС] 5
Цитата Сообщение от Анар Посмотреть сообщение
ENOVSKIY, ну вы не описали ничего. Где например код шаблона page.php? Как можно понять, что у вас там не работает?
Вот это нужно вывести в page.php

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
<?php
                    
        $recent = new WP_Query("cat=2&showposts=3");
        
        while($recent->have_posts()) : $recent->the_post();
        
        ?>
        
        <ul>
 
            <li class="news-item_title">
 
                <a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a>
                
            </li>
            
        
        </ul>
        
    <?php endwhile; ?>
    
    <ul>
    
        <?php if (  $wp_query->max_num_pages > 1 ) : ?>
        <script>
            var ajaxurl2 = '<?php echo site_url() ?>/wp-admin/admin-ajax.php';
            var true_posts2 = '<?php echo serialize($wp_query->query_vars); ?>';
            var current_page2 = <?php echo (get_query_var('paged')) ? get_query_var('paged') : 1; ?>;
            var max_pages2 = '<?php echo $wp_query->max_num_pages; ?>';
        </script>
        <div id="loadmore_gs2">Показать еще</div>
        <?php endif; ?>
        
    </ul>
При выводе код не работает.

Шаблон page.php такой

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
54
55
<?php
/**
 * Шаблон обычной страницы (page.php)
 */
get_header(); // подключаем header.php ?>
 
 
 
 
<section>
    <div class="post-list">
         <ul>
        <?php
                    
                        $recent = new WP_Query("cat=1&showposts=5");
                        
                        while($recent->have_posts()) : $recent->the_post();
                        
                        ?>
                        
                        
                
                            <li class="news-item_title">
 
                                <a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a>
                                
                            </li>
                            
                        
                        
                        
                    <?php endwhile; ?>
                    
                    
                    
                        <?php if (  $wp_query->max_num_pages > 1 ) : ?>
                        <script>
                            var ajaxurl = '<?php echo site_url() ?>/wp-admin/admin-ajax.php';
                            var true_posts = '<?php echo serialize($wp_query->query_vars); ?>';
                            var current_page = <?php echo (get_query_var('paged')) ? get_query_var('paged') : 1; ?>;
                            var max_pages = '<?php echo $wp_query->max_num_pages; ?>';
                        </script>
                        <div id="loadmore_gs">Показать еще</div>
                        <?php endif; ?>
                        
                    </ul>
    </div>
    
       
</section>
 
 
 
<?php get_sidebar(); // подключаем sidebar.php ?>
<?php get_footer(); // подключаем footer.php ?>
0
223 / 215 / 88
Регистрация: 12.09.2015
Сообщений: 986
10.06.2018, 20:22 6
Лучший ответ Сообщение было отмечено ENOVSKIY как решение

Решение

ENOVSKIY, ну логично, потому что у вас условие проверяется на максимальное количество страниц у $wp_query (36 строка), на статичной странице, у которой не может быть пагинации. Соответственно $wp_query->max_num_pages для статичной страницы = 0, потому "Показать ещё" и не показывается.

У вас есть три выхода:
1. Просто переписать запрос всей страницы, поменяв переменную $recent на $wp_query. Это будет работать, но статичные страницы на вашем сайте больше работать не будут.
2. Создать конкретно для этой страницы отдельный шаблон, выше я об этом уже писал. В это шаблоне переписывать запрос, как писал в предыдущем пункте.
3. Уместить на одной странице два запроса. Как это сделать, я вам прямо писать не буду, смотрите что такое WP_Query, что за "волшебная" переменная $wp_query, что она означает. Заодно приоткроете тайну того, как WP формирует страницы.

Соответственно адекватный вариант только 2. Третий это если хотите дальше прогрессировать в познаниях WP.
0
-6 / 8 / 0
Регистрация: 22.04.2017
Сообщений: 86
10.06.2018, 23:10  [ТС] 7
Цитата Сообщение от Анар Посмотреть сообщение
ENOVSKIY, ну логично, потому что у вас условие проверяется на максимальное количество страниц у $wp_query (36 строка), на статичной странице, у которой не может быть пагинации. Соответственно $wp_query->max_num_pages для статичной страницы = 0, потому "Показать ещё" и не показывается.
У вас есть три выхода:
1. Просто переписать запрос всей страницы, поменяв переменную $recent на $wp_query. Это будет работать, но статичные страницы на вашем сайте больше работать не будут.
2. Создать конкретно для этой страницы отдельный шаблон, выше я об этом уже писал. В это шаблоне переписывать запрос, как писал в предыдущем пункте.
3. Уместить на одной странице два запроса. Как это сделать, я вам прямо писать не буду, смотрите что такое WP_Query, что за "волшебная" переменная $wp_query, что она означает. Заодно приоткроете тайну того, как WP формирует страницы.
Соответственно адекватный вариант только 2. Третий это если хотите дальше прогрессировать в познаниях WP.
Благодарю за помощь! Буду пробовать.

Добавлено через 22 минуты
Цитата Сообщение от Анар Посмотреть сообщение
2. Создать конкретно для этой страницы отдельный шаблон, выше я об этом уже писал. В это шаблоне переписывать запрос, как писал в предыдущем пункте.
Еще вопрос. А две такие конструкции (с разными категориями: 1 и 2) в одном page.php можно уместить? Если да, то подскажите, пожалуйста, как.
0
223 / 215 / 88
Регистрация: 12.09.2015
Сообщений: 986
11.06.2018, 01:23 8
Цитата Сообщение от ENOVSKIY Посмотреть сообщение
Еще вопрос. А две такие конструкции (с разными категориями: 1 и 2) в одном page.php можно уместить? Если да, то подскажите, пожалуйста, как.
Это пункт №3. "Конструкции" будет не две, а уже три, потому что $wp_query есть на каждой странице, читайте
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2018, 01:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Форма обратной связи на PHP и jQuery с использованием Ajax
Здравствуйте, С наступившим Новым Годом! Подскажите, пожалуйста, устанавливал форму обратной...

Подгрузка из базы данных (MySQL) на PHP с использованием AJAX
Есть база данных в которой храняться фотографии, название и описание к ним. Сначала выводиться 9...

Загрузка контента без перезагрузки страницы Php Mysql AJAX
Всем доброго времени суток. С общими усилиями сделали страничку которая должна вывести данные...

Проверка формы на стороне клиента с использованием Parsley.js с PHP Ajax
Добрый вечер Проверка формы на стороне клиента с использованием Parsley.js с PHP Ajax Можете...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.