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;