Link post images to post

时间:2013-03-02 作者:Cody

出于某种原因,我找不到任何好的方法来将帖子图像链接到帖子。

我在上找到一个脚本http://wpguy.com/plugins/linked-image/ 它可以工作,但不会删除旧链接,而是将旧链接和图像包装在新的a标记中。

我想要的是删除旧链接,这样图像只包装在一个a标记中。

这是我目前拥有的脚本:

function wpguy_linked_image($content){

    $searchfor = \'/(<img[^>]*\\/>)/\';
    $replacewith = \'<a href="\'.get_permalink().\'">$1</a>\';

    if (is_single() === FALSE){
        $content = preg_replace($searchfor, $replacewith, $content, 1);
    }
    return $content;

}

add_filter(\'the_content\', \'wpguy_linked_image\');
有人有主意吗?

2 个回复
SO网友:Simon

是的,不要使用正则表达式来解析HTML,而是使用DOM。

我会这样做:

在工具箱中,用于获取节点内部DOM的函数:

// GET INNER HTML OF A NODE
function DOMinnerHTML($element)  
{ 
    $innerHTML = ""; 
    $children = $element->childNodes; 
    foreach ($children as $child) 
    { 
        $tmp_dom = new DOMDocument(); 
        $tmp_dom->appendChild($tmp_dom->importNode($child, true)); 
        $innerHTML.=trim($tmp_dom->saveHTML()); 
    } 
    return $innerHTML; 
} 
然后是应用自定义函数的过滤器:

function change_destination_links_for_images( $content ) {   
    $dom = new DOMDocument();
    // THIS IS HACK TO LOAD STRING WITH CORRECT ENCODING
    // JUST OUTPUT <--?xml encoding="UTF-8"--> IN HTML SO NO HARM
    $dom->loadHTML( \'<?xml encoding="UTF-8">\' .  $content );

    // GET ALL <a> NODE
    foreach ( $dom->getElementsByTagName(\'a\') as $node ) {
        // GET HREF 
        $link_href = $node->getAttribute( \'href\' );
        // USE INNER OF THIS <a> NODE AS NEW DOC TO EXTRACT IMG
        $dom_node = new DOMDocument();
        $inner = DOMinnerHTML($node);
        $dom_node->loadHTML($inner);
        // CHECK IF IMAGE INSIDE THE LINK
        if ( $dom_node->getElementsByTagName(\'img\') {
           // IF SO REPLACE HREF
           $node->setAttribute(\'href\', get_permalink() );
           // RETURN MODIFIED DOM
           $content = $dom->saveHTML();
        }
    }
// RETURN CONTENT
return $content;
}
// APPLY FILTER
add_filter( \'the_content\', \'change_destination_links_for_images\' );
这是我为另一个目的所做工作的快速调整,因此可能会有错误。希望这有帮助。

SO网友:Cody

我终于找到了一个解决方案,我将脚本与删除原始图像链接的脚本相结合:

/**
 * Remove links from images
  */
add_filter( \'the_content\', \'attachment_image_link_remove_filter\' );
function attachment_image_link_remove_filter( $content ) {
    $content =
        preg_replace(array(\'{<a[^>]*><img}\',\'{/></a>}\'), array(\'<img\',\'/>\'), $content);
    return $content;
}


/**
 * Link images to post
 */
function wpguy_linked_image($content){

    $searchfor = \'/(<img[^>]*\\/>)/\';
    $replacewith = \'<a href="\'.get_permalink().\'">$1</a>\';

    if (is_single() === FALSE){
        $content = preg_replace($searchfor, $replacewith, $content, 1);
    }
    return $content;

}

add_filter(\'the_content\', \'wpguy_linked_image\');

结束

相关推荐

Search posts by Tag

我希望我的搜索表单只显示按标记组织的结果。我知道你可以添加&tag=TAGNAME 但如何将其集成到表单中,以便我的网站只搜索包含与搜索框中输入的内容相同的标记的帖子?我在页面上有两个搜索,因此理想情况下,我希望能够通过HTML将其添加到表单中,而不是其他任何地方,但任何答案都可以:)谢谢