web-dev-qa-db-ja.com

カスタムページテンプレートのカスタムメタボックス

カスタムページテンプレートを作成しました。今私はそれを設定可能にしなければなりません、しかし私は私のテーマで複数のテンプレートを使用しているので私はユーザーがページのためにこのテンプレートを選択したときに設定が利用可能であることを確かめたいです。そうするオプションはありますか?

add_meta_boxは別の$post_typeを受け入れます、それで私が得ることができる最も近いのは私が避けたいと思うすべてのページにメタボックスを追加することです。

1
Dawid Adach
<?
// Check:
// 1. If you are editing post, CPT, or page
// 2. If post type IS NOT SET
if( 'post.php' == basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['QUERY_STRING']) && !isset($_GET['post_type']) ) {

    // get post ID
    $postid = $_GET['post']; 

    // check the template file name
    if ('my_template.php' == get_page_template_slug($postid) ) {
        // add your metabox here
        add_action( 'add_meta_boxes', 'my_metabox' );
    }

}

投稿IDではなく、投稿の種類を確認している理由を思い出しませんが、変更することができます

!isset($_GET['post_type'])

投稿IDが設定されているかどうかを確認します。

isset($_GET['post'])

:メタボックスは、適切なテンプレートを使用して投稿(ページ)を保存した後にのみ利用可能になります。

1
Max Yudin

"ユーザーがこのテンプレートを選択した場合にのみ利用可能です"?これさえ可能かどうか私はよくわかりません(私はそれを疑います)。代わりに、以下の2つの選択肢のいずれかを提案します。

ページテンプレートをページ単位で設定可能にしたい場合は、メタボックスが正しい方向になる可能性があります。たとえば、「注目の画像を背景として使用する」などのオプションを追加できます。

ただし、より一般的な方法でページテンプレートを設定可能にしたい場合は、代わりにテーマオプションを使用できます。これがコーデックスの紹介です: https://codex.wordpress.org/Creating_Options_Pages

0
tillinberlin