web-dev-qa-db-ja.com

CPTアーカイブリストの上に編集可能なテキストを表示する

私は2つのカスタム投稿タイプ(作成者とパートナー)を持っています。私は彼らのアーカイブページをメインナビゲーションに表示し、archive-authors.phpとarchive-partner.phpを使ってそれぞれの中の投稿の表示を少し調整します。

さて、私のクライアントはアーカイブの投稿リストの前にテキストを表示したいと思います。これまでのところ、私はそれを行うために以下の方法を考えることができます:

  1. 投稿タイプの説明としてテキストを保存して表示します。
  2. 別のページを作成し、アーカイブの上にそのIDだけでそのページのカスタムWP_Query()ループをハードコードします。
  3. WP_Query()付きのカスタムループを作成して、各CPTのCPTアーカイブを作成し、静的で編集可能なページで使用できる "Author Archive"および "Partner Archive"テンプレートを設定します。

ただし、これらの解決策はすべて、次の1つ以上の理由から最適とは言えません。

  • 更新するには技術的な知識が必要です(#1、#2)
  • 抽象化されていません(例:ソリューションはアーカイブごとにカスタムコーディングする必要があります)(#2、#3)
  • テキストを更新するには技術的な知識が必要です(#1)
  • 解決策は本質的にテンプレート階層を複製する(#3)。

私はWordPressに優しく、抽象化された、そしてクライアントにとってアップデートしやすいソリューションを探しています。

4
mrwweb

これを達成するための最も簡単な(唯一ではないが)方法の1つは、WPダッシュボードにカスタムオプションパネルを作成することです。これにより、クライアントはテンプレート全体で使用できる情報を作成および更新できます。技術的な知識が不要なファイル.

以下を直接functions.phpファイルに貼り付けるか、config-menu.php(テーマディレクトリ内)に保存してからfunctions.phpファイルに含めることができます。コードは

// create config menu in dashboard
add_action('admin_menu', 'config_menu');

function config_menu() {

    //create a menu in the dashboard
    add_menu_page('Website Custom Settings',
                  'Configure Site', 
                  'administrator',
                  __FILE__,
                  'custom_settings_page',
                  ''.get_bloginfo('template_directory').'/images/your_icon.png', 4);

}

//register settings
add_action( 'admin_init', 'register_settings' );

function register_settings() {

    register_setting(   'my-settings-group', 'partners');
    register_setting(   'my-settings-group', 'authors');
}

function my_settings_page() {
?>

<div class="wrap">

    <form method="post" action="options.php">

    <?php settings_fields('my-settings-group'); ?>

    Enter your Partner description here <br/>
    <textarea  name="partners"><?php echo get_option('partners');?></textarea>

    <br />

    Enter your Author description here <br/>
    <textarea  name="authors"><?php echo get_option('authors');?></textarea>
    <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />

    </form>

</div>

<?php } ?>

その後、各投稿タイプのアーカイブテンプレートファイルで、次の操作を実行できます。

<?php echo wpautop(get_option('partners');?>

and

<?php echo wpautop(get_option('authorss');?>

これにより、クライアントのダッシュボード領域に作成したtextareaフィールドにそれぞれの値(入力されたテキスト)が呼び出されます。

注:上記のコード例は非常に基本的なもので、基本的な例を示すために省略してあります。 CSSのスタイルは提供されていません。しかし、これで仕事は終わります。

2
userabuser

これを行うプラグイン CPT Descriptions があります。

V0.1以降、このプラグインはかなりバグがあります(編集者は説明を保存できません)が、ほとんどのものは GitHubリポジトリ版のプラグイン の面倒を見ています。 1つの既存のfork およびpull要求の中の他のいくつかの変更/改良。うまくいけば、それらはWordPressレポ版のプラグインに統合されるでしょうが、今のところそれらはGitHubで稼働してテストされています。

プラグインを使用するには、単にそれをインストールし、あなたが望む各投稿タイプの "Description"フィールドに記入して、それからアーカイブページに説明を出力してください:

the_post_type_description();

または特定の投稿タイプの説明を取得します。

the_post_type_description('my_post_type');

または次のようにして変数に保存します。

$description = get_post_type_description();
1
mrwweb