web-dev-qa-db-ja.com

コンテンツの最初の画像を削除する

私はこのコードを使ってきました:

function remove_first_image ($content) {
if (!is_page() && !is_feed() && !is_feed()) {
$content = preg_replace("/<img[^>]+\>/i", "", $content, 1);
} return $content;
}
add_filter('the_content', 'remove_first_image');

ここ数年、私のサイトではトップに画像が挿入された約20,000の投稿があります。私は同様に注目の画像として最初の画像を使用するプラグインを持っています。最初の画像をコンテンツに挿入して、そこに投稿した別の画像が削除されないようにする必要がある場合もあります。

コンテンツの最初の画像を投稿から完全に削除したいと思います。将来的には毎回注目の画像をコンテンツに挿入する必要がなくなり、複数の画像がある場合は他の画像が表示されるようになります。これまでのところ、私はこれについて何も見つけることができませんでした。20,000の投稿に行き、最初の画像を削除しなければならない以外は。

何か案は?

2
Bryan Kremkau

私は特にこのためのプラグインを知りません、WPにこれをするものは何もありませんが、少しのphpで実装するのはそれほど難しくありません。サーバーの設定によっては、接続を確実に維持するためのいくつかの回避策が必要になるかもしれませんが、基本的な考え方はすべての投稿をループし、それが正しい投稿であることを確認することです。次に、既に持っているコードと非常によく似た内容に対して文字列置換を実行します。

例として、これはテストされていません。

$query = new WP_Query( array(
  'post_type' => 'post',
  'post_status' => 'publish'
) );

foreach ( $query->posts as $edit_post ) {
  $edit_post->post_content
  wp_update_post( array(
    'ID' => $edit_post->ID,
    'post_content' => preg_replace( "/<img[^>]+\>/i", "", $edit_post->post_content, 1 )
  );
}

あなたはおそらくそれをどこか安全にそれを実行するためにいくつかの管理者ページコードでそれ自身のプラグインに入れたいと思うでしょう、うまくいけばあなたはアイデアを得ます。

WP-CLIsearch-replace で一括編集することができます。 DB文字列で、おそらく似たようなことをするために使われる可能性があります。

$ wp search-replace '/<img[^>]+\>/i' '' wp_posts --regex 
1
totels

隠したいだけの場合は、CSSでそれを実行できます。

.your-post-content-class img:first-of-type { display:none; }

post_contentからifを本当に削除したい場合は、post_contentの最初のimageタグを取得してから更新します。

function removeFirstImgTag($post_id) {
  $post = get_post($post_id);
  $content = $post->post_content;
  preg_match('<img([\w\W]+?)/>', $content, $matches);
  $content = str_replace($matches[0][0], '', $content);

  wp_update_post(array(
    'ID'            => $post_id,
    'post_content'  => $content,
  ));
}

apply_filters('the_content')なしでpost_contentを取得してから、regexを含む最初のimgタグを取得して、それを更新します。

まだテストしていませんが、うまくいくと思います:)

0
Elex

あなたはおそらくこのようなものを使用してフロントエンドでこれを行うことができます

$('img ')[0].remove()
0
Vinnie James