WordPressフィルターフックでできることの例(すべての記事の冒頭を変更したい)

もちろん一つの記事を大切に。

手作業での配置もいいですが、functions.phpを使って一度にブロックを配置するのも一つです。

functions.php ファイルにカスタムフィルターフックを追加します。

function insert_custom_html_at_start_of_posts($content) {
    // カスタムHTML
    $custom_html = '
    <div class="custom-html">
      <!-- あなたのカスタムHTML -->
      <p>これはすべての記事の冒頭に表示されるカスタムメッセージです。</p>
    </div>';
    
    // 投稿ページかつ単一の投稿であればカスタムHTMLを追加
    if (is_single() && is_main_query()) {
        $content = $custom_html . $content;
    }
    
    return $content;
}
add_filter('the_content', 'insert_custom_html_at_start_of_posts');

使い方の説明:

  1. insert_custom_html_at_start_of_posts(): この関数は、すべての投稿の冒頭に指定したカスタムHTMLを挿入します。
  2. add_filter('the_content', 'insert_custom_html_at_start_of_posts');: このフィルターフックを使って、the_content(投稿本文)にカスタムHTMLを追加します。
  3. is_single()is_main_query(): これにより、単一の投稿ページ(ブログ記事など)のみカスタムHTMLを挿入することができます。

このコードを functions.php に追加することで、すべての記事の冒頭に自動でカスタムHTMLが表示されます。

フィルターフックでできることの例

投稿のタイトルを加工する
the_title フィルターフックを使うと、投稿のタイトルを変更できます。たとえば、すべての投稿タイトルの後に特定の文字列を追加することができます。

function add_suffix_to_title($title) {
    return $title . ' | 特定の文字列';
}
add_filter('the_title', 'add_suffix_to_title');

抜粋(エグゼルプ)の長さを変更する
抜粋のデフォルトの長さ(55語)を変更したい場合に excerpt_length フィルターフックを使用します。

function custom_excerpt_length($length) {
    return 20; // 抜粋の長さを20語に設定
}
add_filter('excerpt_length', 'custom_excerpt_length', 999);

ログイン画面のロゴURLを変更する
login_headerurl フィルターフックを使用すると、WordPressのログイン画面で表示されるロゴをクリックした際のリンク先URLを変更できます。

function custom_login_logo_url() {
    return home_url(); // ロゴをクリックするとホームにリダイレクト
}
add_filter('login_headerurl', 'custom_login_logo_url');

メールの送信元を変更する
WordPressが送信するメールの「送信者名」や「送信元メールアドレス」を wp_mail_from_namewp_mail_from フィルターフックで変更できます。

// メールの送信者名を変更
function custom_mail_from_name($name) {
    return 'サイト管理者';
}
add_filter('wp_mail_from_name', 'custom_mail_from_name');

// メールの送信元アドレスを変更
function custom_mail_from($email) {
    return 'admin@yourdomain.com';
}
add_filter('wp_mail_from', 'custom_mail_from');

コンテンツの末尾にカスタムメッセージを追加する
the_content フィルターフックを使って、投稿本文の最後に特定のメッセージや広告を自動挿入することができます。

function add_custom_message_to_content($content) {
    if (is_single()) {
        $custom_message = '<p>この記事が気に入ったらシェアしてください!</p>';
        $content .= $custom_message;
    }
    return $content;
}
add_filter('the_content', 'add_custom_message_to_content');

WooCommerceの商品価格をカスタマイズする
WooCommerceを利用している場合、 woocommerce_get_price_html フィルターフックを使って商品価格の表示をカスタマイズできます。

function custom_price_format($price, $product) {
    return '<span class="special-price">' . $price . ' - お買い得!</span>';
}
add_filter('woocommerce_get_price_html', 'custom_price_format', 100, 2);

カスタムCSSやJSファイルのロードを制御する
style_loader_tagscript_loader_tag フィルターフックを使って、CSSやJavaScriptファイルの読み込みに条件を追加できます。

function add_async_attribute_to_scripts($tag, $handle) {
    if ('your-script-handle' === $handle) {
        return str_replace(' src', ' async="async" src', $tag);
    }
    return $tag;
}
add_filter('script_loader_tag', 'add_async_attribute_to_scripts', 10, 2);

フィルターフックは、以下のような場合に有効です:

  • コンテンツの加工:投稿やページの本文やタイトルにカスタマイズを加えたいとき。
  • 表示内容の変更:例えば、抜粋の長さを調整したり、特定の条件でコンテンツを加工したいとき。
  • システムの動作変更:メール送信、ログイン画面、ファイルの読み込みなど、システムの動作をカスタマイズしたいとき。
  • プラグインの拡張:WooCommerceなどのプラグインが提供するフィルターフックを使って、特定の機能をカスタマイズしたいとき。

フィルターフックはWordPressの柔軟性を大いに活用するための重要な仕組みです。プラグインやテーマを変更することなく、独自のカスタマイズを加えることができ、さまざまな場面で役立ちます。

エラーガイド

設定していたはずのCSS, JSファイルが読み込めていない場合。

HTMLに設定していたCSSやJavaScriptが正しく読み込まれていない理由は、WordPressで functions.php にHTMLを直接挿入した場合、WordPressの出力が期待通りに動作しないことがあるためです。

特に、CSSやJavaScriptのファイルを正しく読み込むためには、WordPressの適切な関数を使ってエンキューする必要があります。

そのため、CSSとJavaScriptを正しく読み込むためには、wp_enqueue_stylewp_enqueue_script を使用することが推奨されます。

特定のカテゴリーだけ挿入したい。

特定のカテゴリーの記事だけにカスタムHTMLを挿入するフィルタリングは可能です。

そのためには、is_category() 関数や has_category() 関数を使って、特定のカテゴリーかどうかを判定することができます。

// 特定のカテゴリーの記事の冒頭にカスタムHTMLを挿入する関数
function insert_custom_html_for_specific_category($content) {
    // カスタムHTML
    $custom_html = '
    <!-- カスタムHTML -->
    
      
    </div>
    ';

    // 特定のカテゴリー(スラッグ: "recommend-gear")の記事にのみカスタムHTMLを追加
    if (is_single() && has_category('recommend-gear') && is_main_query()) {
        $content = $custom_html . $content;
    }
    
    return $content;
}
add_filter('the_content', 'insert_custom_html_for_specific_category');

// CSSとJSを読み込む関数
function enqueue_custom_kizai_styles_scripts() {
    if (is_single() && has_category('recommend-gear')) { // 特定のカテゴリーでのみ読み込む
        wp_enqueue_style('custom-kizai-style', 'https://kotarohattori.com/wp-content/themes/coldbox/kizai/kizai.css');
        wp_enqueue_script('custom-kizai-script', 'https://kotarohattori.com/wp-content/themes/coldbox/kizai/kizai.js', array(), null, true);
    }
}
add_action('wp_enqueue_scripts', 'enqueue_custom_kizai_styles_scripts');