タグ付けされた質問 「oop」


6
テーマでのOOPの使用
本当に必要ないときは、オブジェクト指向コーディングを利用する多くのプラグインがあります。 さらに悪いことは、テーマ開発者が同じことを始めているということです。Suffusionのような商用テーマや無料の人気テーマ、さらに私のお気に入りのテーマ-Hybridは、すべての機能をクラス内に詰め込み、functions.phpで一度インスタンス化し、その機能を手続き的に実行します:) WTF?これを行う意味は何ですか?明らかに、同じテーマの複数のインスタンスを同時に使用することはありません。 プラグインが名前空間(これはばかげている)に対してこれを行うと仮定しますが、テーマの言い訳は何ですか?何か不足していますか? このようなテーマをコーディングする利点は何ですか?
36 themes  php  oop 

5
すべてのプラグインをクラスにカプセル化する必要がありますか?
プラグインを開発するとき、名前空間の競合を避けるために、関数をクラスにグループ化する必要がありますか? クラスを使用すると、PHPのパフォーマンスのオーバーヘッドが発生しますか? パフォーマンスが低下した場合、代わりに関数名をあらかじめ固定する必要がありますか?

2
一部のフックがクラスコンテキスト内で機能しないのはなぜですか?
これにはかなり困惑しています。プラグインクラス内でadd_actionを使用して特定のことを行います。スクリプトやスタイルをhead、wp_ajaxなどに追加します。以下に__constructのアクションを示します。 function __construct(){ add_action('admin_menu', array($this, 'sph_admin_menu')); add_action('sph_header', array($this, 'sph_callback')); add_action('sph_header_items', array($this, 'sph_default_menu'), 1); add_action('sph_header_items', array($this, 'sph_searchform'), 2); add_action('sph_header_items', array($this, 'sph_social'), 3); //Below here they don't work. I have to call these outside of the class (but I need class variables within the functions) add_action('wp_print_styles', array(&$this, 'sph_stylesheets')); add_action('wp_print_scripts', array(&$this, 'sph_scripts')); add_action( …
16 hooks  actions  oop 

1
プラグインフォーム送信のベストプラクティス
私は多くの研究を行ってきましたが、探しているものが見つからないので、正しい方向に向けられることを望んでいます。 フロントエンドからチケットを予約するイベントプラグインを開発しています。これは、他のどのフォーム送信とも変わりませんが、私が混乱しているのは、OOPを介してクラスで記述されたプラグインからそれを処理する方法です。 私が見つけたほとんどの記事は、テンプレートページ内に$ _POST処理を配置すると述べています。理想的には、これをプラグイン内の関数で処理したいと思います。 私が確信していないもう1つのことは、フロントエンドでフォームを送信するとき、それが実際にバックエンドの関数に渡される方法です。テンプレートの詳細からフォーム処理を完全に抽象化したいと考えています。 // events.php if ( ! class_exists( 'Events' ) ) { Class Events { function __construct() { add_action( 'plugins_loaded', array( &$this, 'includes' ), 1 ); } function includes() { require_once( EVENTS_INCLUDES . 'functions.php' ); } } } if ( class_exists( 'Events' ) ) { $events_load = …

2
クラスメソッドをフックコールバックとして登録する
これを正しく行ったかどうかはわかりません。 私が理解したように: クラスfooと静的メソッドバーがある場合array("foo","bar")、関数名として配列を渡すことでコールバックとして登録できます。 $ fooにクラスのインスタンスがあり、メソッドbarを呼び出したい場合、配列を渡します array($foo,'bar')ます。 クラス自体にアクションを登録する必要がある場合、それは動作しarray($this,'bar')ますか?
16 plugins  hooks  oop 


3
クラスのショートコードハンドラーでのPHPエラー
現在、プラグインのショートコードを追加するために次の一般的なフローを使用しています。 class MyPlugin { private $myvar; function baztag_func() { print $this->myvar; } } add_shortcode( 'baztag', array('MyPlugin', 'baztag_func') ); このクラスとそのメソッドが呼び出されると、次のエラーが発生します。 致命的なエラー:...のオブジェクトコンテキストにないときに$ thisを使用する (行番号は、私が印刷した場所です$this->myvar) これはWordpressの終わりの問題ですか、私が間違っていることはありますか?それは本当にシンプルなもののようです。

2
プラグイン内の1つのレベルからplugin_dir_url()を取得します
構造を使用していくつかのプラグインを作成しました: /plugins/myplugin/myplugin.php /plugins/myplugin/class/class-myclass.php オブジェクト指向とコード全体の構造化を活用するために クラスファイル内からベースプラグインのURLを取得する必要がある場合があります...私は次を使用していますが、より良い方法があると確信しています: $this->plugin_location = substr(plugin_dir_url(__FILE__),0, strrpos(plugin_dir_url(__FILE__), "/",-2)) . "/"; もう1つのアイデアは、プラグインのすべての設定を保存する追加のシングルトンクラスを作成し、クラスファイルを介して抽象化レイヤーを追加することでした。 どんな助けも大歓迎です。

1
functions.phpでグローバル関数の代わりにクラスを使用する
私が見た多くのテーマ(TwentyElevenを含む)とオンラインで見つけた例ではfunctions.php、テーマのファイルを作成すると、すべての機能がグローバルスコープで宣言されます。明確にするために、これは一般的な関数ファイルは次のようになります。 function my_theme_do_foo() { // ... } function my_theme_do_bar() { // ... } add_action( 'foo_hook', 'my_theme_do_foo' ); クラスが使用された場合、物事は少し「カプセル化」できるように思えます。 class MyTheme { function do_foo() { // ... } function do_bar() { // ... } } $my_theme = new MyTheme(); add_action( 'foo_hook', array( &$my_theme, 'do_foo' ) ); (私の謙虚な目で)2番目のアプローチの利点: 短い関数名 インスタンス変数へのアクセス(最大の利点IMO) グローバル機能なし 欠点: …

3
別のプラグインで宣言されたクラスの使用方法は?
Wordpress Woocommerceプラグインを開発しています。私のローカル環境では問題なく動作しますが、プラグインを製品環境のレプリカに追加するときに問題があります。私はワードプレスに不慣れで、ウェブ開発にあまり詳しくありません(私はJavaプログラマーです)。 プラグインファイルでは、次のようにWoocommerceプラグインパッケージからクラスをインスタンス化します。 $coupon = new WC_Coupon($some_code); ローカル環境(php 5.4.10、Woocommerce 2.0.13、Wordpress 3.6)では問題ありません。本番環境(php 5.4.10、Woocommerce 1.6.5.2、Wordpress 3.4.2)では、次のエラーが発生します。 Fatal error: Class 'WC_Coupon' not found WC_Couponクラスが定義されているファイルを含めてみましたが、エラーになります Fatal error: Cannot redeclare class WC_Coupon では、別のプラグインで宣言されたクラスを使用する適切な方法は何ですか? 注:現在、アップグレードはオプションではありません。
10 plugins  oop 

1
テンプレート内でプラグインクラスを使用する
リンクをクリックするとフォームを開く友達に招待状を送信するプラグインを書いています。@toschoによるReport Broken Videoプラグインで指定されたコードに従って、すべての関数をクラスにカプセル化しました。関連するコードは次のとおりです。 /* Plugin Name: Send Invitation Plugin URI: http://w3boutique.net Description: Emails a the link of the current page to a friend Author: Nandakumar Chandrasekhar Version: 0.1 Author URI: http://w3boutique.net/about-nanda.html License: GPL2 */ // include() or require() any necessary files here // Settings and/or Configuration Details go here define('SEND_INVITATION_MIN_WORDPRESS_VERSION', …

4
名前空間クラスのファイルに名前を付けるにはどうすればよいですか?
WP Core Handbook> PHPコーディング標準>命名規則では、クラスを使用してファイルに名前を付ける場合、次のことを推奨しています。 クラスファイル名は、クラス名のclass- 前に付加し、クラス名の下線をハイフンに置き換えたものに基づいている必要があります。たとえば、次のようにWP_Errorなります。 class-wp-error.php このセクションの文言から、それは主にコアでの使用を目的としていますが、コーディングスタイルは全体として一般に(そして私の意見では)サードパーティのWPコードに適用されます。 ただし、コアは名前空間をサポートしていないため(PHP 5.2、うーん)、これはそのような場合を考慮していません。 開発者の利便性の観点からそれを実現する実際的な方法は何ですか?オートローダーのサポート? 私は複数の代替方法を見ることができました: 名前空間を完全に無視する ファイル名に名前空間を含める 名前空間をフォルダレベルとして使用する PSRなどの代替命名スキームを完全に使用する

1
WP_Queryの柔軟な抽象化を作成する方法?
私の質問はphpについてですが、プラグインを作成しているため、ワードプレスが関係しています。ケースは私が5つの質問を持っているということです、各質問は6つの選択肢とそれぞれから選択する1つの選択肢を持っています。今、人はそれぞれまたはいくつかから任意の選択肢を選択します。私は、100近くの組み合わせが作成されるように、長くなりすぎてさらに処理が進むため、現在私を怒らせているif条件を作成しました。私はそれを望んでいません、多次元配列の方法があることは知っていますが、ワードプレスのプラグインやphpエキスパートではありません。だから誰かが私のためにそれを並べ替えることができれば。 $qs = $_POST['q1']; $q2 = $_POST['q2']; $q3 = $_POST['q3']; $q4 = $_POST['q4']; $q5 = $_POST['q5']; $q6 = $_POST['q6']; $args = array( 'post_type' => 'product', 'posts_per_page' => -1, 'tax_query' => array( 'relation' => 'AND', array( 'taxonomy' => 'product_cat', 'field' => 'slug', 'terms' => 'fashion-follower' ), // array( // 'taxonomy' => …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.