非网站成员未触发 Wordpress ajax 调用
Posted
技术标签:
【中文标题】非网站成员未触发 Wordpress ajax 调用【英文标题】:Wordpress ajax call not triggering for non website member 【发布时间】:2018-04-27 06:11:12 【问题描述】:我正在进行 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" 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>
如何使它对非订阅者和未登录的会员完美运行?
【问题讨论】:
您能否对<?php echo admin_url( 'admin-ajax.php' ); ?>
部分进行硬编码。我猜这部分是“”非登录用户
我不可能对那部分进行硬编码。
函数不 ping 时的输出是什么。检查您的控制台并让它共享。
这是我收到的错误 XML Parsing Error: no root element found Location: src/wp-admin/admin-ajax.php Line Number 1, Column 1:
【参考方案1】:
第一
为什么不使用WP debug
?阅读此topic。
或将此代码写入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;
【讨论】:
我已经通过将代码添加到functions.php文件来执行第三部分。那正确吗?我有必要执行第一部分和第二部分吗? 我已将第三部分的代码添加到functions.php,但它不起作用 @TarunJain 你需要在你的js代码中替换ajax_url
。检查我的更新。如果您的代码不起作用,请阅读 wp debug
我现在明白了.. 谢谢
@TarunJain 不客气!如果我帮助了你,请选择我的答案为正确的。谢谢以上是关于非网站成员未触发 Wordpress ajax 调用的主要内容,如果未能解决你的问题,请参考以下文章
WordPress 中带有 jQuery 的 AJAX:AJAX 调用未将属性值传递给 PHP 函数