gpt4 book ai didi

php - Wordpress:自动更改 the_content 部分中的 URL

转载 作者:行者123 更新时间:2023-12-03 23:07:45 26 4
gpt4 key购买 nike

来自 here 的解决方案没有解决我们的问题。
我已经有一个解决方案来更改我们主题中字段表单中的所有链接。我为每个网络使用不同的数组,例如 $example_network_1 $example_network_2每个附属网络都有一个 PHP foreach。

现在我需要一个解决方案来为 WordPress 帖子的内容使用相同的数组。

此解决方案适用于一个网络,但它导致 YouTube 视频出现 404e 错误。我们输入来自 YouTube 视频的 URL,WordPress 会自动生成嵌入视频。使用以下代码,我们得到一个 404 错误 iframe 或类似的东西。

我们需要针对多个网络的解决方案。

我非常感谢每一个帮助!

    $example_network_1 = array(
array('shop'=>'shop1.com','id'=>'11111'),
array('shop'=>'shop2.co.uk','id'=>'11112'),
);
$example_network_2 = array(
array('shop'=>'shop-x1.com','id'=>'11413'),
array('shop'=>'shop-x2.net','id'=>'11212'),
);

add_filter( 'the_content', 'wpso_change_urls' ) ;
function wpso_found_urls( $matches ) {
global $example_network_1,$example_network_2;
foreach( $example_network_1 as $rule ) {
if (strpos($matches[0], $rule['shop']) !== false) {
$raw_url = trim( $matches[0], '"' ) ;
return '"https://www.network-x.com/click/'. $rule['id'].'lorem_lorem='.rawurlencode($raw_url ) . '"';
}

/*
foreach( $example_network_2 as $rule ) {
if (strpos($matches[0], $rule['shop']) !== false) {
$raw_url = trim( $matches[0], '"' ) ;
return '"https://www.network-y.com/click/'. $rule['id'].'lorem='.rawurlencode($raw_url ) . '"';
}
*/
}
}
function wpso_change_urls( $content ) {
global $example_network_1,example_network_2;
return preg_replace_callback( '/"+(http|https)(\:\/\/\S*'. $example_network_1 ['shop'] .'\S*")/', 'wpso_found_urls', $content ) ;
// return preg_replace_callback( '/"+(http|https)(\:\/\/\S*'. $example_network_2 ['shop'] .'\S*")/', 'wpso_found_urls', $content ) ;
}

最佳答案

autoembed被钩在 the_content优先级为 8 位于 wp-includes/class-wp-embed.php:39
尝试降低 the_content 的优先级过滤器,以便在嵌入之前进行 URL 替换,如下所示:

add_filter( 'the_content', function ( $content ) {
/*
* Here, we define the replacements for each site in the network.
* '1' = main blog
* '2' = site 2 in the network, and so on
*
* To add more sites, just add the key number '3', etc
*/
$network_replacements = [
'1' => [
[ 'shop' => 'shop1.com', 'id' => '11111' ],
[ 'shop' => 'shop2.co.uk', 'id' => '11112' ],
],
'2' => [
[ 'shop' => 'shop-x1.com', 'id' => '11413' ],
[ 'shop' => 'shop-x2.net', 'id' => '11212' ],
]
];

// Early bail: Current blog ID does not have replacements defined
if ( ! array_key_exists( get_current_blog_id(), $network_replacements ) ) {
return $content;
}

$replacements = $network_replacements[ get_current_blog_id() ];

return preg_replace_callback( '/"+(http|https)(\:\/\/\S*' . $replacements['shop'] . '\S*")/', function( $matches ) use ( $replacements ) {
foreach ( $replacements as $rule ) {
if ( strpos( $matches[0], $rule['shop'] ) !== false ) {
$raw_url = trim( $matches[0], '"' );

return '"https://www.network-x.com/click/' . $rule['id'] . 'lorem_lorem=' . rawurlencode( $raw_url ) . '"';
}
}
}, $content );
}, 1, 1 );

这不是复制和粘贴解决方案,但应该可以帮助您前进。您可能需要调整您的“preg_replace_callback”代码,但您说它可以正常工作,所以我只是离开了它。

关于php - Wordpress:自动更改 the_content 部分中的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61216306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com