サポート » バグ報告と提案 » 切実なバグ

  • 解決済 manbo

    (@manbo)


    くだらないバグなんですが、必要なので切実です。
    タイトル及び本文が半角の0のみだと投稿が保存できません。
    また、下書きにもできません。
    タイトル、本文共に0以外の数字なら保存できますし、複数個の0だと保存できます。

    例えばタイトルを00、本文を0で保存は可能で、その逆も保存できますが、一旦保存した00を0に変えて更新しても00に戻されます。
    データベースを直接弄って00を0に変えたら0で表示可能でしたので、保存の際に単一の0は無視するような処理がどこかにあるようです。

    例えばこのようなコードで00を0にしようとしても当然ながら出来ません。0以外を指定すると問題無く動きます。

    
    function hoge(){
    global $post;
    $title = get_the_title($post->ID);
    	if($title === '00') {
    	$my_post = array('ID' => $post->ID, 'post_title' => '0');
    	wp_update_post($my_post);
    	}
    }
    add_action('wp_insert_post', 'hoge');
    

    出力の際に誤魔化すのは邪道なので却下です。

    
    function hogehoge($title){
    if(!is_admin() && $title === '00') {
    	$title  = 0;
    }
    return $title;
    }
    add_action('the_title', 'hogehoge');
    

    データベースを直接書き換えるのも考えましたが、保存できない方がおかしいので却下しました。

    語学力の無さがいけないのでしょうか。
    現時点で誰からも返答をいただけません。
    https://core.trac.wordpress.org/ticket/42976
    よろしくお願いします。

    尚、他の環境では調べていません。
    WordPress version: 4.9.1-latest
    PHP version: 7.1.10
    MySQL version: 5.5.56-MariaDB

    • このトピックは manboが6 ヶ月、 3 週間前に変更しました。
8件の返信を表示中 - 1 - 8件目 (全8件中)
  • 数字の0が数字型なのかfalseなのか文字型なのかイコールで代入するだけでは再抽出の際に確認できませんのでそういう使用方法をやめる方向で検討できませんか。
    もしくは全プログラムにおいて記事情報の授受を全て文字型で確実に受け渡すよう変更する必要があると思います。

    • この返信は6 ヶ月、 3 週間前に  msio さんが編集しました。理由: さいのじがまちがえていました。

    こんにちは

    チケットはクローズされちゃいましたね・・・
    0だけのときに保存なんてできる必要ないだろ的回答で、理由はよく分かりません。
    特に議論もされていません。

    カスタムフィールド使えということなんでしょうか・・・

    タイトルを0にしたい理由が書いていないと、対応されないかもしれないですね。

    切実なバグというのであれば、それ相応の理由があるのでしょうから、チケットに理由も追記したらよいのではないでしょうか。

    こんにちは、

    0をタイトルに入力した場合に、00に戻ってしまうという事ですが、

    再現がうまくいかないので、あくまでアテズッポなのですが

    例えば、タイトルに abc 本文に abc と入力していったん保存して、

    次に、タイトルと本文を削除して、保存すると、タイトル本文共に、abcになります。

    タイトル本文共に、空白だった場合保存の処理が行われず、元の文章が再現されるという事なのではないかと思います。

    では、なぜ文字列0が空白と同様の扱いになるのかという点ですが、

    自分のテーマでの、タイトルが空白な場合の処理の例です

    
    if( empty( $mytime->post_title )){//mytimeは $post
    
        $mytime->post_title = '<span class="icon-link-no-title entry-title-text">no title</span>';
    }
    

    empty()は、文字列0もtrueを返してくるので、タイトルが0の場合、このフォールバックリンクが表示されました。

    保存時のコアのコードは見ていませんが、それに類するような事があるのかも といった印象でした。

    • この返信は6 ヶ月、 3 週間前に  nobita さんが編集しました。

    「再現がうまくいかないので」と書きましたが、再現できました。

    本文に、0 だけ書くのをやめて、<!--これ数字-->みたいな、マーカーをつけておけばいいのではないかと思います。本文の数字を取得する時に、マーカーを削除でどうですか?

    こういう使い方お勧めするわけではありませんが、現状のTinyMCEだと、数値だけを保存して、後でP要素付で出力するという仕組みなので、このような事になっているのだろうと思います。

    • この返信は6 ヶ月、 3 週間前に  nobita さんが編集しました。
    • この返信は6 ヶ月、 3 週間前に  nobita さんが編集しました。

    確かにタイトルや本文を0のみにするのは極めて稀なんでしょうけど、保存されない事自体が正常ではないと思うんですがね。
    0だろうが1だろうが人間から見たらただの文字に変わりなく、0でも00でも文字です。
    挙動として正しいと思わないから報告しましたが、相手にされませんでしたね。まあ分かります、極めて稀ですもんね。
    理由を述べたとしても稀すぎて相手にされないので、自分で対処するほか方法は無いと感じました。

    I Don’t think to allow post publish when title or content is just 0.

    でもこれは完全に主観ですよね?文句言ってやろうかと思いましたが、相手にされないのは目に見えてるのでしませんが…

    これはTinyMCEの問題だったんですか。
    nobitaさんご提案の方法も良いと思いましたが、そのままだとヘッダー内のタイトルが表示されませんね。

    munyaguさんご提案のカスタムフィールドを使うのも方法の一つですが、どちらにせよ妥協してカスタマイズしなければいけないのでなかなか面倒です。

    全然納得できませんが、テンプレート側で判別して出来ますし相手にしてもらえないので諦めます。

    ありがとうございました。

    以下でどうでしょうか。

    function hoge($maybe_empty, $postarr) {
        return false;
    }
    add_filter( 'wp_insert_post_empty_content', 'hoge', 10, 2 );

    以下のファイルにある wp_insert_post 関数内で空の判定処理をしているようです。フィルターフックが使えるようになっていました。

    post.php in tags/4.9.1/src/wp-includes – WordPress Trac

    おぉ天才!
    タイトルのみ0、本文のみ0、両方0、これならいけます、問題ないですね。
    コードを足さない出来ないのは負けた感が否めないですが、でも面倒なカスタマイズはしなくて済みます。
    あ、でも<title>~</title>にページのタイトルが出ませんね…
    やはり何かしら手を加えないと完璧にはならないようですね…
    でもありがとうございます。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「切実なバグ」には新たに返信することはできません。