web-dev-qa-db-ja.com

プラグイン(WooCommerce)がアクティブかどうかを確認するにはどうすればいいですか?

私は私のWooCommerceページの頭と足を修正しようとしています。 WooCommerceのショップとカートをターゲットにすると思われるifステートメントがありますが、そうではありません。 ifステートメントの後でPHPを変更しても何も変わりません。しかし、elseステートメントのPHPを修正すればうまくいきます。

これはうまくいきません。

<?php if (function_exists('woocommerce')): ?>
    <?php if (is_cart() || is_shop()): ?>
        <?php get_template_part('inc/CHANGE'); ?>
    <?php endif ?>
<?php else: ?>
    <?php get_template_part('inc/page-header'); ?>
<?php endif ?>

これはうまくいきます:

<?php if (function_exists('woocommerce')): ?>
    <?php if (is_cart() || is_shop()): ?>
        <?php get_template_part('inc/page-header'); ?>
    <?php endif ?>
<?php else: ?>
    <?php get_template_part('inc/CHANGE'); ?>
<?php endif ?>

WooCommerceという関数は正しく定義されていないかもしれません。これもうまくいくからです。

<?php if (is_cart() || is_shop()): ?>
        <?php get_template_part('inc/header-shop'); ?>
    <?php else: ?>
        <?php get_template_part('inc/page-header'); ?>
    <?php endif ?>
8
Heather

注:新しい、より完全な、より良いおよび多少公式な方法を見てください konturの答えcommented のように、これはクラスチェックでも実行できます。


あなたの編集は私にこのアイデアをもたらしました。実際には"woocommerce"と呼ばれる関数はありません。クラス"WooCommerce"があります。注意すべきことの1つは、プラグインが実際に初期化されるように、チェックが十分に遅れる必要があることです。そうでなければ、明らかに-クラスは存在せず、チェックはfalseを返します。したがって、チェックは次のようになります。

if ( class_exists( 'WooCommerce' ) ) {
  // some code
} else {
  / more code
}

WooCommerceドキュメントページ" WooCommerceのプラグインの作成 "これを見つけました:

/**
 * Check if WooCommerce is active
 **/
if ( 
  in_array( 
    'woocommerce/woocommerce.php', 
    apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) 
  ) 
) {
    // Put your plugin code here
}

個人的には、クラスをチェックするほど信頼性は高くないと思います。明らかな理由から、フォルダ/ファイル名が異なっていても、うまく機能するはずです。さらに、このように実行する場合は、 is_plugin_active() という適切な名前のAPI関数を使用できます。ただし、通常は管理ページでのみ使用できるため、関数が存在するwp-admin/includes/plugin.phpを含めることで使用可能にする必要があります。それを使用すると、チェックは次のようになります。

include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if ( is_plugin_active( 'woocommerce/woocommerce.php' ) ) {
  // some code
} else {
  / more code
}
14
Nicolai

公式のWooCommerceプラグインの多くは、すべてのプラグインがロードされたら、WooCommerceが定義するWC_VERSION定数をチェックすることによってこれを解決します。簡略化されたコード

add_action('plugins_loaded', 'check_for_woocommerce');
function check_for_woocommerce() {
    if (!defined('WC_VERSION')) {
        // no woocommerce :(
    } else {
        var_dump("WooCommerce installed in version", WC_VERSION);
    }
}

追加の利点は、WC_VERSION定数がこれに適しているため、PHPのversion_compare()を使用して、新しいバージョンのWooCommerceがインストールされているかどうかをさらに確認できることです(コードに特定の機能が必要な場合)。

5
kontur

与えられた答えを改善するために、これを使っています:

$all_plugins = apply_filters('active_plugins', get_option('active_plugins'));
if (stripos(implode($all_plugins), 'woocommerce.php')) {
    // Put your plugin code here
}

これにより、2つの問題が回避されます。

  • WooCommerceが標準外のディレクトリにインストールされています - その場合if ( in_array( 'woocommerce/woocommerce.php', apply_filters(...は機能しません。
  • このチェックはWooCommerceがロードされる前に呼び出されます - その場合if ( class_exists( 'WooCommerce' ) ) { .. }は機能しません。
3
Jan Żankowski

WooCommerceがインストールされてアクティブかどうかを確認するために、プラグインをチェックでラップすることができます。

if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
echo 'WooCommerce is active.';
} else {
echo 'WooCommerce is not Active.';
}
0
Prem Tiwari