워드프레스:게시물의 특정 URL 자동 변경
제 워드프레스 테마에서 링크를 변경할 수 있는 해결책을 찾았지만 내용의 링크는 변경할 수 없었습니다.컨텐츠에 있는 URL을 어떻게 얻을 수 있는데 변경도 가능합니까?
사용할 필요가 있습니다.the content
거름망을 치다그런데 어떻게 apple.com/test/ apple.com/test-123/, apple.com, microsoft.com, microsoft.com/test/ 같은 URL을 바꿀 수 있을까요?또한 이 기능은 컨텐츠에 일치하는 URL마다 올바르게 변경되어야 합니다.
add_filter('the_content ', 'function_name');
불행하게도 비슷한 질문의 답은 통하지 않습니다.
이것은 링크를 변경하는 제 작업 솔루션이지만 내용의 링크는 변경하지 않습니다.
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;
}
내가 당신을 제대로 이해했다면, 그것이 당신에게 필요한 것입니다.
add_filter( 'the_content', 'replace_links_by_promotions' );
function replace_links_by_promotions( $content ) {
$shop_ids = array(
'apple.com' => '1234',
'microsoft.com' => '5678',
'dell.com' => '9876',
);
preg_match_all( '/https?:\/\/(www\.)?([-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6})\b([-a-zA-Z0-9()@:%_\+.~#?&\/=]*)/', $content, $matches, PREG_OFFSET_CAPTURE );
foreach ( $matches[2] as $index => $match ) {
if ( ! isset( $shop_ids[ $match[0] ] ) ) {
continue;
}
$offer_post_url = 'https://www.network.com/promotion/click/id=' . $shop_ids[ $match[0] ] . '-yxz?param0=' . rawurlencode( $matches[0][ $index ][0] );
$content = substr_replace( $content, $offer_post_url, $matches[0][ $index ][1], strlen( $matches[0][ $index ][0] ) );
}
return $content;
}
이거 되는 것 같아요.작성된 대로 모든 "apple", "dell." 및 "microsoft." 링크는 게시물, 페이지, 발췌물, 많은 사용자 지정 게시물 유형 등 콘텐츠 필터를 사용하는 모든 유형의 콘텐츠와 일치합니다. 따라서, 만약 여러분이 그것을 정말 원하지 않고, 잘 원하지 않을 수도 있다면, 주 대체 기능은 조건부화되어야 하고, regex 기능은 조건부화되어야 합니다.더 정확하게 목표물로 삼으면 복잡해질 수 있습니다
(그리고 생각해보니, Regex에서 찾은 앵커 태그의 인용문이 특별한 처리가 필요할지 잘 모르겠습니다.만약 이것이 안된다면, 우리도 그것을 볼 수 있습니다.아니면 DOM 구문 분석기로 전환할 수도 있습니다. 처음부터 시작했어야 했는데...)
/** 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 ) ;
}
반환(참고: 인코딩 전 "raw URL"에서 따옴표를 자르기 전 예):
...원본(포스트 에디터) 콘텐츠에서 다음과 같은 내용이 제공됩니다.
다음과 같은 것을 사용해 볼 수도 있습니다.the_content
이 작업을 수행하기 위해 필터:
add_filter('the_content', function($content){
// filter $content and replace urls
$content = str_replace('http://old-url', 'http://new-url', $content);
return $content;
});
자세한 내용: https://developer.wordpress.org/reference/hooks/the_content/
언급URL : https://stackoverflow.com/questions/60829912/wordpress-automatically-change-specific-urls-in-posts
'IT' 카테고리의 다른 글
개체가 클래스 유형인지 확인합니다. (0) | 2023.11.04 |
---|---|
케이크 pp에서 아약스 요청을 확인하는 방법은? (0) | 2023.11.04 |
어떤 컴파일러가 실행 파일을 컴파일하는 데 사용되었는지 결정하는 방법은 무엇입니까? (0) | 2023.11.04 |
jQuery 클릭 / 두 함수 간 전환 (0) | 2023.11.04 |
HttpContext.현재의.라우팅 요청 시 세션이 null입니다. (0) | 2023.10.30 |