Создание пользовательской ссылки с ребрендингом с использованием шорткода wordpress - PullRequest
1 голос
/ 10 июля 2020

Я пытаюсь создать короткую ссылку с ребрендингом, используя шорткод WordPress. Вот что у меня есть:

add_shortcode( 'shortlink', 'rebrandly_shortcode');
function rebrandly_shortcode( $content = null ) {
    
$domain_data["fullName"] = "rebrand.ly";
$post_data["destination"] = $content;
$post_data["domain"] = $domain_data;
$ch = curl_init("https://api.rebrandly.com/v1/links");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "apikey: 67c55f8b4e5d4f079cfc866b2b80b4f5",
  "Content-Type: application/json"
));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($post_data));
$result = curl_exec($ch);
curl_close($ch);
$response = json_decode($result, true);

return "Short URL is: " . $response["shortUrl"];
    
}

Следуя указаниям для PHP здесь - https://developers.rebrandly.com/docs

Я тестирую шорткод [shortlink]https://example.com[/shortlink] но он не работает.

Когда я меняю часть: $post_data["destination"] = $content; на $post_data["destination"] = "http://example.com";, он работает.

Я, должно быть, неправильно вставляю содержимое шорткода. Есть идеи?

1 Ответ

0 голосов
/ 10 июля 2020

В вашей функции шорткода отсутствует аргумент. Список параметров для всех функций шорткода: ($attributes, $content=null). Это означает, что первым параметром, переданным Wordpress, будут атрибуты (независимо от того, есть они у вас или нет), а содержимое между тегами шорткода - второй .

Ваш код пытается чтобы использовать первый параметр как $content, но поскольку WP фактически сначала передает атрибуты, в вашем случае это пусто.

Вам просто нужно изменить свою функцию, чтобы она соответствовала определенному списку параметров, чтобы включить оба аргумента (даже если у вас нет атрибутов), например:

// $attributes argument first, $content second
function rebrandly_shortcode( $attributes, $content = null ) {    
    
    // do your stuff here

}

FYI

Атрибуты шорткода - это информация, которую вы можете добавить в шорткод, который будет использоваться в функции, например, класс, какой-то текст для включения или что-нибудь еще.

Если мы возьмем ваш код в качестве примера, вы можете передавать разные домены коротких ссылок на разных страницах следующим образом (очевидно, это не практический пример, но он показывает, как это работает!)

[shortlink domain="rebrand.ly"]

Затем функция может извлечь атрибуты, которые будут использоваться следующим образом:

function rebrandly_shortcode( $attributes, $content = null ) {
    // extract the apikey attribute into a variable called $domain
    extract( shortcode_atts( array(
        'domain' => '' // you could also give it a default value here instead of ''
    ), $attributes ) );

    // use your domain parameter
    $domain_data["fullName"] = $domain;

   // do the rest of your stuff
}
...