[plugin] Twitter cards update
This commit is contained in:
parent
e4569677c4
commit
72dca22ebd
4 changed files with 105 additions and 26 deletions
13
bl-plugins/twitter-cards/languages/cs_CZ.json
Normal file
13
bl-plugins/twitter-cards/languages/cs_CZ.json
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"plugin-data":
|
||||||
|
{
|
||||||
|
"name": "Twitter Cards",
|
||||||
|
"description": "With Twitter Cards, you can attach rich photos, videos and media experiences to Tweets, helping to drive traffic to your website."
|
||||||
|
},
|
||||||
|
"default-image": "Výchozí obrázek",
|
||||||
|
"twitter-site-profile": "Profil stránky na Twitteru",
|
||||||
|
"twitter-author-profile": "Profil autora příspěvku na Twitteru",
|
||||||
|
"minimum-image-dimensions": "Minimální rozměry obrázku jsou 300x157px a maximum 4096x4096px.",
|
||||||
|
"image-must-be-less": "Obrázek musí být menší než 5MB.",
|
||||||
|
"formats-are-supported": "Jsou podporovány formáty pouze JPG, PNG, WEBP a GIF."
|
||||||
|
}
|
|
@ -4,5 +4,10 @@
|
||||||
"name": "Twitter Cards",
|
"name": "Twitter Cards",
|
||||||
"description": "With Twitter Cards, you can attach rich photos, videos and media experiences to Tweets, helping to drive traffic to your website."
|
"description": "With Twitter Cards, you can attach rich photos, videos and media experiences to Tweets, helping to drive traffic to your website."
|
||||||
},
|
},
|
||||||
"default-image": "Default image"
|
"default-image": "Default image",
|
||||||
|
"twitter-site-profile": "Twitter site profile",
|
||||||
|
"twitter-author-profile": "Twitter author profile",
|
||||||
|
"minimum-image-dimensions": "The minimum image dimensions are 300x157px and the maximum 4096x4096px.",
|
||||||
|
"image-must-be-less": "Image must be less than 5MB in size.",
|
||||||
|
"formats-are-supported": "JPG, PNG, WEBP and GIF formats are supported."
|
||||||
}
|
}
|
|
@ -3,7 +3,7 @@
|
||||||
"email": "",
|
"email": "",
|
||||||
"website": "https://plugins.bludit.com",
|
"website": "https://plugins.bludit.com",
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"releaseDate": "2021-05-23",
|
"releaseDate": "2022-10-01",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"compatible": "4.0.0",
|
"compatible": "4.0.0",
|
||||||
"notes": ""
|
"notes": ""
|
||||||
|
|
|
@ -6,7 +6,9 @@ class pluginTwitterCards extends Plugin {
|
||||||
{
|
{
|
||||||
// Fields and default values for the database of this plugin
|
// Fields and default values for the database of this plugin
|
||||||
$this->dbFields = array(
|
$this->dbFields = array(
|
||||||
'defaultImage'=>''
|
'defaultImage' => '',
|
||||||
|
'twitterSite' => '',
|
||||||
|
'twitterCreator' => ''
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,9 +16,24 @@ class pluginTwitterCards extends Plugin {
|
||||||
{
|
{
|
||||||
global $L;
|
global $L;
|
||||||
|
|
||||||
$html = '<div>';
|
$html = '<div class="alert alert-primary" role="alert">';
|
||||||
|
$html .= $this->description();
|
||||||
|
$html .= '</div>';
|
||||||
|
|
||||||
|
$html .= '<div>';
|
||||||
$html .= '<label>'.$L->get('Default image').'</label>';
|
$html .= '<label>'.$L->get('Default image').'</label>';
|
||||||
$html .= '<input id="jsdefaultImage" name="defaultImage" type="text" value="'.$this->getValue('defaultImage').'" placeholder="https://">';
|
$html .= '<input id="jsdefaultImage" name="defaultImage" type="text" value="'.$this->getValue('defaultImage').'" placeholder="https://">';
|
||||||
|
$html .= '<p class="text-muted small">' . $L->get('minimum-image-dimensions') . ' ' . $L->get('image-must-be-less') . ' ' . $L->get('formats-are-supported') . '</p>';
|
||||||
|
$html .= '</div>';
|
||||||
|
|
||||||
|
$html .= '<div>';
|
||||||
|
$html .= '<label>'.$L->get('Twitter site profile').'</label>';
|
||||||
|
$html .= '<input id="jstwitterSite" name="twitterSite" type="text" value="'.$this->getValue('twitterSite').'" placeholder="@yourSiteProfile">';
|
||||||
|
$html .= '</div>';
|
||||||
|
|
||||||
|
$html .= '<div>';
|
||||||
|
$html .= '<label>'.$L->get('Twitter author profile').'</label>';
|
||||||
|
$html .= '<input id="jstwitterCreator" name="twitterCreator" type="text" value="'.$this->getValue('twitterCreator').'" placeholder="@authorProfile">';
|
||||||
$html .= '</div>';
|
$html .= '</div>';
|
||||||
|
|
||||||
return $html;
|
return $html;
|
||||||
|
@ -31,19 +48,20 @@ class pluginTwitterCards extends Plugin {
|
||||||
global $page;
|
global $page;
|
||||||
|
|
||||||
$data = array(
|
$data = array(
|
||||||
'card' =>'summary',
|
'card' => 'summary_large_image',
|
||||||
'site' =>'',
|
'twitterSite' => $this->getValue('twitterSite'),
|
||||||
'title' =>$site->title(),
|
'twitterCreator' => $this->getValue('twitterCreator'),
|
||||||
'description' =>$site->description(),
|
'title' => $site->title(),
|
||||||
'image' =>''
|
'description' => $site->description(),
|
||||||
|
'image' => ''
|
||||||
);
|
);
|
||||||
|
|
||||||
switch($WHERE_AM_I) {
|
switch( $WHERE_AM_I ) {
|
||||||
// The user filter by page
|
// The user filter by page
|
||||||
case 'page':
|
case 'page':
|
||||||
$data['title'] = $page->title();
|
$data['title'] = $page->title();
|
||||||
$data['description'] = $page->description();
|
$data['description'] = $page->description();
|
||||||
$data['image'] = $page->coverImage($absolute=true);
|
$data['image'] = $page->coverImage( $absolute = true );
|
||||||
|
|
||||||
$pageContent = $page->content();
|
$pageContent = $page->content();
|
||||||
break;
|
break;
|
||||||
|
@ -53,32 +71,75 @@ class pluginTwitterCards extends Plugin {
|
||||||
$pageContent = '';
|
$pageContent = '';
|
||||||
// The image it's from the first page
|
// The image it's from the first page
|
||||||
if(isset($content[0]) ) {
|
if(isset($content[0]) ) {
|
||||||
$data['image'] = $content[0]->coverImage($absolute=true);
|
$data['image'] = $content[0]->coverImage( $absolute = true );
|
||||||
$pageContent = $content[0]->content();
|
$pageContent = $content[0]->content();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$html = PHP_EOL.'<!-- Twitter Cards -->'.PHP_EOL;
|
$html = PHP_EOL.'<!-- Twitter Cards -->'.PHP_EOL;
|
||||||
$html .= '<meta property="twitter:card" content="'.$data['card'].'">'.PHP_EOL;
|
$html .= '<meta name="twitter:card" content="' . $data['card'] . '">'.PHP_EOL;
|
||||||
$html .= '<meta property="twitter:site" content="'.$data['site'].'">'.PHP_EOL;
|
$html .= '<meta name="twitter:site" content="' . $data['site'] . '">'.PHP_EOL;
|
||||||
$html .= '<meta property="twitter:title" content="'.$data['title'].'">'.PHP_EOL;
|
$html .= '<meta name="twitter:title" content="' . $data['title'] . '">'.PHP_EOL;
|
||||||
$html .= '<meta property="twitter:description" content="'.$data['description'].'">'.PHP_EOL;
|
$html .= '<meta name="twitter:creator" content="' . $data['twitterCreator'] . '">'.PHP_EOL;
|
||||||
|
// If the page doesn't have a description try to get excerpt from content
|
||||||
|
if( empty( $data['description'] ) )
|
||||||
|
{
|
||||||
|
$data['description'] = $this->content_excerpt( $pageContent , 150, '...');
|
||||||
|
}
|
||||||
|
$html .= '<meta name="twitter:description" content="' . $data['description'] . '">'.PHP_EOL;
|
||||||
|
|
||||||
// If the page doesn't have a coverImage try to get an image from the HTML content
|
// If the page doesn't have a coverImage try to get an image from the HTML content
|
||||||
if( empty($data['image']) ) {
|
if( empty( $data['image'] ) ) {
|
||||||
// Get the image from the content
|
// Get the image from the content
|
||||||
$src = DOM::getFirstImage($pageContent);
|
$src = DOM::getFirstImage( $pageContent );
|
||||||
if ($src!==false) {
|
if ( $src !== false ) {
|
||||||
$data['image'] = $src;
|
$data['image'] = $src;
|
||||||
} else {
|
} else {
|
||||||
if (Text::isNotEmpty($this->getValue('defaultImage'))) {
|
if ( Text::isNotEmpty( $this->getValue('defaultImage') ) ) {
|
||||||
$data['image'] = $this->getValue('defaultImage');
|
$data['image'] = $this->getValue('defaultImage');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$html .= '<meta property="twitter:image" content="'.$data['image'].'">'.PHP_EOL;
|
$html .= '<meta name="twitter:image" content="'.$data['image'].'">'.PHP_EOL;
|
||||||
|
$html .= '<!-- /Twitter Cards -->'.PHP_EOL.PHP_EOL;
|
||||||
|
|
||||||
|
unset( $pageContent );
|
||||||
|
unset( $data );
|
||||||
|
|
||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Return excerpt from full content of post
|
||||||
|
*
|
||||||
|
* @param string $str Post content
|
||||||
|
* @param int $n Number of characters
|
||||||
|
* @param string $endChar End char append to after excerpt (default "...")
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
private function content_excerpt( string $str, int $n = 500, string $endChar = '…' ): string
|
||||||
|
{
|
||||||
|
$str = strip_tags( $str );
|
||||||
|
if ( mb_strlen( $str ) < $n )
|
||||||
|
{
|
||||||
|
return $str;
|
||||||
|
}
|
||||||
|
$str = preg_replace('/ {2,}/', ' ', str_replace(["\r", "\n", "\t", "\x0B", "\x0C"], ' ', $str));
|
||||||
|
if ( mb_strlen( $str ) <= $n )
|
||||||
|
{
|
||||||
|
return $str;
|
||||||
|
}
|
||||||
|
$out = '';
|
||||||
|
foreach ( explode( ' ', trim( $str ) ) as $val )
|
||||||
|
{
|
||||||
|
$out .= $val . ' ';
|
||||||
|
if ( mb_strlen( $out ) >= $n )
|
||||||
|
{
|
||||||
|
$out = trim( $out );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ( mb_strlen( $out ) === mb_strlen( $str ) ) ? $out : $out . $endChar;
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue