【问题标题】:Wordpress ajax call not triggering for non website member非网站成员未触发 Wordpress ajax 调用
【发布时间】: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" 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>

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

【问题讨论】:

  • 您能否对&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:

标签: jquery ajax wordpress function user-defined-functions


【解决方案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 不客气!如果我帮助了你,请选择我的答案为正确的。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 2012-07-17
  • 1970-01-01
相关资源
最近更新 更多