Wordpress:自动更改帖子中的特定 URL [英] Wordpress: Automatically change specific URLs in posts

查看:45
本文介绍了Wordpress:自动更改帖子中的特定 URL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我找到了一个解决方案来更改我的 wordpress 主题中的链接,但不是内容中的链接.如何获取内容中的 URL,以便我也可以更改它们?

我需要使用内容过滤器.但是如何更改像 apple.com/test/apple.com/test-123/、apple.com、microsoft.com、microsoft.com/test/这样的 URL.该函数还应正确更改内容中每个匹配的 URL.

add_filter('the_content', 'function_name');

不幸的是,

...来自像这样的原始(帖子编辑器)内容:

I have found a solution to change links in my wordpress theme, but not the links in the content. How is it possible to get the URL in the content, so I can also changed them?

I need to use the content filter. But how is it possible to change URLs like apple.com/test/ apple.com/test-123/, apple.com, microsoft.com, microsoft.com/test/. The function should also change correctly every matched URL in the content.

add_filter('the_content ', 'function_name');

The answer of a similiar question unfortunately doesn't work.

This is my working solution to change links, but not the links in the content.

add_filter('rh_post_offer_url_filter', 'link_change_custom');
function link_change_custom($offer_post_url){

$shops= array(
        array('shop'=>'apple.com','id'=>'1234'),
        array('shop'=>'microsoft.com','id'=>'5678'),
        array('shop'=>'dell.com','id'=>'9876'), 
    );
    foreach( $shops as $rule ) {
        if (!empty($offer_post_url) && strpos($offer_post_url, $rule['shop']) !== false) {      
            $offer_post_url = 'https://www.network.com/promotion/click/id='.$rule['id'].'-yxz?param0='.rawurlencode($offer_post_url);
}    
    }
$shops2= array(
        array('shop'=>'example.com','id'=>'1234'),
        array('shop'=>'domain2.com','id'=>'5678'),
        array('shop'=>'domain3','id'=>'9876'),  
    );
    foreach( $shops2 as $rule ) {
        if (!empty($offer_post_url) && strpos($offer_post_url, $rule['shop']) !== false) {      
            $offer_post_url = 'https://www.second-network.com/promotion/click/id='.$rule['id'].'-yxz?param0='.rawurlencode($offer_post_url);
}    
    }

        return $offer_post_url; 
}

解决方案

I think this works. Note that, as written, it will match every "apple.", "dell.", and "microsoft." link in every type of content that uses the content filter - posts, pages, excerpts, many custom post types, etc. - so, if you don't really want that, and you very well may not, then the main replacement function will have to be conditionalized, and the regex function more precisely targeted..., and that can get complicated.

(Also, come to think of it, I'm not sure whether the quotes in the anchor tags that the Regex finds will require special handling. If this doesn't work, we can look at that, too. Or maybe switch to a DOM parser, like maybe I should have started out by doing... )

/** INITIATE FILTER FUNCTION **/
add_filter( 'the_content', 'wpso_change_urls' ) ;

/**
 * PREG CALLBACK FUNCTION
 * Match Matches to id #s
 * and return replacement urls enclosed in quotes (as found)
 */ 
function wpso_found_urls( $matches ) { 

  //someone else probably has a v clever parsimonious way to do this next part
  //but at least this makes what's happening easy to read
  if ( strpos( $matches[0], 'apple' ) ) {

      $id = '1234' ;

  } 

  if ( strpos( $matches[0], 'microsoft' ) ) {

      $id = '5678' ;

  } 

  if ( strpos( $matches[0], 'dell' ) ) {

      $id = '9876' ;

  } 

  $raw_url = trim( $matches[0], '"' ) ;

  return '"https://www.network.com/promotion/click/id='. $id .'-yxz?param0='.rawurlencode( $raw_url) . '"' ; 

}

/** ENDURING A DREADFUL FATE USING REGEX TO PARSE HTML **/
function wpso_change_urls( $content ) { 

    $find_urls = array( 
        '/"+(http|https)(\:\/\/\S*apple.\S*")/',
        '/"+(http|https)(\:\/\/\S*microsoft.\S*")/',
        '/"+(http|https)(\:\/\/\S*dell.\S*")/',
    );

    return preg_replace_callback( $find_urls, 'wpso_found_urls', $content ) ; 

}

Returning (note: example prior to trimming quotes from the "raw URL" before encoded):

...from original (post editor) content like this:

这篇关于Wordpress:自动更改帖子中的特定 URL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆