web-dev-qa-db-ja.com

カスタム投稿プラグインを作成することは可能ですか?

Wordpressではカスタムフィールドを使用してカスタム投稿タイプを作成できますが、独自のカスタム投稿タイプを作成して維持するカスタムプラグインを作成することは可能ですか(Wordpressのカスタム投稿以外)。

たとえば、WordPortサイトで、カスタム投稿タイプが "Event"で、 "Event Host"、 "Location"、 "Start Date"、 "End Date"、 "Entry Fee"などのカスタムフィールドがある場合、等.

アイデアは、カスタムプラグインを使用すると、データベースから選択したレコードを詳細に表示して並べ替えることができるようになることです。そのため、たとえば、ユーザーは特定のイベントホストによるイベントのみを表示するように要求したり、特定のしきい値の間に参加料を支払うことができます。

また、終了日が経過した場合(つまりイベントが終了した場合)、すべての検索結果にそのイベントが表示されなくなります。

私はこれのほとんどがWordpressを使っているカスタム投稿タイプとカスタムフィールドを使って可能であるかもしれないことを理解します、しかし私はそれの多くが面倒で制限的で遅いと信じます。データベーススキーマとSQL文を書くことができれば、おそらくもっと多くの力が得られるでしょう。

Wordpressはプラグインを通してそのようなレベルのカスタマイズを可能にしますか?

1

カスタム投稿タイプとWordPressがそのAPIに追加するいくつかの機能のみを使用することが可能です。実際、これがデフォルトです。register_post_type()を呼び出すと、publicのデフォルト値はFALSEです。 UIなし、クエリ変数なし、書き換えルールなし、リストテーブルなし、または一般向けの表示設定はありません。あなたはpublic => FALSEを残して、あなたが必要とする機能だけをオンにして、残りのためにあなたのカスタムハンドラを使うことができます。

例としてプラグイン Log Deprecated Notices を見てください(PHP 4コードスタイルは無視してください)。

    $args = array(
        'labels' => $labels,
        'show_in_menu' => 'tools.php',
        'show_ui' => true,
        'public' => false,
        'capabilities' => array(
            'edit_post'          => 'activate_plugins',
            'edit_posts'         => 'activate_plugins',
            'edit_others_posts'  => 'activate_plugins',
            'publish_posts'      => 'do_not_allow',
            'read_post'          => 'activate_plugins',
            'read_private_posts' => 'do_not_allow',
            'delete_post'        => 'activate_plugins',
        ),
        'rewrite'      => false,
        'query_var'    => false,
    );
    register_post_type( self::pt, $args );

しかし…あなたの投稿タイプが一般公開されていて、他のプラグインからそのコンテンツへのアクセスを妨げている場合、あなたのユーザはいくつかの奇妙な問題にぶつかるかもしれません:

  • 内部検索用のプラグイン(RelevanssiやSearch Everythingなど)は、関連性の重み付けが奇妙に動作する可能性があるため、期待通りに機能しない可能性があります。
  • Sitemap.xmlジェネレータがコンテンツを見つけられない可能性があります。
  • 組み込みの役割と機能が常に機能するとは限りません。

互換性を確認するためには、さらに多くのテストが必要になります。したがって、最も重要な点はそれが可能であるかどうかではなく、結果があなたのプラグインのユーザーのメンタルモデルと一致するかどうかということです。ドキュメンテーションとNice UIだけではそれを修正できません。

私のおすすめは、牛の歩道を舗装することです。フィルタとフックを使用して、可能な限り最後の時点でものを変更します。たとえば、検索結果の場合はpre_get_postsです。

1
fuxia