在Wordpress function.php的钩子中,如何正确检索当前帖子的短URL?

时间:2017-10-30 03:45:15

标签: php wordpress

在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

在这种情况下如何正确检索当前帖子的短网址?

3 个答案:

答案 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);
}