Snow Monkey Blocksのカスタムフィールドブロックに日付の表示形式を指定する機能が欲しい

2
Who liked:
7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • 投稿者
    投稿
  • #136873
    中野桂輔
    参加者
    14

    Snow Monkey Blocksのカスタムフィールドブロックに日付の表示形式を指定する機能が欲しいです。

    現在(バージョン: 20.4.3)はブロックの設定で「カスタムフィールド名」しか設定項目がなく、登録されている値をそのまま出力するブロックとして作られていると思います。(勘違いでしたら申し訳ありません)

    ですが、日付フィールドを以下のように使用したいケースがあります。
    例えば、建設会社のWebサイトに載せる工事施工実績の竣工年月などです。

    • ページに値を表示する際は「yy年mm月」のように年月のみ表示する
    • 表示順ソート等の内部処理には年月日を用いる

    このような場合、DBには日付データを保存して、表示の際に年月へ変換を行うのが一般的だと思います。

    私のサイトではページのテンプレートを変更して作っているためこの機能はすぐに必要ではありませんが、ブロックのみでも同じように作れればプログラムがわからない方でもページレイアウトが修正できるようになるので、もしあれば将来使いたくなりそうです。

    また、日付以外にも、数値フィールドに金額を入れてコンマ区切りで表示したい場合などもありそうです。

    カスタムフィールドブロックの表示形式の指定機能、ご検討いただければ幸いです。

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

    カスタムフィールドにはどのようなデータでも保存できるので、Snow Monkey Blocks のカスタムフィールドブロックでは表示したいカスタムフィールドの指定だけをして、シンプルにそれを出力する、という仕様にしています。

    確かにフォーマットを選択できる UI があれば便利かなとは思いますが、あらゆるフォーマットを追加し続けないといけなくなりそうなので、どういう UI が適切か(または僕の技術力的に可能なのか)が難しいかなと感じます。

    一応フィルターフックが通るようにはしているので、コードを書けば好きなフォーマットで出力することは可能です。

    add_filter(
    	'snow_monkey_blocks_custom_field_value_カスタムフィールド名',
    	function( $value, $post_id ) {
    		return $value; // ここで好きなフォーマットに変換して返す
    	}
    );
    2
    Who liked:
    #136905
    中野桂輔
    参加者
    14

    返信ありがとうございます。

    確かに汎用的なブロックで対応するのは難しそうですね…。でも、フックを用意していただけていたんですね。

    ローカル環境でフィルターフックを試してみようと思ったのですが、
    以下のコードのfunction( $value, $post_id ){の行でエラーが発生してしまいます。
    カスタムフィールド名の部分を置き換えただけのつもりでしたが、何が原因でしょうか?

    my-snow-monkey.php(一部)

    add_filter(
    'snow_monkey_blocks_custom_field_value_completion',
    function( $value, $post_id ) {
    return $value; // ここで好きなフォーマットに変換して返す
    }
    );

    エラーとスタックトレース

    Fatal error: Uncaught ArgumentCountError: Too few arguments to function {closure}(),
    1 passed in C:\....\app\public\wp-includes\class-wp-hook.php on line 326 and exactly
    2 expected in C:\....\app\public\wp-content\plugins\my-snow-monkey\my-snow-monkey.php:374
    
    Stack trace:
    #0 C:\....\app\public\wp-includes\class-wp-hook.php(326): {closure}('2024-03-04')
    #1 C:\....\app\public\wp-includes\plugin.php(205): WP_Hook->apply_filters('2024-03-04', Array)
    #2 C:\....\app\public\wp-content\plugins\snow-monkey-blocks\dist\blocks\custom-field\view.php(20): apply_filters('snow_monkey_blo...', '2024-03-04', 1153)
    #3 C:\....\app\public\wp-content\plugins\snow-monkey-blocks\App\DynamicBlocks.php(32): include('C:\\Users\\...')
    #4 C:\....\app\public\wp-content\plugins\snow-monkey-blocks\dist\blocks\custom-field\index.php(22): Snow_Monkey\Plugin\Blocks\App\DynamicBlocks::render('custom-field', Array, '', Object(WP_Block))
    #5 C:\....\app\public\wp-includes\class-wp-block.php(258): Snow_Monkey\Plugin\Blocks\Bootstrap->{closure}(Array, '', Object(WP_Block))
    #6 C:\....\app\public\wp-includes\class-wp-block.php(244): WP_Block->render()
    #7 C:\....\app\public\wp-includes\class-wp-block.php(244): WP_Block->render()
    #8 C:\....\app\public\wp-includes\class-wp-block.php(244): WP_Block->render()
    #9 C:\....\app\public\wp-includes\class-wp-block.php(244): WP_Block->render()
    #10 C:\....\app\public\wp-includes\blocks.php(1484): WP_Block->render()
    #11 C:\....\app\public\wp-includes\blocks.php(1522): render_block(Array)
    #12 C:\....\app\public\wp-includes\class-wp-hook.php(324): do_blocks('<!-- wp:snow-mo...') #13 C:\....\app\public\wp-includes\plugin.php(205): WP_Hook->apply_filters('<!-- wp:snow-mo...', Array)
    #14 C:\....\app\public\wp-includes\post-template.php(256): apply_filters('the_content', '<!-- wp:snow-mo...') #15 C:\....\app\public\wp-content\themes\snow-monkey\template-parts\content\entry\content\content.php(17): the_content() #16 C:\....\app\public\wp-includes\template.php(792): require('C:\\Users\\...') #17 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\Contract\Template_Tag.php(246): load_template('C:\\Users\\...', false, Array) #18 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\Template_Part.php(69): Inc2734\WP_View_Controller\Helper::locate_template(Array, true, false, 'template-parts/...', 'works', Array) #19 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\Contract\Template_Tag.php(294): Inc2734\WP_View_Controller\App\Template_Part::render('template-parts/...', 'works', Array) #20 C:\....\app\public\wp-content\themes\snow-monkey\template-parts\content\entry\entry.php(104): Framework\Helper::get_template_part('template-parts/...', 'works') #21 C:\....\app\public\wp-includes\template.php(792): require('C:\\Users\\...') #22 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\Contract\Template_Tag.php(246): load_template('C:\\Users\\...', false, Array) #23 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\Template_Part.php(69): Inc2734\WP_View_Controller\Helper::locate_template(Array, true, false, 'template-parts/...', 'works', Array) #24 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\Contract\Template_Tag.php(294): Inc2734\WP_View_Controller\App\Template_Part::render('template-parts/...', 'works', Array) #25 C:\....\app\public\wp-content\themes\snow-monkey\templates\view\content.php(62): Framework\Helper::get_template_part('template-parts/...', 'works', Array) #26 C:\....\app\public\wp-includes\template.php(792): require('C:\\Users\\...') #27 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\Contract\Template_Tag.php(220): load_template('C:\\Users\\...', false, Array) #28 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\Template_Part.php(69): Inc2734\WP_View_Controller\Helper::locate_template(Array, true, false, 'templates/view/...', 'works', Array) #29 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\Contract\Template_Tag.php(294): Inc2734\WP_View_Controller\App\Template_Part::render('templates/view/...', 'works', Array) #30 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\View.php(147): Inc2734\WP_View_Controller\Helper::get_template_part('templates/view/...', 'works') #31 C:\....\app\public\wp-content\themes\snow-monkey\templates\layout\wrapper\one-column.php(94): Inc2734\WP_View_Controller\App\View->view()
    #32 C:\....\app\public\wp-includes\template.php(792): require('C:\\Users\\...')
    #33 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\Contract\Template_Tag.php(220): load_template('C:\\Users\\...', false, Array)
    #34 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\Template_Part.php(69): Inc2734\WP_View_Controller\Helper::locate_template(Array, true, false, 'templates/layou...', '', Array)
    #35 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\Contract\Template_Tag.php(294): Inc2734\WP_View_Controller\App\Template_Part::render('templates/layou...', '', Array)
    #36 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\Contract\Template_Tag.php(143): Inc2734\WP_View_Controller\Helper::get_template_part('templates/layou...', NULL, Array)
    #37 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\View.php(105): Inc2734\WP_View_Controller\Helper::get_wrapper_template('templates/layou...', Array)
    #38 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\View.php(79): Inc2734\WP_View_Controller\App\View->_render()
    #39 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\App\View.php(61): Inc2734\WP_View_Controller\App\View->_render_loop()
    #40 C:\....\app\public\wp-content\themes\snow-monkey\vendor\inc2734\wp-view-controller\src\Bootstrap.php(45): Inc2734\WP_View_Controller\App\View->render('content', 'works')
    #41 C:\....\app\public\wp-content\themes\snow-monkey\singular.php(25): Inc2734\WP_View_Controller\Bootstrap::render('content', 'works')
    #42 C:\....\app\public\wp-includes\template-loader.php(106): include('C:\\Users\\...')
    #43 C:\....\app\public\wp-blog-header.php(19): require_once('C:\\Users\\...')
    #44 C:\....\app\public\index.php(17): require('C:\\Users\\...')
    #45 {main} thrown in C:\....\app\public\wp-content\plugins\my-snow-monkey\my-snow-monkey.php on line 374

    環境(Localを使用)

    • WordPress のバージョン:6.4.3
    • Snow Monkey のバージョン:25.3.3
      Snow Monkey のバージョン:20.4.3
    • 使用しているプラグイン:結構多いため、必要そうであれば後で貼ります。
    • PHPのバージョン:8.1.23
    • MySQL のバージョン:MariaDB 10.4.32
    0
    Who liked: No user
    #136908
    アバター画像キタジマ タカシ
    参加者
    2421

    あーすみません! フックの構文をミスってました。

    add_filter(
    	'snow_monkey_blocks_custom_field_value_カスタムフィールド名',
    	function( $value, $post_id ) {
    		return $value; // ここで好きなフォーマットに変換して返す
    	},
    	10, // コールバック関数の優先度
    	2   // 受け取る引数の数
    );

    add_filter() で引数を2つ受け取る場合は、ちゃんと2つ受け取ると指示しないとだめなので、上記のようなコードになります。

    2
    Who liked:
    #136916
    中野桂輔
    参加者
    14

    おおー、動きました!変換もできますね。

    WordPressの関数なので、きちんと調べれば自分でも気付けそうなことでした。お手を煩わせてしまい、すみません。勉強になりました。

    教えていただきありがとうございました!

    あともう一つ後学のためにお聞きしたいのですが、ブロックに用意されているフィルターフックの一覧表などはあるのでしょうか。(カスタムフィールドブロックの場合はview.phpにapply_filters関数があったのですが、他のブロックも「apply_filters」で検索してみれば漏れなく探せますか?)

    1
    Who liked:
    #136950
    アバター画像キタジマ タカシ
    参加者
    2421

    ブロックに用意されているフィルターフックの一覧表などはあるのでしょうか。

    ある程度はこの公式サイトのお知らせ記事に書いているとは思いますが、まとまっているものはありません…すみません。
    /wp-content/plugins/snow-monkey-blocks を VS Code 等で開いて、apply_filters で全文検索するのが確実ではあります。

    Snow Monkey テーマのフックについては GitHub の wiki にまとめていますが、こちらももしかしたら漏れがあるかもしれないので、VS Code 等で全文検索するのが確実だとは思います…。

    2
    Who liked:
    #136959
    中野桂輔
    参加者
    14

    あ、いえいえ、謝っていただくことはありません、ドキュメント整備していくのも労力がかかることだと思います。

    テーマのフックもブロックのフックもapply_filtersで全文検索してみれば確実、またテーマのフックについてはGitHubのwikiにまとめてある(漏れはあるかもしれない)、とそれがわかっただけでも私にとっては収穫でした。
    自分が忙しいとお知らせ記事も読めてない時があるので…。

    この度はお忙しい中ご返信くださりありがとうございました。

    1
    Who liked:
7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • トピック「Snow Monkey Blocksのカスタムフィールドブロックに日付の表示形式を指定する機能が欲しい」には新しい返信をつけることはできません。

ドキュメント

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

ドキュメント

フォーラム

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

サポートフォーラム

よくあるご質問

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

よくあるご質問

お問い合わせ

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

お問い合わせ

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