0

WordPressサイトを更新しています。YouTube の埋め込み動画を作成するためにショートコードを使用していましたが、それはもはや必要ありません。私はフロント エンド開発者であり、データベースに触れる前に注意したいと思います。MySQL Search and Replace を使用して変換するにはどうすればよいですか。

[sc:youtube id="abcdefghijk"]

abcdefghijkユーチューブの動画IDはどこですか?次のような標準の埋め込みコードに変換したいと思います。

<iframe width="775" height="436" src="http://www.youtube.com/embed/abcdefghijk?rel=0" frameborder="0" allowfullscreen></iframe>

実際に引き継ぐ必要があるのは ID だけです。

4

2 に答える 2

0

非常に興味深い質問です。残念ながら、これは MySQL で REPLACE または REGEXP 構文を使用して行うことはできません。そこで、投稿の正規表現検索および置換用の小さな wordpress プラグインを作成しました。プラグインを使用する前に、必ずwp_postsテーブルをバックアップしてください。

CREATE TABLE wp_posts_temp LIKE wp_posts; 
INSERT INTO wp_posts_temp SELECT * FROM wp_posts;

プラグインコード

このコードを wp-content/plugins/replace-in-posts/ フォルダー内の replace.php のようなファイルに入れ、プラグインを有効にします。

<?php
/* 
Plugin Name: Replace in posts
Author: Danijel
*/
add_action('admin_menu', 'replace_in_posts_menu');
function replace_in_posts_menu() {
    add_options_page("Replace in posts", "Replace in posts", 'manage_options', "replace_in_posts", "replace_in_posts_admin");
}

function replace_in_posts_admin() {
    if ( !empty($_POST['pattern']) && isset($_POST['replacement']) ) {
        $pattern = stripslashes_deep( $_POST['pattern'] );
        $replacement = stripslashes_deep( $_POST['replacement'] );
        $count = replace_in_posts( '/'.$pattern.'/', $replacement );
    }
    ?><div id="icon-options-general" class="icon32"></div><h2><?php echo 'Replace in posts' ?></h2>
    <div class="wrap"><form method="post" action="<?php echo admin_url()."admin.php?page=".$_GET["page"] ?>">
        Pattern (without delimiter) : <input type="text" name="pattern" value="">
        Replacement: <input type="text" name="replacement" value="">
        <input class="button-primary" type="submit" value="Replace" >
    </form><?php if (isset($pattern)) : ?><p>Pattern "<?php echo $pattern; ?>" replaced in <?php echo ( $count ? $count : '0' ); ?> posts</p><?php endif; ?></div><?php
}

function replace_in_posts( $pattern, $replacement ) {
    $myposts = get_posts('numberposts=-1');
    $count = 0;
    foreach ( $myposts as $post ) {
        if ( preg_match( $pattern, $post->post_content ) ) {
            $post->post_content = preg_replace( $pattern, $replacement, $post->post_content  );
            wp_update_post( $post );
            $count++;
        }
    }
    return $count;
}
?>

質問の正規表現パターンと置換:

\[sc:youtube id="(\w+?)"\]
<iframe width="775" height="436" src="http://www.youtube.com/embed/$1?rel=0" frameborder="0" allowfullscreen></iframe>

プラグインはそのパターンでテストされており、エラーはありませんでした。

于 2013-05-23T01:16:10.763 に答える
0

Wordpress でそれを行う方法はわかりませんが、MySQL ステートメントは次のようになります。テーブルの名前が meta_data で、列が meta_key、meta_value であると仮定すると、meta_key には youtube が含まれ、meta_value には abcdefghijk が含まれます。列とテーブルの名前を実際の情報に変更します。

UPDATE 
    `meta_data`
SET
    `meta_value` = CONCAT('<iframe width="775" height="436" src="http://www.youtube.com/embed/', meta_value, '?rel=0" frameborder="0" allowfullscreen></iframe>')
WHERE
    `meta_key` = 'youtube'
于 2013-05-22T22:22:08.873 に答える