非网站成员未触发 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>

如何使它对非订阅者和未登录的会员完美运行?

【问题讨论】:

您能否对&lt;?php echo admin_url( 'admin-ajax.php' ); ?&gt; 部分进行硬编码。我猜这部分是“”非登录用户 我不可能对那部分进行硬编码。 函数不 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 标签?&gt;,在哪里打印你的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 插件下未调用 Ajax 功能

WordPress 计划事件未在设定时间内触发

WordPress ajax 成功登录但未设置当前用户?

WordPress 中带有 jQ​​uery 的 AJAX:AJAX 调用未将属性值传递给 PHP 函数

wordpress 在functions.php第5行的非对象上调用成员函数add_section()

未捕获的错误:在 url 中找不到类 'WP_Query' - Wordpress