PHP和许多其他语言都有一个特殊的结构来组合状态和行为,因为这正是您想要的。该构造称为object.
对象由定义classes. 因此,您需要一个类来记住当前用户数据(状态),并提供您需要的部分(行为)。这可能非常简单。创建一个名为UserData.php
并在注册短代码之前包含它。
文件内容应类似于以下内容:
namespace WPSE;
class UserData
{
private $user, $sql_u, $sql_p, $sql_db, $sql_ip;
public function __construct( $sql_u, $sql_p, $sql_db, $sql_ip )
{
$this->sql_u = $sql_u;
$this->sql_u = $sql_p;
$this->sql_u = $sql_db;
$this->sql_u = $sql_ip;
}
public function fetch( $atts )
{
if ( empty ( $this->user ) {
$this->fetch_user();
}
return $this->user->{$atts[\'text\']};
}
private function fetch_user()
{
$reg = new \\wpdb(
$this->sql_u,
$this->sql_p,
$this->sql_db,
$this->sql_ip
);
$user_id = get_query_var(\'user\');
$this->user = $reg->get_row(
$reg->prepare(
"SELECT * from data_table WHERE url_id=%s",
$user_id
)
);
}
}
然后将短代码注册到名称空间:
include_once (\'UserData.php\');
$user_data = new \\WPSE\\UserData( $sql_u, $sql_p, $sql_db, $sql_ip );
add_shortcode( \'fetch_data\', [ $user_data, \'fetch\' ] );
请注意,这是完全未经测试的。我只是想给你一个关于如何处理这类案件的想法。
另外,欢迎使用WordPress堆栈交换!:)