为啥我无法通过 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()->ID, "wccaf_uk_asin", true );
并且它没有返回任何值?
@Michael 是的,当然,当我尝试在 ajax 中请求不返回值的产品 id 时,但是,如果我定义了一个变量,如 $var1 = 'Hello World!';回声 $var1;它使用上面的代码在 ajax 中返回值
我不认为:get_post()->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?的主要内容,如果未能解决你的问题,请参考以下文章
在自定义列中显示高级自定义字段值 (wp_list_table)
MYSQL Select If Query - WP 自定义字段
高级自定义字段 acf_form() 'uploader' => 'basic' 无法在前端显示完整的 wp 媒体上传器