web-dev-qa-db-ja.com

すべての投稿から特定のショートコードを検索して削除する

質問

特定のショートコードを削除する方法はありますか。たとえば、[print_me]はそれがワンショットで表示されているすべての投稿から削除できます。 post_contentに入っている間は表示されないように、マスクしたりフィルターしたりするつもりはありません。私はそれが消えて欲しい。

これまでの試み...

これまでphpMyAdminを使用してきましたが、テーブルpost_contentに表示されているすべてのwp_postsに対してクエリを実行しました。検索したすべての投稿が表示されますが、個別に処理するには多すぎます。 ""(nothing)で置き換えようとした結果に対してfind/replace updateクエリを実行しましたが、クエリが正常に実行されたため、ショートコードが消えていないため、見逃していないかどうかわかりません。

これは私がそれらを見つけるために使ったクエリです:

SELECT * FROM `wp_posts` WHERE `post_content` LIKE '%[print_me]%'

そして111レコードを入手しました。しかし、それから検索と置換をするために同じツールを使って、私は得ます:

あなたのSQLクエリは正常に実行されました

UPDATE db1357924680.wp_posts SET post_content = REPLACE(post_content、 '%[print_me]%'、 '%%')どこpost_content LIKE '%% [print_me] %%' COLLATE utf8_bin

しかし確認すると、それらはすべてまだそこにあります。 SO誰かがこれを行うためのより良いまたは適切な方法を知っており、共有しても構わないと思っています。私が正しい軌道に乗っていれば、それがなぜ期待どおりに機能しないのかを理解する上でいくつかの支援をいただければ幸いです。 TIA.

解決方法(@TheDeadMedicに感謝します)

私のオリジナルのSQLクエリに対する修正を使用して(以下のようにそしてオリジナルの答えで見つけられた)、それは完璧に動作し、私は必要なものを達成しました、ありがとう。

UPDATE db1357924680.wp_posts SET post_content = REPLACE(post_content、 '[print_me]'、 '')WHERE post_content LIKE '%[print_me]%'


履歴(tl/rl)

私はしばらくの間プラグインを使用していました。それはすべての投稿やページに何かを表示させることができます。あるいは、あなたがそれがそのコンテンツに適していると感じたときだけショートコードを置くことを選ぶことができます。

しかし、約2年後、私はさらに組み込みたい他の機能を提供するより大規模な解決策を支持してそれを断念しました。

私はプラグインを無効にしましたが、今ではこれらのショートコードが通常の古いテキストとして出力されるという問題に直面しています。それは私が解決する必要があるものです。

環境/システム情報: PHP/Linux/WP_4.5.1/SQL_5.1.73/PMA_4.1.14.8

2
GµårÐïåñ

恒久的な解決策のために、あなたのSQLクエリはわずかにずれています - あなたは必要です:

UPDATE db1357924680.wp_posts SET post_content = REPLACE( post_content, '[print_me]', '' ) WHERE post_content LIKE '%[print_me]%' 

MySQLは例を置き換えます

6
TheDeadMedic

これを行う簡単な方法があります。

add_filter( 'the_content', 'my_post_content_remove_shortcodes', 0 );

function my_post_content_remove_shortcodes( $content ) {

    /* Create an array of all the shortcode tags. */
    $shortcode_tags = array(
        'shortcode_1',
        'shortcode_2',
        'shortcode_3'
    );

    /* Loop through the shortcodes and remove them. */
    foreach ( $shortcode_tags as $shortcode_tag )
        remove_shortcode( $shortcode_tag );

    /* Return the post content. */
    return $content;
}

これを自分の関数ファイルに入れることができます。

ソース: http://justintadlock.com/archives/2013/01/08/disallow-specific-shortcodes-in-post-content

--edit--

MySQLのエントリを検索してすべてを削除するのではなく、関数ファイルを使用してショートコードの機能を「削除」することができます。

以下のコードはあなたのすべてのコンテンツをフィルタリングし、あなたがshortcode_1などとマークされた場所で指定した特定のショートコードを削除します。

マークが言ったように:これはあなたが求めたものではありませんが、何か他のものを探すのに苦労しても同じような結果が得られます。

それが役に立てば幸い!

5
Frits