为啥我无法通过 Ajax 获取 WP 自定义字段值或发布 ID?

Posted

技术标签:

【中文标题】为啥我无法通过 Ajax 获取 WP 自定义字段值或发布 ID?【英文标题】:Why i can't get WP custom fields value or post ID via Ajax?为什么我无法通过 Ajax 获取 WP 自定义字段值或发布 ID? 【发布时间】:2019-02-26 08:39:12 【问题描述】:

我编写了一个基于访问者位置生成链接的代码,它运行良好,但我发现生成的代码会被缓存,因为我使用的是整页缓存,所以我想解决这个问题,我可以使用 ajax 来加载该链接。我使用下面的代码完美地获取了我需要的一些变量,例如位置变量和链接域变量等。但是我无法获取 WooCommerce 自定义字段数据,甚至无法获取产品 ID,它只是返回空白。

我正在使用此代码来获取自定义字段,该字段在直接用于函数时可以完美运行,但无法在 ajax 中使用

$uk_asin = get_post_meta(get_post()->ID, "wccaf_uk_asin", true );

我在functions.php中使用了该代码

add_action( 'woocommerce_before_add_to_cart_button', 'affiliate_link_ajax', 11);
function affiliate_link_ajax()     
?>
<script>
jQuery(document).ready(function()

             jQuery.ajax(
                url: "<?php echo admin_url('admin-ajax.php'); ?>",
                type: 'POST',
                data: 
                action: 'getmyfunctionform1'
                ,
                dataType: 'html',
                success: function(response) 

                jQuery("#myResultsform1").html(response);

                

        ); 
    );
</script> 
<!-- end Ajax call to getmyfunctionform1 smc 11-22-2013 -->

<div id="myResultsform1"></div>
<?php

还有 funnctions.php 中的这段代码

// Ajax Function to Load PHP Function myfunctionform1 smc 11/22/2013

add_action('wp_ajax_getmyfunctionform1', 'myfunctionform1');
add_action('wp_ajax_nopriv_getmyfunctionform1', 'myfunctionform1');

function myfunctionform1()  
    $uk_asin = get_post_meta(get_post()->ID, "wccaf_uk_asin", true );
echo $uk_asin;
// Whatever php and or html you want outputed by the ajax call in template file

die();  // important must use

// end Ajax Function to Load PHP Function myfunctionform1 smc 11/22/2013

如果答案很简单,我将不胜感激,因为我对编码还是很陌生

【问题讨论】:

所以你在 myfunctionform1() 中使用了这一行 $uk_asin = get_post_meta(get_post()-&gt;ID, "wccaf_uk_asin", true ); 并且它没有返回任何值? @Michael 是的,当然,当我尝试在 ajax 中请求不返回值的产品 id 时,但是,如果我定义了一个变量,如 $var1 = 'Hello World!';回声 $var1;它使用上面的代码在 ajax 中返回值 我不认为:get_post()-&gt;ID 将在您的 AJAX 回调中起作用。您必须将 ID 或 post 对象传递给函数,否则它使用全局 $post,我假设在您的 AJAX 调用期间不会出现。 developer.wordpress.org/reference/functions/get_post @Michael 你能告诉我如何将 id 或那个自定义字段值传递给这个函数,很抱歉我对编码很陌生。 在下面查看我的答案。 【参考方案1】:

将您的帖子 ID 传递给您的 AJAX 请求:

data: 
    action: 'getmyfunctionform1',
    postId: <?php echo get_post()->ID; ?>

然后在你的回调函数中使用它来获取元值:

function myfunctionform1()  
    $postId = filter_input( INPUT_POST, 'postId', FILTER_SANITIZE_NUMBER_INT );
    $uk_asin = get_post_meta( $postId, "wccaf_uk_asin", true );
    // etc.

【讨论】:

非常感谢,迈克尔。它现在对我有用,我只是想知道您所说的“直接在您的affiliate_link_ajax() 回调中获取它”是什么意思,您的意思是将该行 $uk_asin = get_post_meta(get_post()->ID, "wccaf_uk_asin", true );进入affiliate_link_ajax(),然后在 myfunctionform1() echo $uk_asin 我尝试这样做,但对我不起作用,不知道为什么 我的意思是你为什么不直接在affiliate_link_ajax() 中回显你的链接呢?为什么需要进行 AJAX 调用才能获取它? 好吧,我需要为客户服务的链接是基于客户位置的,实际上我已经提出了您的建议,并且效果很好,但后来我发现,因为我正在使用整页缓存,如果第一个访问者来自法国,他将获得 amazon.fr 链接,然后如果来自意大利的人访问该网站,他也会获得 amazon.fr 链接而不是 Amazon.its 链接......所以我虽然那个 ajax 可以解决这个问题

以上是关于为啥我无法通过 Ajax 获取 WP 自定义字段值或发布 ID?的主要内容,如果未能解决你的问题,请参考以下文章

Wordpress实现自定义ajax请求

在自定义列中显示高级自定义字段值 (wp_list_table)

通过 WP API v2 添加 Post Meta 字段

在select2中使用ajax时无法获取自定义属性值

MYSQL Select If Query - WP 自定义字段

高级自定义字段 acf_form() 'uploader' => 'basic' 无法在前端显示完整的 wp 媒体上传器