3

wordpress でカスタム プラグインを作成していて、初めてショートコードを使用しています。これまでショートコードは機能していましたが、そのショートコードの関数でクエリを実行して、特定の従業員グループ ID からすべての従業員を取得したいと考えています。

   [employee_group_tag group_id=2]

これは私のショートコード機能を持つファイルです:

    <?php
/*
Plugin Name: Employees
Plugin URI: xxx
Description: xxx
Version: 1.0
Author: xxx
Author URI: http://www.blabla.com
*/

   global $wpdb;

   function employee_shortcode_func( $atts ) {
    extract( shortcode_atts( array(
        'group_id' => '0',
    ), $atts ) );

    // Alle werknemers ophalen adhv van group_id
    $sql = 'SELECT * FROM wp_werknemers_employees WHERE employee_employee_group_id = ' . $group_id;
    $results = $wpdb->get_results($sql);

    return 'test';
}
add_shortcode( 'employee_group_tag', 'employee_shortcode_func' );

しかし、これを実行すると、 $wpdb->get_results($sql) でスタックします。これを省略すると、ページが正しく表示されますが、従業員の詳細を入力したい場合、ページの半分しか取得できません。だから「壊れる」

私はやろうとしました(これは他のすべてのファイルで機能します)

  require_once("../../../wp-config.php")

しかし、うまくいきません...

私の「メイン」プラグインファイルにあるために機能していない可能性はありますか? 他のすべてのファイルでは、 require 関数を使用するときに wpdb を使用できるため...

何か案は?

4

1 に答える 1

1

PHPマニュアルから:

ほとんどの場合、すべての PHP 変数のスコープは 1 つだけです。この単一のスコープは、含まれているファイルと必要なファイルにもまたがっています。例えば:

$a = 1;
include 'b.inc';

ここで、含まれているスクリプト$a内で変数を使用できます。b.incただし、ユーザー定義関数内では、ローカル関数スコープが導入されています。関数内で使用される変数は、デフォルトでローカル関数スコープに制限されます。例えば:

$a = 1; /* global scope */ 

function test()
{ 
    echo $a; /* reference to local scope variable */ 
} 

test();

$a関数のスコープ内で定義されていないため、最後の例は機能しません。

あなたの場合と同じように、それが機能するには、次を使用する必要があります。

function employee_shortcode_func( $atts ) {
    global $wpdb;
    // etc
}
于 2013-07-08T13:29:41.210 に答える