web-dev-qa-db-ja.com

一括更新の抜粋

私は新しい投稿を作成するときに投稿の添付ファイルを取得し、抜粋フィールドに修正された "img src"文字列を保存するフォトブログテーマを使用しています。それはそれから使用します

<?php the_excerpt(); ?> 

ホームページメニュー、カテゴリページ、タグアーカイブなどのページにサムネイルを表示します。

私のウェブサイトはそれの上に数百の写真を持っています、そしてテーマは遡及的に古い投稿のための抜粋ベースのサムネイルを作成していません。

開発者はもはや正式にこのテーマをサポートしていません、そして、彼らのサポートフォーラムのセクションを熟読した後に、彼らは「残念ながら、私は古いサムネイルを作成する方法を知りません」とさえ認めました。 - 引用: http://everydays.hassii .com/archives/2541/comment-page-1#comment-9381

これは、新規/更新された投稿に関するこの抜粋サムネイル情報を作成する際に使用しているコードの一部です。

// ===== PB AUTO-INSERT EXCERPT ===== //
function pb_insert_excerpt(){
    $post_data = &$_POST;
    $post_id = $post_data['ID'] ;
    $post_title = $post_data['post_title'];
    $post_excerpt = $post_data['post_excerpt'];
    $existing_img = strstr($post_excerpt, 'jpg');
    if($post_data['post_excerpt'] = isset($post_data['excerpt'])) {
            if ($existing_img) {
                return $post_excerpt;
        } else {
                $arrImages =& get_children('post_type=attachment&post_mime_type=image&post_parent=' . $post_id); 
                if($arrImages) {
                    $arrKeys = array_keys($arrImages); 
                    $iNum = $arrKeys[0];
                    $sThumbUrl = wp_get_attachment_thumb_url($iNum); 
                    $thumbWidth = get_option("thumbnail_size_w");
                    $thumbHeight = get_option("thumbnail_size_h");
                    $sImgString = '<img src="' . $sThumbUrl . '" width="'.$thumbWidth.'" height="'.$thumbHeight.'" alt="'.$post_title.'" title="'.$post_title.'" />' ;          
                    return $sImgString;
                }   
            }
    }   
}

add_filter('excerpt_save_pre', 'pb_insert_excerpt');

これと同じロジックを使用して、すべての古い投稿をスキャンして抜粋img srcサムネイルセクションを作成することは可能ですか?

1
Pat

問題1:抜粋データの作成

これはSQLで直接やるのはかなり簡単なはずです。

UPDATE         wp_posts AS post
    INNER JOIN wp_posts AS attachment
        ON     attachment.post_type = 'attachment' AND
               post.ID = attachment.post_parent
    SET        post.post_excerpt = CONCAT('<img src="', attachment.guid,'" />')
    WHERE      post.post_excerpt = '';

これは明らかに「1回限りの修正」であり、データベースにアクセスできることを意味します。

プラグインが1つの投稿に複数の写真を許可し、投稿のギャラリーのどの写真が「デフォルト」であるかを識別するためにカバー写真を使用している場合、チェックインするためにjoin句を拡張する必要があります添付ファイルが表紙の写真であるかどうか。

問題2:抜粋のURLを更新する(guidからサムネイルに)

UPDATE         wp_posts AS post
    INNER JOIN wp_posts AS attachment
        ON     attachment.post_type = 'attachment' AND
               post.ID = attachment.post_parent
    SET        post.post_excerpt = CONCAT('<img src="', REPLACE(attachment.guid, '.jpg', '-100x100.jpg'),'" />')
    WHERE      post.post_excerpt = CONCAT('<img src="', attachment.guid,'" />');

これはJPGファイルに対してのみ機能するはずで、 - 100x100のサフィックスが適用されます。使用している寸法はサフィックスに置き換えてください。寸法がすべてのファイルで同じであると仮定します。

そうでない場合は、このタスクを実行するためにpostmetaデータを読み取るためのphpスクリプトが必要です。

1
Mihai Stancu