3

我将 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>

出于某种原因,我用来添加此图像(如特色图像)的插件不喜欢图像 src 的这一端,因此我需要删除 ".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 标签的 src 内?

这是参考$data['post_content']

https://codex.wordpress.org/Plugin_API/Filter_Reference/wp_insert_post_data

4

3 回答 3

0

如果您正在寻找替换该特定 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>

祝你好运

于 2016-02-24T15:43:48.623 回答
0

谢谢大家,我用这段代码解决了:

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;
  }
}

谢谢

于 2016-02-24T16:44:19.317 回答
0

这是我写的一个脚本。

$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;

它基本上会将一个字符串的内容复制到另一个字符串中,但会跳过 a 之后的任何内容,?直到找到 a'

由你来实现它,应该很简单。我发布的代码输出

img src='https://scontent.cdninstagram.com/t51.2885-15/sh0.08/e35/12724750_1719815604930604_2078818546_n.jpg' style='max-width:600px;' />

请记住,此代码仅用于此任务,它只会在这里工作,请小心使用它,因为它可能会产生意想不到的结果,例如,如果内容中有其他问号。

然而,在链接变成 HTML 之前编辑链接会容易得多,如果它是一个获取链接的插件,它应该不会很难。

于 2016-02-24T15:53:20.763 回答