私は私の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 ?>
注:新しい、より完全な、より良いおよび多少公式な方法を見てください 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
}
公式の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がインストールされているかどうかをさらに確認できることです(コードに特定の機能が必要な場合)。
与えられた答えを改善するために、これを使っています:
$all_plugins = apply_filters('active_plugins', get_option('active_plugins'));
if (stripos(implode($all_plugins), 'woocommerce.php')) {
// Put your plugin code here
}
これにより、2つの問題が回避されます。
if ( in_array( 'woocommerce/woocommerce.php', apply_filters(...
は機能しません。if ( class_exists( 'WooCommerce' ) ) { .. }
は機能しません。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.';
}