AJAX-вызов WordPress не запускается для пользователей, не являющихся участниками веб-сайта

Я делаю ajax-вызов для извлечения сообщений из functions.php, и следующая проблема относится только к пользователям, не являющимся участниками веб-сайта. Он запускается только иногда, а в других случаях вообще не запускается.

Я добавляю действия в functions.php следующим образом

add_action('wp_ajax_load_posts_by_ajax_snp', 'load_posts_by_ajax_callback_snp');
add_action('wp_ajax_nopriv_load_posts_by_ajax_snp', 'load_posts_by_ajax_callback_snp');

следующая функция есть в functions.php

<?php
function load_posts_by_ajax_callback_snp() {
    check_ajax_referer('load_more_posts_snp', 'security');
    $paged_snp= $_POST['page'];
    $args_snp = array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'posts_per_page' => '16',
        'cat' => '70',
        'paged' => $paged_snp,
        );
    $my_posts_snp = new WP_Query( $args_snp );
    if ( $my_posts_snp->have_posts() ) : ?>
        <?php while ( $my_posts_snp->have_posts() ) : $my_posts_snp->the_post() ?>
            <?php
            echo "<div>";
            Content
            echo "</div>";
            ?>
        <?php endwhile ?>
    <?php endif; ?>
<?php wp_die();
}
?>

Я использую следующий скрипт для вызова сообщений на странице page-custom-template.php

<div class="loadmore" style="text-align:center;font-size:1.4em;color:#4a235a;padding:1% 0 1% 0;font-weight:900;">
<button id="lmb" type="button" style="background-color: #f44336;width:98%;border-radius:6px;border:2px solid #4a235a;outline:none;"><span id="lmp">Load More Posts</span><span id="lng" style="display:none;">Loading </span><img id="loader" src="http://www.nvidia.com/docs/IO/151309/loader.gif" width="25em;" height="25em;" id="lmi" style="display:none;"></button>
</div>

<script type="text/javascript">
var ajaxurl = "<?php echo admin_url( 'admin-ajax.php' ); ?>";
var page = 2;
jQuery(function($) {
$('body').on('click', '.loadmore', function() {

    var data = {
        'action': 'load_posts_by_ajax_snp',
        'page': page,
        'security': '<?php echo wp_create_nonce("load_more_posts_snp"); ?>'
      };

    $.post(ajaxurl, data, function(response) {
        $('.my-posts').append(response);
        page++;
    });
});
});
</script>

Как сделать так, чтобы он отлично работал для не подписчиков и не авторизованных пользователей?

1 ответ

Первый

Почему вы не используете WP debug? Прочитайте эту тему. Или напишите этот код в wp-config.php и проверьте файл журнала в wp-content папка

// Enable WP_DEBUG mode
define( 'WP_DEBUG', true );

// Enable Debug logging to the /wp-content/debug.log file
define( 'WP_DEBUG_LOG', true );

// Disable display of errors and warnings 
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

// Use dev versions of core JS and CSS files (only needed if you are modifying these core files)
define( 'SCRIPT_DEBUG', true );

второй

<?php
echo "<div>";
Content
echo "</div>";
?>

Почему вы не закрыли тег php ?>где вы печатаете Content? Например:

<?php echo "<div>"; ?>
Content
<?php echo "</div>"; ?>

В третьих

Используйте этот код для печати ajax_url

add_action( 'wp_enqueue_scripts', 'myajax_data', 99 );
function myajax_data(){

    wp_localize_script('twentyfifteen-script', 'myajax', 
        array(
            'url' => admin_url('admin-ajax.php')
        )
    );  

}

И вам нужно заменить в коде JS

var ajaxurl = url;
Другие вопросы по тегам