在Wordpress function.php
中,我有以下代码来获取当前帖子的简短网址:
add_action('wpcf7_before_send_mail', 'save_cf7_data');
function save_cf7_data($cf)
{
$post_url = 'https://' . $_SERVER[ 'SERVER_NAME' ] . $_SERVER[ 'REQUEST_URI' ];
$post_id = url_to_postid( $post_url );
$post_shorturl = wp_get_shortlink($post_id);
}
过去几个月它完全没有任何问题。但是,联系表单7插件或Wordpress必须有一些更改,$post_url
开始返回这样的URL:
https://example.com/wp-json/contact-form-7/v1/contact-forms/108/feedback
在这种情况下如何正确检索当前帖子的短网址?
答案 0 :(得分:2)
试试这段代码:
function save_cf7_data($cf) {
$submission = WPCF7_Submission::get_instance();
$cf_url = $submission->get_meta( 'url' );
$cf_postid = url_to_postid( $cf_url );
$cf_shorturl = wp_get_shortlink($cf_postid);
}
add_action('wpcf7_before_send_mail', 'save_cf7_data');
请参阅CF7源代码中的文件mail.php。
请查看Special Mail Tags,特别是[_post_url]
。
答案 1 :(得分:0)
我会使用get_permalink()来检索网页模板中的帖子网址。 <{1}}可能会在设置全局functions.php
之前加载,但不太确定。
修改强>
哦,如果你看看你得到的$post
,它实际上是一个WordPress Rest API网址。所以我认为表单插件用于提交到原始页面,但现在选择使用WordPress Rest API。
但是你的解决方案首先不是正确的方法。由于这是表单提交,您应该转储$post_url
。我在那里打赌那里的形式的网址信息。如果默认情况下未提交,您可以在插件表单中添加帖子网址(很可能是隐藏的)字段。
答案 2 :(得分:0)
然后尝试这样,
add_action('wpcf7_before_send_mail', 'save_cf7_data');
function save_cf7_data($cf)
{
global $wp;
$post_url = home_url(add_query_arg(array(),$wp->request));
$post_id = url_to_postid( $post_url );
$post_shorturl = wp_get_shortlink($post_id);
}