13

同じスクリプトを実行してすべてのカスタム投稿タイプ名インスタンスを手動で何度も変更するのは面倒なので、WordPressでの「カスタム投稿タイプ」の作成を簡素化したいと思います。

CPT名を含む変数を作成し、それを必要な場所で使用することで、非常に簡単に実現できます。このように、私がしなければならないのは、スクリプトの最初で変数を宣言することだけで、残りはそれで処理されます。

唯一の問題は、それを機能させるために、スクリプト内のすべての関数の前にCPT名を付ける必要があることです。関数名で変数を使用することは簡単ではなく、PHPでは推奨されないようです。

では、どうすればこれを解決できますか?

明確にするために、以下の例を示します。

$prefix = 'news';

function news_custom_type_init()
{
    global $prefix;

    register_post_type($prefix, array(
    'labels' => array(
          'name' => $prefix,
          'singular_label' => $prefix,
          'add_new' => 'Add',
          ...
        ));

        register_taxonomy_for_object_type( 'category', $prefix );
}
add_action('init', $prefix.'_custom_type_init');

これはほとんど問題なく、関数の前に「news」という単語を書く必要がなく、代わりに「$ prefix」を使用するために関数の名前を動的に変更できれば、標準化できます。

これは良かったかもしれませんが、うまくいきません:

$prefix = 'news';

$functionName= $prefix."_custom_type_init";

function $functionName()
{
    global $prefix;

    register_post_type($prefix, array(
    'labels' => array(
          'name' => $prefix,
          'singular_label' => $prefix,
          'add_new' => 'Add',
          ...
        ));

        register_taxonomy_for_object_type( 'category', $prefix );
}
add_action('init', $prefix.'_custom_type_init');

関数に手動で名前を付ける必要があると、私の試みの本来の目的が少し損なわれます(特に、スクリプトにこのような関数が多数埋め込まれている場合)。

これを行うための最良の方法は何でしょうか?

PS:私はこれについてたくさんググって「スタックオーバーフロー」しましたが、私のニーズに合った実用的なソリューションが見つからず、WordPressエラーメッセージを生成しませんでした。

ありがとうございました。

4

7 に答える 7

14

非常に単純ですが、これはプロジェクトから切り取った同様のフォームです。

$function = $prefix . '_custom_type_init';
if(function_exists($function)) {
  $function();
}
于 2013-02-21T14:39:26.720 に答える
2

編集 (2017-04): 匿名関数 (適切に実装されている) が道です。David Vielhuber による回答を参照してください。

コードを文字列として含むアプローチと同様に、この答えはお勧めできません。これは(とりわけ)連結を招くためです。


使用することをお勧めするかどうか、またはそれが役立つかどうかはわかりませんが、php では「匿名」関数を作成できます。

function generateFunction ($prefix) {
    $funcname = create_function(
        '/* comma separated args here */', 
        '/* insert code as string here, using $prefix as you please */'
    );
    return $funcname;
}

$func= generateFunction ("news_custom_type_init");
$func(); // runs generated function

add_action は、渡した関数を呼び出すだけであると想定しています。

http://php.net/manual/en/function.create-function.php

注: create_function は、必要な名前の関数を返しませんが、関数の内容はユーザーが制御できるため、関数の実際の名前は重要ではありません。

于 2013-02-21T14:52:29.233 に答える