不要使用全局变量。曾经
你don\'t need 你的目标无处不在。只有在代码运行的地方才需要它改为使用回调对象方法。
此类类的简单示例:
class DealerInfo
{
/**
* @var \\wpdb
*/
private $wpdb;
private $table_name = \'\';
private $results = [];
public function __construct( \\wpdb $wpdb, $table_name )
{
$this->wpdb = $wpdb;
$this->table_name = $table_name;
}
public function entry( $id )
{
if ( empty( $this->results ) )
$this->fetch();
if ( empty( $this->results[ $id ] ) )
return [];
return $this->results[ $id ];
}
private function fetch()
{
$full_table_name = $this->wpdb->prefix . $this->table_name;
$this->results = $this->wpdb->get_results( "SELECT * FROM $full_table_name" );
}
}
现在您可以提前设置该类,例如
wp_loaded
, 并将获取条目详细信息的方法注册为回调…
add_action( \'wp_loaded\', function() {
global $wpdb;
$dealer_info = new DealerInfo( $wpdb, \'dealer_info\' );
add_filter( \'show_dealer_details\', [ $dealer_info, \'entry\' ] );
});
…以及您要使用的位置
echo $dealerInfo[\'field1\'];
, 您现在可以使用:
// 4 is the dealer id in the database
$dealer_details = apply_filters( \'show_dealer_details\', [], 4 );
if ( ! empty( $dealer_details ) )
{
// print the details
}
当然,除了WP-hook-API之外,所有东西都被很好地隔离了。