Я использую IFTTT с WordPress, поэтому каждый раз, когда я создаю пост в Instagram, рецепт создает пост в WordPress.
Код, который создает IFTTT:
<div>
<img src='https://scontent.cdninstagram.com/t51.2885-15/sh0.08/e35/12724750_1719815604930604_2078818546_n.jpg?ig_cache_key=MTE5MTQxNTkwMjE5ODM2NzYwOQ%3D%3D.2' style='max-width:600px;' /><br/>
<div>
<a href="http://ift.tt/1XKFC24Q7" target="_blank">See</a>
</div>
</div>
По какой-то причине плагин, который я использую, чтобы добавить это изображение как показанное изображение, не любит этот конец изображения, поэтому мне нужно удалить код после «.jpg»:
«? Ig_cache_key = MTE5MTQxNTkwMjE5ODM2NzYwOQ% 3D% 3D.2»).
Я нашел фильтр WordPress, который изменяет сообщение перед сохранением.
Так что я попробовал этот код, но это удалить весь другой код после ?
add_filter( 'wp_insert_post_data' , __NAMESPACE__ . '\\filter_post_data' , '99', 2 );
function filter_post_data( $data , $postarr ) {
$data['post_content'] = substr( $data['post_content'], 0, strpos( $data['post_content'], "?")); delete all after ?
return $data;
}
Как можно сказать удалить все после знака вопроса (?), Но ТОЛЬКО внутри источника тега img?
Это ссылка для $data['post_content']
:
https://codex.wordpress.org/Plugin_API/Filter_Reference/wp_insert_post_data
Если вы хотите заменить контент в этом конкретном HTML, то, возможно, попробуйте это:
$a="<div><img src='https://scontent.cdninstagram.com/t51.2885-15/sh0.08/e35/12724750_1719815604930604_2078818546_n.jpg?ig_cache_key=MTE5MTQxNTkwMjE5ODM2NzYwOQ%3D%3D.2' style='max-width:600px;' /><br/><div><a href='http://ift.tt/1XKFC24Q7'target='_blank'>See</a></div></div>";
echo preg_replace('/(\?.*)(?=\')/U','',$a);
<div><img src='https://scontent.cdninstagram.com/t51.2885-15/sh0.08/e35/12724750_1719815604930604_2078818546_n.jpg' style='max-width:600px;' /><br/><div><a href='http://ift.tt/1XKFC24Q7'target='_blank'>See</a></div></div>
Удачи
Вот сценарий, который я написал, который делает это.
$string = "img src='https://scontent.cdninstagram.com/t51.2885-15/sh0.08/e35/12724750_1719815604930604_2078818546_n.jpg?ig_cache_key=MTE5MTQxNTkwMjE5ODM2NzYwOQ%3D%3D.2' style='max-width:600px;' /><br/>";
$string2 = "asd";
$count = 0;
for($i=0;$i<strlen($string);$i++)
{
if($string[$i]=='?')
{
while($string[$i]!='\'')
$i++;
}
$string2[$count] = $string[$i];
$count++;
}
echo $string2;
Он будет в основном копировать содержимое одной строки в другую, но пропустит что-либо после ?
пока не найдет '
Это зависит от вас, чтобы реализовать это, должно быть довольно просто. Код я выложил выводы
img src='https://scontent.cdninstagram.com/t51.2885-15/sh0.08/e35/12724750_1719815604930604_2078818546_n.jpg' style='max-width:600px;' />
Помните, что этот код предназначен только для этой задачи, он будет работать только здесь, будьте осторожны, для чего вы его используете, поскольку он может привести к неожиданным результатам, если, например, у вас есть другие знаки вопроса в содержании.
Однако было бы намного проще отредактировать ссылку, прежде чем она станет HTML, если это плагин, который извлекает ссылку, это не должно быть очень сложным.
Спасибо вам всем, я решил с этим кодом:
add_filter( 'wp_insert_post_data' , __NAMESPACE__ . '\\filter_post_data' , '99', 2 );
function filter_post_data( $data , $postarr ) {
$data['post_content'] = preg_replace('/(\?.*)(?=\' style)/','', $data['post_content']);
return $data;
}
но теперь у меня есть другая проблема, как я могу сказать, чтобы применить этот фильтр ТОЛЬКО если категория «Instagram»?
это условие, кажется, не работает:
add_filter( 'wp_insert_post_data' , __NAMESPACE__ . '\\filter_post_data' , '99', 2 );
function filter_post_data( $data , $postarr ) {
if ( in_category('instagram') ) {
$data['post_content'] = preg_replace('/(\?.*)(?=\' style)/','', $data['post_content']);
return $data;
}
}
Спасибо