web-dev-qa-db-ja.com

カスタム投稿タイプの投稿を1つだけ作成する方法

CPTを1つに制限することは可能ですか?私が達成したいのは、 "Home"というCPTを作成することです。ホームページのあらゆる要素を管理します。ユーザーが[ホームページの管理]リンクをクリックすると、投稿編集画面に直接移動するようにプログラムします。彼らは「すべての投稿」画面をスキップします。誰もがこれも可能だと思いますか?

それとも、誰かがこの目標を完全に異なるものにするという考えを持っていますか?

2
Steve Fischer

この目的のためにテーマオプションページを作成することをお勧めします。

https://wordpress.stackexchange.com/questions/tagged/theme-options

Codexでは add_options_page()

それともテーマ編集ページに入るのが難しいだろうあなたが使いたい特別なポスト編集画面に何かがありますか?

4
Michal Mau

あなたのクライアントが混乱していて、ホームページにページを設定してもそうしないので、これが欲しいのです。

しかし、あなたの解決策はあなたの顔の中で爆発するのを待っているワームの缶なので、代わりに私はずっと良い解決策を持っています!

home.phpテンプレートを使う

WordPressではデフォルトでhome.phpがホームページとして使われています。見つからない場合はfront-page.phpが使用され、見つからない場合はindex.phpが使用されます。

それでhome.phpを作成し、そこにあなたのホームページコードを入れて、そしてそれからWYSIWYGエディタと画像アップローダで様々なコンテンツのための設定ページを追加してください。サイトにログインしている場合は、フロントエンドから設定ページに直接リンクすることもできます。

それでもクライアントが混乱している場合は、画面の手順に従って使い方を説明してください。たぶんあなたのクライアントは混乱しているだけなのでしょう。

これに追加されたボーナスは、リストをクリックして利用可能な単一の投稿を見つけるなどの混乱を招くような手順を残さず、警告と許可拒否メッセージを生成する以外は何もしないボタンです。

1
Tom J Nowell

私は実際にこれと非常によく似たことをしました。私はいくつかの異なることを組み合わせて使用​​しました、そしてそれはすべて私の(簡単に混乱した)クライアントのためにとてもうまくいった。

基本的に、私は "home"というページから始めました。次に、 Advanced Custom Fields を使用して、クライアントに制御できるようにしたいさまざまなフィールドを作成しました - 2つのWYSIWYGフィールド、いくつかのイメージフィールド、いくつかリンクフィールド、あなたはアイデアを得る。それから、そのACFタイプのルールを設定するときに、編集ページのメインの「コンテンツ」領域を隠しました。混乱を避けるために、各コンテンツ領域に明確で簡潔なルールを追加するようにしました。そうすれば、各フィールドで何ができるのか、できなかったのかを正確に知ることができます。

そのため、クライアントがWordPressメニューの[ページの編集]をクリックすると、[ホーム]の[投稿の編集]ページが表示され、コントロールするすべての領域がきれいに配置されます。

それから、適切な場所でフィールド出力を呼び出すようにhome.phpテンプレートを設定します。 ACFメインサイトには、いくつかの素晴らしいチュートリアルとコードスニップがあります。

それは非常に幸せなクライアントを作り、そして私のプレートから将来のイライラするメンテナンスの多くを取りました。

0
SickHippie

スティーブ、私の理解はあなたが欲しいということです:

  1. all Postsサブメニューのないカスタム投稿タイプ
  2. 「投稿のサブメニュー」の下に「ホームページの編集」リンクを表示するだけですか。
  3. そして、あなたはあなたのユーザーがその特定の投稿タイプのためにもっと1つの投稿を追加したくないです。

以下のコードはWordPress管理者を微調整して上記を実行します。

ユーザーはwp_insert_postを使用してカスタム投稿タイプに投稿を追加できます。

<?php
/**
 * Plugin Name: Home Page CPT
 **/

class WPSE_26330_Homepage_CPT {

    function __construct() {

        // add the default homepage on plugin activation
        register_activation_hook( __FILE__, array( &$this, 'add_home_page_post' ) );

        // register the homepage post type
        add_action( 'init', array( &$this, 'register_homepage_cpt' ) );

        // add the menu link
        add_action( 'admin_menu', array( &$this, 'edit_homepage_link' ) );
    }

    function edit_homepage_link() {
        global $submenu, $pagenow;

        // query the homepage posts
        $homepage = new WP_Query( 'post_type=homepage' );

        // if its new post page and we have homepage
        if ( $pagenow == 'post-new.php' && $homepage->have_posts() ) {
            wp_die('You cant add more then one homepage');
        }

        // if we have homepage post, show the edit link else the add homepage link
        if ( $homepage->have_posts() ) {
            $homepage->the_post();
            $link = get_edit_post_link( get_the_ID(), 'return' );
            $title = 'Edit Home Page';
        } else {
            // in case if the user has deleted the default post
            $link = get_bloginfo( 'url' ). '/wp-admin/post-new.php?post_type=homepage';
            $title = 'Add Home Page';
        }
        $submenu['edit.php'] = array( array( $title, 'manage_options', $link ) ) + $submenu['edit.php'];
    }

    function register_homepage_cpt() {
        $args = array( 
            'label' => 'homepage',
            'description' => 'Home Page post type',
            'public' => true,
            'show_in_menu' => false
        );
        register_post_type( 'homepage', $args );
    }

    function add_home_page_post() {
        // on activation first regsiter the post type
        $this->register_homepage_cpt();

        // add the first and only post
        $post_data = array(
            'post_title' => 'Home Page',
            'post_type' => 'homepage',
            'post_statue' => 'publish',
            'post_author' => 1
        );
        wp_insert_post( $post_data );
    }

}

$GLOBALS['wpse_homepage_cpt'] = new WPSE_26330_Homepage_CPT;
?>
0

このプラグインが役に立つかもしれません:

著者のサイト

WordPressプラグイン

0
paulo