Informações de link de inserção automática de URLs no formato de publicação de link?

Seria possível fazer o formato da publicação do link funcionar da maneira como os links são compartilhados no Facebook, ou seja, preencher automaticamente um título, descrição e miniatura?

Um plugin para BuddyPress ( Buddypress Links , veja screenshots) torna isso possível para links da comunidade … alguma idéia de como eu poderia conseguir algo semelhante para itens de formato de link?

Solutions Collecting From Web of "Informações de link de inserção automática de URLs no formato de publicação de link?"

Eu tenho uma class que eu codifiquei quando fui jogado pela primeira vez com a API HTTP do WordPress. O que faz exatamente o que você precisa:

 < ?php /** * WebPage_Info class * * @version 0.1 * @author Ohad Raz  * @package WebPage_Info * @copyright Ohad Raz 2011 * */ if (!class_exists('webpage_info')){ /** * WebPage_Info class */ class webpage_info{ /** * page url * @var string * @access public * @since 0.1 */ public $_url; /** * page html * @var string * @access public * @since 0.1 */ public $_body; /** * page title * @var string * @access public * @since 0.1 */ public $_title; /** * page meta description * @var string * @access public * @since 0.1 */ public $_description; /** * page as domDocument * @var domDocument object * @access public * @since 0.1 */ public $_dom; /** * if page was loaded correctly or not * @var bool * @access public * @since 0.1 */ public $_found; /** * array of page meta keywords * @var array * @access public * @since 0.1 */ public $_keywords; /** * any other element which is requested by tag for faster access * @var array * @access public * @since 0.1 */ public $_tags; /** * any other element which is requested by id for faster access * @var array * @access public * @since 0.1 */ public $_ids; /** * Class constructor * * @access public * @since 0.1 * @author Ohad Raz  * * @param $url string url to load * @param $html bool if the given url is a url or html to load * * @return Void */ public function __construct($url,$html=false){ $this->_url = $url; $this->_body = ""; $this->_title = ""; $this->_description = ""; $this->_dom = ""; $this->_found = false; $this->_tags = array(); $this->_ids = array(); if ($html) $this->get_local_html($url); else $this->get_remote_html(); } /** * get_local_html will load domDocument object form html as string * * @access public * @since 0.1 * @author Ohad Raz  * * @param (string) $body oh html to load * * @return Void */ public function get_local_html($body) { $dom = new DOMDocument(); @$dom->loadHTML($body); $this->_dom = $dom; $this->_found = true; } /** * get_remote_html will load remote url into domDocument object * * @access public * @since 0.1 * @author Ohad Raz  * * @uses wp_remote_get and falls back to curl_exec * * @return Void */ public function get_remote_html(){ if (function_exists('wp_remote_get')){ $resp = wp_remote_get( $this->url ); if ( 200 == $resp['response']['code'] ) { $this->_body = $resp['body']; $this->_found = true; } }else{ $curl = curl_init($this->url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); if ($result !== false){ $this->_body = $result; $this->_found = true; } curl_close($curl); } if ($this->_found){ $dom = new DOMDocument(); @$dom->loadHTML($this->_body); $this->_dom = $dom; } } /** * Title function will return the title of the curent page * * @access public * @since 0.1 * @author Ohad Raz  * * @return string */ public function Title(){ if ($this->_title != ""){ return $this->_title; }else{ $t = $this->_dom->getElementsByTagName('title'); if ($t->length == 1){ $this->_title = $t->item(0)->nodeValue; return $this->_title; }else{ $this->_title = null; return null; } } } /** * Description function will return the description of the curent page * * @access public * @since 0.1 * @author Ohad Raz  * * @return string */ public function Description(){ if ($this->_description != ""){ return $this->_description; }else{ $ds = $this->_dom->getElementsByTagName('meta'); if ($ds->length > 0){ foreach ($ds as $d) { if ( strtolower( $d->getAttribute( 'name' ) ) == 'description' ) { $this->_description = $d->getAttribute( 'content' ); return $this->_description; }else { continue; } } $this->_description = null; return null; }else{ $this->_description = null; return null; } } } /** * KeyWords function will return an array of the keywords of the curent page * * @access public * @since 0.1 * @author Ohad Raz  * * @return array of strings */ public function Keywords(){ if (count($this->_keywords) > 0){ return $this->_keywords; }else{ $ds = $this->_dom->getElementsByTagName('meta'); if ($ds->length > 0){ foreach ($ds as $d) { if ( strtolower( $d->getAttribute( 'name' ) ) == 'keywords' ) { $this->_keywords = explode(",",$d->getAttribute( 'content' )); return $this->_keywords; }else { continue; } } $this->_keywords = null; return null; }else{ $this->_keywords = null; return null; } } } /** * getEByTagName function to get elements by tag name * * @access public * @since 0.1 * @author Ohad Raz  * * @param string $tag tagName * @param string $output dom: domElement object, array: array of tag,html,and attributes as array, html: html string of the element * @param boolean $force force generation or load from cache * * @return mixed depend on what you set output to be, will return null when tag name not found */ public function getEByTagName($tag,$output = "dom",$force = false){ if (isset($this->_tags[$tag]) && !$force) return $this->_tags[$tag]; $temp = $this->_dom->getElementsByTagName($tag); if ($temp === null) $this->_tags[$tag] = null; return $this->_tags[$tag]; if ($output == "dom"){ $this->_tags[$tag] = $temp; return $temp; }elseif($output == "array"){ $tempArr = array(); foreach ($temp as $e) { $tempA =array('tag' => $tag,'html' => $this->_dom->saveXML($e)); if ($e->hasAttributes()) { foreach ($e->attributes as $attr) { $tempA['attributes'][$attr->nodeName] = $attr->nodeValue; } } $tempArr[] = $tempA; } $this->_tags[$tag] = $tempArr; return $tempArr; }else{ $tempArr = array(); foreach ($temp as $e) { $tempArr[] = $this->_dom->saveXML($e); } $this->_tags[$tag] = $tempArr; return $tempArr; } } /** * getEByID function to get elements by id * * @access public * @since 0.1 * @author Ohad Raz  * * @param string $id Element id to fetch * @param string $output dom: domElement object, array: array of tag,html,and attributes as array, html: html string of the element * @param boolean $force force generation or load from cache * * @return mixed depend on what you set output to be, will return null when tag name not found */ public function getEByID($id,$output = "dom",$force = false){ if (isset($this->ids[$id]) && !$force) return $this->ids[$id]; //$temp = $this->_dom->getElementById($id); $temp = $this->getElementById($id); if ($temp === null) { $this->ids[$id] = null; return null; } if ($output == "dom"){ $this->ids[$id] = $temp; return $temp; }elseif($output == "array"){ $tempA =array('tag' => $temp->tagName,'html' => $this->_dom->saveXML($temp)); if ($temp->hasAttributes()){ foreach ($temp->attributes as $attr) { $tempA['attributes'][$attr->nodeName] = $attr->nodeValue; } } $this->ids[$id] = $tempA; return $tempA; }else{ $tempA = $this->_dom->saveXML($temp); $this->ids[$id] = $tempA; return $tempA; } } /** * getElementById using XpathDom * * @access public * @since 0.1 * @author Ohad Raz  * * @param string $id elemet id to get * * @return domDocument object */ public function getElementById($id){ $xpath = new DOMXPath($this->_dom); return $xpath->query("//*[@id='$id']")->item(0); } }//end class }//end if 

Agora, uma vez que você tenha essa class no lugar, você pode usá-la simplesmente para fazer exatamente o que você quer, ex:

 $WebPage = new webpage_info('http://en.bainternet.info'); if ($WebPage->_found){ //page title $title = $WebPage->Title(); //page description $description = $WebPage->Description(); $imgTags = $WebPage->getEByTagName('img','array'); //here $imgTags will hold an array of all images on that page with all of the attributes as a nested array. } 

então tudo o que resta para você é muito pouco, lembre-se de que funcionará dentro do WordPress usando a API HTTP e, além do WordPress, usará PHP CURL.

Pegue tudo o que você quiser:

 < ?php $tags = get_meta_tags('http://www.cnn.com/'); echo $tags['keywords']; echo $tags['description']; echo $tags['whatevermetanameyouseefit']; ?> 

Para pegar o Título de uma página é um pouco diferente:

 < ?php $match = array(); return preg_match('/(.+?)/i','http://www.cnn.com/',$match) ? $match[1] : 'No title'; ?></code> </pre>
</div>
</li><!-- #comment-## -->

	<div class="navigation">
		<div class="alignleft"></div>
		<div class="alignright"></div>
	</div>
 	</div>
		
        </div>
<ul>
  <li><a href="http://pt.wordpressask.com/como-obter-todos-os-tamanhos-de-imagem-apresentados-e-seus-urls.html" rel="bookmark">
    Como obter todos os tamanhos de imagem apresentados e seus URLs?  </a></li>
  <li><a href="http://pt.wordpressask.com/woocommerce-quantidade-em-massa-no-carrinho.html" rel="bookmark">
    WooCommerce: Quantidade em massa no carrinho  </a></li>
  <li><a href="http://pt.wordpressask.com/imagens-nao-aparecem-em-um-iphone.html" rel="bookmark">
    Imagens não aparecem em um iPhone  </a></li>
  <li><a href="http://pt.wordpressask.com/exibir-imagens-da-galeria-a-partir-do-tipo-de-postagem-personalizado.html" rel="bookmark">
    Exibir imagens da galeria a partir do tipo de postagem personalizado  </a></li>
  <li><a href="http://pt.wordpressask.com/redirecionar-apos-excluir-o-usuario-no-backend.html" rel="bookmark">
    Redirecionar após excluir o usuário no Backend  </a></li>
  <li><a href="http://pt.wordpressask.com/funcao-de-posts-relacionados-nao-esta-funcionando.html" rel="bookmark">
    Função de Posts relacionados não está funcionando  </a></li>
  <li><a href="http://pt.wordpressask.com/como-faco-para-organizar-suporte-personalizado-de-colors-em-um-tema-wp.html" rel="bookmark">
    Como faço para organizar suporte personalizado de colors em um tema WP  </a></li>
  <li><a href="http://pt.wordpressask.com/como-exibir-os-posts-mais-comentados-da-semana-passada.html" rel="bookmark">
    Como exibir os posts mais comentados da semana passada  </a></li>
  <li><a href="http://pt.wordpressask.com/x-pingback-e-xmlrpc.html" rel="bookmark">
    X-Pingback e XMLRPC  </a></li>
  <li><a href="http://pt.wordpressask.com/como-mostrar-uma-lista-de-termos-hierarquicos.html" rel="bookmark">
    Como mostrar uma lista de termos hierárquicos?  </a></li>
  <li><a href="http://pt.wordpressask.com/envio-de-publicacao-front-end.html" rel="bookmark">
    Envio de Publicação Front-End  </a></li>
  <li><a href="http://pt.wordpressask.com/echo-fora-do-html.html" rel="bookmark">
    Echo fora do HTML  </a></li>
  <li><a href="http://pt.wordpressask.com/pagina-personalizada-de-protecao-por-senha.html" rel="bookmark">
    Página personalizada de proteção por senha  </a></li>
  <li><a href="http://pt.wordpressask.com/imagens-nao-carregadas-apos-a-migration.html" rel="bookmark">
    Imagens não carregadas após a migration  </a></li>
  <li><a href="http://pt.wordpressask.com/como-os-papeis-sao-armazenados-no-database.html" rel="bookmark">
    Como os papéis são armazenados no database?  </a></li>
</ul>    
    </div>
    
</div>

   <div class="clearfix mt-5"></div>
    <hr />
<footer>
        <ul class="list-inline text-center">
        <li class="list-inline-item">© 2017 Wordpress Pergunte</li>
        <li class="list-inline-item"><a href="/topics">Topics</a></li>
        <li class="list-inline-item"><a href="#">Terms</a></li>
        <li class="list-inline-item"><a href="#">Privacy Policy</a></li>
        </ul>
</footer>

</div>     
    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
  </body>
<div id="statcounter_image" style="display:none;"><a
title="Web Analytics" href="http://statcounter.com/"
class="statcounter"><img
src="//c.statcounter.com/11617035/0/ee4b0cce/1/" alt="Web
Analytics"  /></a></div>
</html>