WordPress 4.9でコアから分離された「Press This」プラグイン。久しぶりに使おうとしたら、ツール画面から取得したブックマークレットが動作しない…という問題に遭遇しました。

この記事では、Press Thisを2025年のWordPress環境で動作させる方法と、WEBブックマーク向けにカスタマイズする手順を解説します。

    Press Thisとは?

    Press Thisは、ブラウザで閲覧中のWebページをワンクリックでWordPressに投稿できるブックマークレット機能です。
    以下のような作業を効率化できます。

    • 閲覧中のページタイトルを自動取得
    • 選択したテキストを引用として取り込み
    • meta descriptionの取得
    • 素早い下書き作成

    問題:ツール画面のブックマークレットが動作しない

    Press Thisプラグインをインストールし、「ツール → 利用可能なツール」からブックマークレットを取得。しかし、実際に使ってみるとWordPressのトップページにリダイレクトされてしまい、Press This画面が開かないという問題が発生しました。

    原因

    ツール画面で提供されるブックマークレットはPOSTメソッドでフォームを送信する仕組みですが、最近のブラウザのセキュリティ強化やサーバー設定によってブロックされるケースがあります。

    解決策:GETパラメータ方式のブックマークレットを使用

    POSTではなくGETパラメータでデータを渡すシンプルなブックマークレットに置き換えることで解決しました。

    javascript:(function(){var s='';if(window.getSelection){s=window.getSelection().toString();}else if(document.selection){s=document.selection.createRange().text;}var m=document.querySelector('meta[name="description"]')||document.querySelector('meta[property="og:description"]');var d=m?m.getAttribute('content'):'';var text=s||d;window.open('https://example.com/wp-admin/press-this.php?v=8&u='+encodeURIComponent(location.href)+'&t='+encodeURIComponent(document.title)+'&s='+encodeURIComponent(text.substring(0,512)),'_press_this_app','width=960,height=600,resizable=1,scrollbars=1');})();
    

    https://example.com/ の部分は自分のサイトURLに変更してください。

    このブックマークレットの特徴は以下の通りです。

    • テキストを選択している場合はその内容を取得
    • 選択がない場合はmeta descriptionを自動取得
    • og:descriptionにも対応

    カスタマイズ:サムネイル画像とURLを自動挿入

    Press Thisの基本機能に加えて、以下のカスタマイズを実装しました。

    • サイトのスクリーンショット画像を自動挿入
    • クリーンなURLリンクを追加
    • 特定カテゴリーをデフォルト選択
    • 出力順序のカスタマイズ

    functions.php に追加するコード

    <?php
    /**
     * Press This(ブックマーク)のカスタマイズ
     * 
     * 機能:
     * - サイトURLとスクリーンショット画像を自動挿入
     * - カテゴリー「WEBギャラリー」をデフォルト選択
     * - 出力順: スクリーンショット → description(blockquote) → サイトURL
     */
    
    /* Press This(ブックマーク)のカスタマイズ */
    //メディア自動検出を無効化(不要な画像取り込みを防ぐ)
    add_filter('enable_press_this_media_discovery', '__return_false');
    
    //Press This 保存時のカスタマイズ
    add_filter('press_this_save_post', 'custom_press_this_save_post', 10, 1);
    
    function custom_press_this_save_post($post_data) {
        //元のURLを取得
        $source_url = isset($_REQUEST['u']) ? esc_url_raw($_REQUEST['u']) : '';
        
        if (empty($source_url)) {
            //フォールバック: 本文からURLを抽出
            $content = trim($post_data['post_content']);
            $pattern = '(https?://[-_.!~*\'()a-zA-Z0-9;/?:@&=+$,%#]+)';
            if (preg_match($pattern, $content, $match)) {
                $source_url = $match[0];
            }
        }
        
        if (empty($source_url)) {
            return $post_data;
        }
        
        //コンテンツを取得
        $content = $post_data['post_content'];
        
        //デフォルトの「情報源:」表示を削除
        $content = preg_replace('/<p>情報源:.*<em>.*?<\/em><\/p>/i', '', $content);
        $content = trim($content);
        
        //blockquote を抽出(Press Thisが自動で追加したもの)
        $blockquote = '';
        if (preg_match('/<blockquote>.*?<\/blockquote>/s', $content, $bq_match)) {
            $blockquote = $bq_match[0];
            //元のコンテンツからblockquoteを削除
            $content = preg_replace('/<blockquote>.*?<\/blockquote>/s', '', $content);
            $content = trim($content);
        }
        
        //クエリパラメータを削除してクリーンなURLを取得
        $parsed = parse_url($source_url);
        $clean_url = $parsed['scheme'] . '://' . $parsed['host'] . ($parsed['path'] ?? '/');
        
        //HTMLを組み立て(順番: スクリーンショット → blockquote → サイトURL)
        $html = '';
        
        //1. サムネイル画像(16:9比率、幅1200px)
        $thumbnail_url = 'https://s.wordpress.com/mshots/v1/' . rawurlencode($clean_url) . '?w=1200&h=675';
        $html .= '<a class="url-thumbnail" href="' . esc_url($clean_url) . '" target="_blank" rel="noopener"><img src="' . esc_url($thumbnail_url) . '" alt="' . esc_attr($post_data['post_title']) . '" class="lazy"></a>' . "\n";
        
        //2. blockquote(description)
        if (!empty($blockquote)) {
            $html .= $blockquote . "\n";
        }
        
        //3. サイトURLリンク
        $html .= '<p class="ta-right"><cite>サイトURL:<a class="link fz-sm" href="' . esc_url($clean_url) . '" target="_blank" rel="noopener">' . esc_html($clean_url) . '</a></cite></p>';
        
        //コンテンツを組み立て(残りのコンテンツがあれば先頭に)
        if (!empty($content)) {
            $post_data['post_content'] = $content . "\n" . $html;
        } else {
            $post_data['post_content'] = $html;
        }
        
        //特定のカテゴリー(ID=9)をデフォルト設定
        if (empty($post_data['post_category']) || $post_data['post_category'] === array(1)) {
            $post_data['post_category'] = array(9);
        }
        
        return $post_data;
    }
    

    コードの解説

    1. enable_press_this_media_discovery フィルター

    add_filter('enable_press_this_media_discovery', '__return_false');
    

    Press Thisはデフォルトで対象サイトから画像を自動取得しようとします。これを無効化することで、不要な画像の取り込みを防ぎます。

    2. press_this_save_post フィルター

    投稿データが保存される直前に呼び出されるフィルターです。$post_data 配列には以下の情報が含まれています。

    • post_title - 投稿タイトル
    • post_content - 本文
    • post_category - カテゴリー
    • post_status - 投稿ステータス

    3. WordPress.com mshots API

    $thumbnail_url = 'https://s.wordpress.com/mshots/v1/' . rawurlencode($clean_url) . '?w=1200&h=675';
    

    WordPress.comが提供する無料のスクリーンショットAPIを利用しています。パラメータで画像サイズを指定でき、今回は16:9比率(1200×675px)に設定しました。

    出力結果

    カスタマイズ後、Press Thisで投稿すると以下のようなHTMLが生成されます。

    <a class="url-thumbnail" href="https://example-site.com/" target="_blank" rel="noopener">
      <img src="https://s.wordpress.com/mshots/v1/https%3A%2F%2Fexample-site.com%2F?w=1200&h=675" alt="サイトタイトル" class="lazy">
    </a>
    <blockquote>サイトのmeta descriptionがここに入ります。</blockquote>
    <p class="ta-right"><cite>サイトURL:<a class="link fz-sm" href="https://example-site.com/" target="_blank" rel="noopener">https://example-site.com/</a></cite></p>
    

    まとめ

    Press Thisは地味ながら非常に便利な機能です。

    今回の対応ポイントをまとめると以下の通りです。

    1. ブックマークレットの問題 - POSTからGET方式に変更して解決
    2. meta description対応 - ブックマークレットでog:descriptionも取得
    3. サムネイル自動挿入 - WordPress.com mshots APIを活用
    4. 出力順序のカスタマイズ - press_this_save_postフィルターで制御
    5. デフォルトカテゴリー設定 - 特定カテゴリーを自動選択

    参考

    この記事のカスタマイズは、以下の記事を参考にさせていただきました。