メインコンテンツへ移動

Search results of "i"

15件の結果を表示中 - 16 - 30件目 (全8,974件中)
  • 投稿者
    検索結果
  • アバター画像原子恭一
    参加者
    7

    はい。「比較」は「LIKE」なのに、SQL では IN になっちゃうのです。ここが大問題ですよね…

    0
    Who liked: No user
    アバター画像キタジマ タカシ
    参加者
    2587

    と、ここまで書いて気づきましたが、「3:Snow Monkey Search 「カスタムフィールド検索」ブロック」にかかれているように、「比較」は「LIKE」にされてるんですよね?

    それなのに SQL では IN になっちゃうというのであれば、Snow Monkey Search 側に不具合があるのかな…?

    0
    Who liked: No user
    アバター画像キタジマ タカシ
    参加者
    2587

    1:Snow Monkey Search の「カスタムフィールド検索」ブロックは、ACFの複数選択チェックボックス(値がシリアライズされた配列としてDBに保存される)の値を、上記のような LIKE 検索で正しく絞り込むための標準的な設定方法(「タイプ」や「比較」の適切な組み合わせなど)はございますでしょうか。

    本来だと同じキーのメタデータが複数登録された状態になるので、シリアライズして保存するというのが ACF の独自仕様なんですよね。なのでこれをどうにかする標準的な方法というのはなくて(強いて言えば標準的な形でメタデータを保存するプラグインに乗り換える)、基本的にはご想像の通りフックでクエリーを書き換えるという形になるのかなと思います。

    Snow Monkey Search の場合だと pre_get_posts より snow_monkey_search_pre_get_posts を使うほうが良いです。

    僕もやったことがないのでわからないのですが、meta_query の部分を参照して、書き換えた必要なメタキーが含まれていたら書き換えるというアプローチになるのかなぁと想像します。

    が、Snow Monkey Search の他に ACF にネイティブに対応している検索系プラグインがあるようなら、それを使うほうがリスクは低いかもですね…。

    0
    Who liked: No user
    アバター画像原子恭一
    参加者
    7

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

    おかげさまで、子テーマの functions.phpregister_meta() を使用し、対象のACFフィールドキーを明示的に登録(特に show_in_rest を適切に設定)することで、無事「キー」プルダウンにACFフィールド名が表示されるようになりました!
    ただし、新たな問題が起きました。

    新たに発生している問題:ACF複数選択チェックボックスでの絞り込みが機能しない

    キーの表示問題は解決したのですが、次に、ACFの複数選択チェックボックスで作成した「対応言語 (Language)」フィールドの絞り込みがうまく機能しないという問題に直面しております。

    現在の状況:

    1:ACFフィールド「対応言語 (Language)」の設定:

    • フィールドタイプ: チェックボックス(複数選択可)
    • 返り値: 値 (Value) (例: englishchinese
    • データベース (wp_postmeta) 保存形式: a:2:{i:0;s:7:"english";i:1;s:7:"chinese";} のようなシリアライズされた
    • 配列文字列として正しく保存されていることを確認済みです。

    2:functions.php での register_meta 設定:

    register_meta(
      'post',
      'Language',
      [
        'object_subtype' => 'restaurant', // 対象の投稿タイプ
        'single' => false,
        'type' => 'array',
        'auth_callback' => function() { return current_user_can( 'edit_posts' ); },
        'show_in_rest' => [
          'schema' => [
            'type' => 'array',
            'items' => [ 'type' => 'string' ],
          ],
        ],
      ]
    );

    (他の単一選択のACFフィールド(ラジオボタン等)は、同様に register_meta で登録し、Snow Monkey Search で問題なく絞り込みできています。)

    3:Snow Monkey Search 「カスタムフィールド検索」ブロック(Language 用)の設定:

    キー: Language
    フロー: 「チェックボックス」
    選択肢: “english”: “英語”, “chinese”: “中国語” のように設定。
    タイプ: 「CHAR (文字列)」
    比較: 「LIKE」

    4:Query Monitor で確認したSQLの問題点:
    上記のSnow Monkey Searchの設定で検索を実行したところ、メインクエリの meta_query 部分で、Language フィールドに対するSQL条件が以下のようになっていることを確認しました。
    (例:フロントで「英語」と「中国語」をチェックして検索した場合)

    AND ( ( wp_postmeta.meta_key = 'Language' ) AND ( wp_postmeta.meta_value IN ('english','chinese') ) )
    

    このSQLでは、meta_value が単純な文字列 ‘english’ または ‘chinese’ と完全一致するものを探しているため、シリアライズされた配列文字列(例: a:2:{...s:7:"english";...s:7:"chinese";...}) にはヒットせず、検索結果が0件になってしまいます。

    実現したいこと:

    ACFの複数選択チェックボックスで選択された複数の言語(例:英語と中国語)に対応しているレストランを正しく絞り込みたいです。
    理想的には、SQLが wp_postmeta.meta_value LIKE '%"english"%' AND wp_postmeta.meta_value LIKE '%"chinese"%' (AND検索の場合) や、あるいは (wp_postmeta.meta_value LIKE '%"english"%' OR wp_postmeta.meta_value LIKE '%"chinese"%') (OR検索の場合) のように、シリアライズされた配列文字列の中から選択された値の存在を LIKE で確認する形になることです。

    ご教示いただきたい点:

    1:Snow Monkey Search の「カスタムフィールド検索」ブロックは、ACFの複数選択チェックボックス(値がシリアライズされた配列としてDBに保存される)の値を、上記のような LIKE 検索で正しく絞り込むための標準的な設定方法(「タイプ」や「比較」の適切な組み合わせなど)はございますでしょうか。

    2:もし標準機能での対応が難しい場合、pre_get_posts アクションフックなどを利用して meta_query をカスタマイズする方法について、Snow Monkey Search と連携する上での推奨されるアプローチや注意点(例えば、Snow Monkey Search が生成する meta_query のどの部分を、どのように変更すればこの LIKE 検索を実現できるかなど)がございましたら、ヒントだけでもご教示いただけますと大変助かります。

    長文となり恐縮ですが、何卒よろしくお願いいたします。

    0
    Who liked: No user
    アバター画像キタジマ タカシ
    参加者
    2587

    んむー、なんでしょうね。

    管理画面で選択肢に表示するキーのリストは下記の部分で取得しています。

    具体的には、$wp_meta_keys というグローバル変数を参照して返却している感じです。register_meta() で登録したメタキーは $wp_meta_keys に追加されるので参照できるはずですが、ACF が内部的に register_meta() しているのかどうかは気になりますね。ACF に詳しくないためそのあたりは僕はわからないです…。

    試しに ACF を使わずに、accessregister_meta() で追加したらどうなるか確認してみると良いかもです。

    0
    Who liked: No user
    アバター画像mtmekj
    参加者
    8

    iPhoneの仕様なんですね、少々やっかいですね 汗

    教えていただいたコードをプラグイン code snipet経由でfunction.phpとして記入したところ、
    iPhone実機サイトにて、当日の日付が表示されました!
    ありがとうございます。
    空白よりは良いかなと思いました。

    PC版と全く同じように、デフォルトで「年/月/日 カレンダーアイコン」はやはりSnowmonkey forms 日付ブロックでは実装できないんですね。
    承知いたしました。
    なんとかノーコードで「年/月/日 カレンダーアイコン」が、
    スマホ実機サイトにてデフォルト表示されるようにしていただけないでしょうか?(要望)

    ちなみにですが、プラグインWP DatepickerでなんとかiPhone SPサイトに実装できました。

    カレンダーアイコンの右横に余白をどうやっても実装できないのが心残りですが、
    とりあえずこれで自分の中でOKとします。

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

    0
    Who liked: No user
    アバター画像キタジマ タカシ
    参加者
    2587

    iPhone でデフォルトが空欄になるのは仕様みたいです。

    初期値を設定すれば、その初期値がデフォルトで表示されるようにはできます。
    例えば、初期値として 2020-01-01 と入力すれば、空欄ではなく 2020-01-01 が表示されます。

    決め打ちではなくて動的に、例えばフォームを表示した時点の日付を表示したい場合はコードを書く必要があります。

    add_filter(
    	'snow_monkey_forms/control/attributes',
    	function( $attributes ) {
    		if ( isset( $attributes['name'] ) && '任意の name 属性値' === $attributes['name'] ) {
    			$attributes['value'] = wp_date( 'Y-m-d' );
    		}
    		return $attributes;
    	}
    );
    0
    Who liked: No user
    アバター画像mtmekj
    参加者
    8

    ご丁寧にご回答いただき誠にありがとうございます!

    私の言葉足らずで大変申し訳ございません。
    日付ブロックが閲覧できない=日付ブロックが(キタジマ様の添付画像のように)空白になっております。

    PC版では【年/月/日 📅(カレンダーアイコン)】と表示されております。
    しかし、iPhone実機では【     】と空白で表示されております。
    こちらを空白ではなく、PC版と全く同じくデフォルトで【年/月/日 📅(カレンダーアイコン)】とノーコードで表示できないかな?と思いました。

    iPhoneやAndroidの仕様で絶対に空白になってしまうので無理です!というなら、諦めてプラグインWP Datepicker実装で完結しようかなと思います。

    ご対応は可能でしょうか?
    よろしくお願いいたします。

    0
    Who liked: No user
    アバター画像キタジマ タカシ
    参加者
    2587

    2つ目のURLがリンク切れで閲覧できません 汗

    すみません、貼り直しました。

    いえ、それもそうなのですが、シンプルにSM formの日付ブロックを設置すると、スマホブラウザで閲覧できないのです。

    日付ブロックを入れたフォームをつくり、iPhone (iOS 18.4)の Safari と Chrome で閲覧してみました。テキストフィールドが表示され(初期値未入力のため空欄で表示されています)、クリックするとカレンダー UI がポップアップ表示されました。

    別トピックでも書きましたが、これは HTML 標準の日付フィールドであり、もしこれが表示されないのであれば、Snow Monkey Forms の不具合ではなく、HTML やブラウザの仕様、あるいは他の独自に追加している JS や CSS の干渉の可能性が高いと思います。

    別トピックで書いたことの繰り返しになりますが、MW WP Form のときは入力しやすいようにと、jQuery のライブラリなんかを使って独自の実装をしていたのですが、ライブラリはメンテナンスされなくなることもあるし、不具合があったときに自分では対応できなかったりして、メンテナンスがかなりストレスになっていたので、Snow Monkey Forms では絶対に標準のものを使うと決めて実装しています。なので Snow Monkey Forms の日付ブロックが HTML 標準ではないリッチなものにすることはありません。

    ググったら独自にリッチな入力 UI になるようにカスタマイズしている事例がいくつか確認できました。必要に応じて、それを参考に実装してみてください。

    なお、これも繰り返しになりますが、jQuery を使っていて、かつ古い記事だと on() を使っていない場合があり、その場合は現行の Snow Monkey Forms では反映されない可能性が高いです。その点は考慮して独自に調整する必要があると思います。

    0
    Who liked: No user
    アバター画像キタジマ タカシ
    参加者
    2587

    WP Datepicker を使ったことがないのでわかりませんが、iPhone は Mac に繋げば Safari のインスペクターで状況が見れるので、それでエラーがでていないか、Datepicker の script が読み込まれているか等を確認してみると良いかもしれません。

    あと、PC では表示されているということなので関係ないかもですが、Snow Monkey Forms は非同期でフォームを読み込むので、jQuery で DOM をカスタマイズする場合は on() で処理されるものでないとちゃんと動かないです(多分)。自分で jQuery で書く場合はその点注意が必要です。

    0
    Who liked: No user
    アバター画像キタジマ タカシ
    参加者
    2587

    Snow Monkey Forms の日付ブロックは、HTML 標準の <input type="date" /> を使っています。

    MW WP Form のときは入力しやすいようにと、jQuery のライブラリなんかを使って独自の実装をしていたのですが、ライブラリはメンテナンスされなくなることもあるし、不具合があったときに自分では対応できなかったりして、メンテナンスがかなりストレスになっていたので、Snow Monkey Forms では絶対に標準のものを使うと決めて実装しました。

    そういう理由で、日付ブロックを標準以外のものに変えることは考えていません。日付ブロックを使わないのであれば、普通のテキストフィールドを入れて class を付与し、独自にカレンダー的なものを実装するとか、そういう感じで実装する形になるのかなと思います。

    0
    Who liked: No user
    アバター画像キタジマ タカシ
    参加者
    2587

    snow_monkey_template_part_render_footer フィルターフックでフッターの HTML をカスタマイズできます。

    同期パターンの場合は apply_filters( 'the_content', '<!-- wp:block {"ref":19703} /-->' ) という形でテンプレートから呼び出せます。

    これを組み合わせて、下記のようなコードでフッターの上部に同期パターンを呼び出せるかなと。My Snow Monkey プラグインにコードを追加して試してみてください!

    ref のところの番号はご自身の環境にあわせて変えてください。僕は記事の編集画面で表示したいパターンを配置して、コードエディターに切り替えて確認しました。

    add_filter(
    	'snow_monkey_template_part_render_footer',
    	function( $html ) {
    		return apply_filters( 'the_content', '<!-- wp:block {"ref":19703} /-->' ) . $html;
    	}
    );
    1
    Who liked:
    #145206
    吉田美香
    参加者
    2

    ネットワークタブを確認していると、

    /wp-admin/post.php?post=15&action=edit で net::ERR_HTTP2_PROTOCOL_ERROR 200 (OK) というエラーが確認できました。

    また、リロードしてエラーが出なかった場合も、ページの HTML のロードが途中で止まっていて、読み込み中のままになるようです(ブラウザのネットワークタブからページの HTML のプレビューをみると、途中までしか読み込まれていませんでした)。

    サーバー会社にお問い合わせしたところ、いただいた内容から確認・修正していただき、白くなる問題が解決いたしました!
    以下サーバー会社からいただいたメッセージになります。

    Apacheのサービス制限を増やしました。WordPressエディタページのSubstituteMaxLineLength 10mの一般的な修正です。

    1人では解決が難しかった問題でしたので、本当に助かりました!
    長期に渡りご対応いただきありがとうございました!

    0
    Who liked: No user
    #145201
    アバター画像キタジマ タカシ
    参加者
    2587

    ネットワークタブを確認していると、

    /wp-admin/post.php?post=15&action=editnet::ERR_HTTP2_PROTOCOL_ERROR 200 (OK) というエラーが確認できました。

    また、リロードしてエラーが出なかった場合も、ページの HTML のロードが途中で止まっていて、読み込み中のままになるようです(ブラウザのネットワークタブからページの HTML のプレビューをみると、途中までしか読み込まれていませんでした)。

    サーバーのサポートの方にこのエラーメッセージと現象についても問い合わせていただけませんか?

    0
    Who liked: No user
    #145198
    吉田美香
    参加者
    2

    お世話になっております。

    つまり、WAF に引っかかった形跡や、メモリー不足が発生した形跡はなかったということですかね?

    ご認識の通り、エラーが発生した形跡は特に見受けられなかったとの回答をいただいております。
    ただし、バックエンド開発者による詳細な検証はプランには含まれておりませんでしたため、その点も併せてご理解いただけますと幸いです。

    あと、真っ白なままになるのはエディターの描画が完了していない(多分)からなので、エディターの js ファイルのリクエストとレスポンスが完了していないのではないかと疑っています。正しくリクエストされていればアクセスログに記録されると思うのですが、そのあたりはどうでしょうか?

    メモリーが大きい環境だと動作したと書かれていたので、memory_limit を上げることが可能であれば試したほうが良いと思います。

    memory_limitについても512MB、1024MBにてあげて確認いたしましたが解決には至りませんでした。

    データについてもご確認いただきありがとうございます。
    また、いただいた検証内容について、再現できる場合とできない場合があることが確認できました。

    おそらくですがテーマの利用有無に関わらずセクションブロックの数が多くなることで事象の再現が可能となるようです。
    また、重いページが多い状態で新しく固定ページを作成し、1つのセクションを保存した後に編集を試みると、同様の事象が再現されることが確認できました。

    この場合だと何の可能性が高いでしょうか。どうぞよろしくお願いします。

    0
    Who liked: No user
15件の結果を表示中 - 16 - 30件目 (全8,974件中)

ドキュメント

Snow Monkey の設定方法やマニュアルを掲載しています。

ドキュメント

フォーラム

Snow Monkey の使い方やカスタマイズについてのご質問・ご要望等はサポートフォーラムで行っています。サポートフォーラムは誰でも閲覧できますが、書き込みできるのは Snow Monkey 購入者のみとなります。

サポートフォーラム

よくあるご質問

Snow Monkey のサービスについて不明な点がある場合は、まずはよくあるご質問をご確認ください。

よくあるご質問

お問い合わせ

よくあるご質問を見ても解決しなかった場合、試用版の申請については問い合わせフォームからお願いいたします。

お問い合わせ

Snow Monkey は Gutenberg ブロックエディターに対応した 100%GPL の WordPress テーマです。拡張性を意識した開発をおこなっており、カスタマイザーとブロックでスピーディーにサイトを立ち上げるだけでなく、CSS やフックを駆使した高度なカスタマイズにも柔軟に対応できます。