フォーラム

タイトルを途中で改行したい (9 件の投稿)

  1. matcha
    メンバー
    3 ヶ月前の投稿 #

    Wordpress挑戦中の初心者です。

    トップページにテーブルを配置しそこに記事のタイトルと写真を6件表示しているのですが、
    タイトルが中途半端に下の行に表示されてしまいます。
    タイトルは必ず下のように途中で空白が一つ入っているようにしているのですが、
    タイトル1111111111 2222222222222
    それで、1行目に空白までのタイトルを表示(タイトル1111111111)、
    2行目に空白以降のタイトルを表示(2222222222)したいのです。
    オーバーした部分は切れてもかまいません。

    なにかいい方法ありますでしょうか?出来ましたら具体的にお願いします。

  2. hihito
    メンバー
    3 ヶ月前の投稿 #

    もう少し具体的に詳しくお願いします。

    そのテーブルはテーマに直接書いているのか、投稿記事で投稿するのか、
    ページでタグを書いているのか、はたまた1件の写真を投稿すれば自動で入りこむような
    テンプレートにしているのか、ちょっと想像がつきかねます。
    超簡単に、<br />でダメなの?とか思ってしまいました。

  3. matcha
    メンバー
    3 ヶ月前の投稿 #

    で改行できるのですが、ブログを表示しているページも改行してしまうので、
    トップページのみ改行してブログページはそのまま改行しないで表示したいのです。

    テーブルはテーマにかいてます。

    テーブルはテーマに直接かいています。

  4. matcha
    メンバー
    3 ヶ月前の投稿 #

    投稿記事のタイトルに<br />を直接いれると、改行するのですが、
    ブログページも改行してしまうので、そちらのページは改行せず一行で表示したいのです。

    逆でもいいのです。ブログページのタイトルを表示するときに<br />を削除して
    表示できれば、それでもいいです。

  5. shokun0803
    メンバー
    3 ヶ月前の投稿 #

    それではhome.phpファイルを作成し今のindex.phpの中身をまるごとコピーし、home.phpには<br />を入れる、index.phpには入れないという風に作り分けしてみてはどうでしょう?
    詳しくはテンプレート階層を見てみてください。

  6. kvex
    メンバー
    3 ヶ月前の投稿 #

    ホームのときは、正規表現でタイトル部分の空白を
    に置き換えるようにすればいいと思います。

  7. Daisu_k
    メンバー
    2 ヶ月前の投稿 #

    トップページだけに<br />を記述する条件分岐ではダメですか?

    <?php if (is_home()): ?><br /><?php endif; ?>

  8. kvex
    メンバー
    2 ヶ月前の投稿 #

    matchaさんのやりたいことだと、それだけじゃ無理じゃないですかね?
    1111111111 2222222222222
    というタイトルのときに、自動的に空白位置で改行したいということですから。

    正規表現じゃなくても、アレですね。あきらかに空白が1個ならば、$titleにタイトルを代入しているとして
    <?php if (is_home()): ?>
    $res = str_replace(' ','
    ', $title)
    print $res;
    <?php endif; ?>

    とかでもいいかもですね。

  9. mizube
    メンバー
    2 ヶ月前の投稿 #

    お邪魔します。テーブル内のタイトルは、どのように出力していますか?
    もし the_title(); で出力しているのであれば、こういう感じでどうでしょうか?

    <?php
    function filter_explode_title_by_space( $title=null ) {
        if ( empty($title) ) return;
        $title = mb_convert_kana( $title, 's' );
        if ( preg_match("/^(\S*)\s+?(.*)$/i", $title, $matches) ) {
            $title = $matches[1] . '<br />' . $matches[2];
        }
        return $title;
    }
    
    if ( is_home() ) {
        add_filter( 'the_title', 'filter_explode_title_by_space' );
    }
    ?>

    お使いのテーマの functions.php にコードを貼り付けて動作を確認してみてください。

    懸念する点としては、トップページにこの体裁以外で the_title(); を使用している場合にも一律で、最初の空白を <br /> にするようになってしまうことで、その場合は、上記コードの

    if ( is_home() ) {
        add_filter( 'the_title', 'filter_explode_title_by_space' );
    }

    の部分については functions.php へ貼り付けず、テーブルのセルを出力している Wordpress ループの while 文を add_filter() と remove_filter() で挟むことで対応します。

    <?php
    if ( have_posts() ) :
    ?>
    <table summary="">
        <tr>
    <?php
    add_filter( 'the_title', 'filter_explode_title_by_space' );
    while ( have_posts() ) :
    the_post();
    ?>
            <td>...</td>
    <?php
    endwhile;
    remove_filter( 'the_title', 'filter_explode_title_by_space' );
    ?>
        </tr>
    </table>
    <?php
    endif;
    ?>

返信

ログイン しなければ投稿できません。

About this Topic

Tags