フォーラムへの返信

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • フォーラム: 使い方全般
    返信が含まれるトピック: 投稿画面で書ける文字数を制限したい

    タイトルにも文字制限ということでしょうか?
    その場合、プログラムはほぼそのままで、フィルターを変更するだけで可能です。

    画面出力前のタイトルをカット

    add_filter('the_title', 'cut_title');
    function cut_title($title) {
    	if (mb_strlen($title) > 50) {
    		$title = mb_substr($title, 0, 50);
    	}
    	return $title;
    }

    編集時にタイトルの文字数をチェック

    add_filter('title_save_pre', 'check_title_length');
    function check_title_length($title) {
    	$length = mb_strlen($title);
    	if ($length > 50) {
    		wp_die('タイトルは 50 文字以内でお願いします<br />現在の文字数 : '.$length, 'エラー');
    	}
    	return $title;
    }

    プラグイン API/フィルターフック一覧 – WordPress Codex 日本語版
    本文やタイトル以外にも様々なフィルターが用意されていますので、見てみるとおもしろいかもしれません。

    追記
    先日回答した際の出力前の本文をカットするものは、HTML タグを途中で切ってしまって表示が崩れるなどの可能性がありますので改良が必須です。ご注意下さい。

    フォーラム: 使い方全般
    返信が含まれるトピック: 投稿画面で書ける文字数を制限したい

    出力前の本文をいじるには the_content フィルタが使えます。
    文字列を 1000 文字でカットするなら以下の様な感じでしょうか。

    add_filter('the_content', 'cut_content');
    function cut_content($content) {
    	if (mb_strlen($content) > 1000) {
    		$content = mb_substr($content, 0, 1000);
    	}
    	return $content;
    }

    しかしこれだと HTML のタグがあった場合も途中で切ってしまったりします。
    対策としては正規表現使ってタグ毎に区切ってとかでしょうか…。

    個人的には、表示する時ではなく投稿、編集時に文字数をチェックしたほうが良いと思います。content_save_pre フィルタが使えます。

    add_filter('content_save_pre', 'check_content_length');
    function check_content_length($content) {
    	$length = mb_strlen(strip_tags($content));
    	if ($length > 1000) {
    		wp_die('本文は 1000 文字以内でお願いします<br />現在の文字数 : '.$length, 'エラー');
    	}
    	return $content;
    }

    上記コードは、本文からタグを取り除いてから文字数をチェックしています。
    制限に引っかかって戻った際に入力した内容が消えてるのが難点ですが、とりあえずはこういう感じで出来るかと。

    is_category はカテゴリーページかをチェックする関数です。
    カテゴリーページ以外では常に false となるため、if 文の中が実行されないため表示されていないと思われます。具体的なコードは示せませんが、カテゴリーページ以外でも表示させたい場合は、if 文の条件部分を書き換える必要があります。

    関数リファレンス/is category

    フォーラム: 使い方全般
    返信が含まれるトピック: 検索機能で「OR検索」の方法

    はじめまして、私のブログ記事が参考サイトになっており、未解決でしたので回答させて頂きます。

    WordPress 3.5.1 で試しましたが、「OR 検索」になることを確認しました。
    しかし、ブログ記事の方にも追記しましたが、直接書き換えるより、

    add_filter('posts_search', function($search) { return str_replace(')) AND ((', ')) OR ((', $search); });

    の方が良いかもしれません。

    もし、「OR」になっているかよく分からない場合は、

    add_filter('posts_search', function($search) {
    	var_dump($search);
    	$search = str_replace(')) AND ((', ')) OR ((', $search);
    	var_dump($search);
    	return $search;
    });

    として、$search の内容を確認されると良いと思います。

4件の返信を表示中 - 1 - 4件目 (全4件中)