Truyền biến PHP vào javascript


13

Có khả năng vượt qua một số biến PHP trong javascript để tôi có thể sử dụng chúng sau này không?

Chỉ trong single.php.
Tôi đã nghe nói wp_enqueue_scriptsnhưng với điều đó là cần thiết để khai báo một đường dẫn đến tệp JS, nhưng tôi không cần nó.


Bạn sẽ làm gì sau đó và bạn muốn sử dụng các biến ở đâu (đối với các biến PHP ở đâu)? Tất nhiên bạn có thể lặp lại / in mã JavaScript thông qua PHP và do đó chèn các giá trị biến PHP. Nhưng đây không phải là điều bạn muốn, tôi đoán ...
tfrommen

Tôi đã tạo một bảng db mới với một số answer.id `từ facebook api. Đây là bảng: action_id, user_id, post_id, fb_id trong đó fb_id là answer.id từ một hành động trên facebook. Sau đó, trong một tệp. Tôi có một nút trong đó nếu tôi nhấn tôi phải xóa hành động fb bằng api: FB.api ('/' + fb.response, 'xóa'); trong đó fb.response nên là fb_id từ bảng.
Sebastian Corneliu Vîrlan

Câu trả lời:


18

Phương pháp thực hành tốt nhất

Có một cái nhìn wp_localize_script, có nghĩa là để làm chính xác điều đó.

Nhưng nó đòi hỏi phải sử dụng trước đówp_enqueue_scripts , do đó bạn sẽ cần phải chuyển JS của mình sang một tệp riêng biệt.
Chắc chắn nó sẽ có giá trị trong vài phút nỗ lực.

function wpse_96370_scripts()
{
    if ( is_single() ) {

        wp_register_script(
           'your_script_handle',
           get_template_directory_uri() . '/js/your-script.js',
           array( /* dependencies*/ ),
           1.0,
           true
       );

       wp_enqueue_script( 'your-script-handle' );

       $script_params = array(
           /* examples */
           'post' => 99,
           'users' => array( 1, 20, 2049 )
       );

       wp_localize_script( 'your-script-handle', 'scriptParams', $script_params );

    }
}
add_action( 'wp_enqueue_scripts', 'wpse_96370_scripts' );

Trong JS, sau đó bạn sẽ có thể sử dụng các tham số đã truyền như vậy:

var posts = scriptParams.post,
    secondUser = scriptParams.users[1]; /* index starts at 0 */

// iterate over users
for ( var i = 0; i < scriptParams.users.length; i++ ) {
    alert( scriptParams.users[i] );
}

[Chỉnh sửa] Tình huống của bạn

Theo nhận xét của bạn

Tôi đã tạo một bảng db mới với một số response.ids từ facebook api. Đây là bảng: action_id, user_id, post_id, fb_id trong đó fb_id là answer.id từ một hành động trên facebook. Sau đó, trong single.php tôi có một nút trong đó nếu tôi nhấn tôi phải xóa hành động fb với api: nên FB.api('/'+fb.response, 'delete');ở đâu từ bảng.fb.responsefb_id

Đặt /js/thư mục chủ đề của bạn sau đây , tạo nó, nếu nó không tồn tại.
Hãy gọi tập tin fb-response.js:

jQuery( '#button_id' ).click( function() {
    FB.api( '/' + fbParams.id, 'delete' );
});

Sau đó đăng ký, enqueue và bản địa hóa như đã thấy ở trên. Giả sử rằng bạn có ID bạn muốn chuyển qua, hãy nói $fb_id:

wp_register_script(
    'fb-response',
     get_template_directory_uri() . '/js/fb-response.js',
     array( 'jquery' ),
     1.0,
     true
);

wp_enqueue_script( 'fb-response' );

wp_localize_script( 'fb-response', 'fbParams', array( 'id' => $fb_id ) );

NB Rõ ràng, ở trên giả định rằng đây là trong một chủ đề. Nếu chúng ta đang nói "plugin", hãy thay đổi vị trí tương ứng.


Tôi là một người mới bắt đầu trong việc này, vì vậy tôi cố gắng thực hiện điều này với wordpress của mình: papermashup.com/jquery-iphone-style-ajax-switch . Như bạn có thể thấy có một tệp js và một vài dòng mã js để đặt vào tệp sử dụng. Hoặc tôi có thể đặt vài dòng mã trên một tệp khác?
Sebastian Corneliu Vîrlan

Vì vậy, đối với bất kỳ hành động javascript nhỏ, tôi nên tạo một tập tin? Nếu bạn sẵn sàng, bạn có thể thêm vào skype: sitherku17 không?
Sebastian Corneliu Vîrlan

Điều đó phụ thuộc vào những gì bạn muốn làm, nơi bạn muốn làm điều đó, v.v. Nói chung: Không, bạn không phải sử dụng tệp JS bên ngoài. Nhưng nếu bạn chọn, bạn có thể đặt bất cứ thứ gì bạn muốn trong một tệp duy nhất . Không cần nhiều tệp nếu bạn có nhiều chức năng, nếu đó là những gì bạn đang hỏi. Tuy nhiên, bạn đã chấp nhận câu trả lời này (IMHO khá phức tạp và trong trường hợp của bạn hơi quá mức ), mà không hiểu đầy đủ, như tôi đã hiểu. Không xúc phạm, @Johannes. ;)
tfrommen

1
Không được thực hiện, @tf. Cho đến nay nó có thể là quá mức biên giới, nhưng đối với một mã của anh ta có thể phát triển và đối với một câu hỏi khác, câu hỏi ban đầu nói về "các biến", ở dạng số nhiều. Câu trả lời của bạn chỉ có giá trị, vì vậy +1 từ tôi.
Julian Pille

2
wp_localize_script là một hàm rất được sử dụng và mạnh mẽ để truyền các giá trị PHP vào một tệp Javascript. Thật đáng ngạc nhiên khi không nhiều người thực sự biết về tính năng mạnh mẽ này trong Wordpress.
Dwayne Charrington

1

Đọc xong bình luận của bạn, tôi hiểu bạn muốn làm một cái gì đó như thế này:

// Do something to get the ID
$facebook_id = ...

// Create and print the button
echo '<input onclick="FB.api('/'+'.$facebook_id.', 'delete')" />';

Không, đây là trang nơi tôi đang làm việc: funny-videoro.com/the-dark-knight-rises-trailer-oficial . Nếu bạn muốn bạn có thể đăng nhập vào trang web. Sau đó, bạn sẽ thấy một nút phong cách jquery ios. Khi tôi trượt sang tắt tôi phải xóa bằng fb api một bài đăng. Id bài viết nằm trong db.
Sebastian Corneliu Vîrlan

Vâng, đó là cơ bản những gì tôi đã viết trong câu trả lời của tôi. Lấy id từ cơ sở dữ liệu và lưu trữ nó trong một biến. Sau đó trực tiếp in nó vào lệnh gọi hàm JavaScript một dòng của bạn. Các <input ... />và chức năng của nó là chỉ chứng minh mục đích. Theo như tôi hiểu, có tất cả mọi thứ nói những gì bạn cần. Nếu không, hãy cố gắng giải thích thêm, nhưng trong câu hỏi của bạn, không phải trong ý kiến.
tfrommen

Tôi không muốn sử dụng mã php và js trong cùng một dòng, trong wordpress là một số chức năng tự động ...
Sebastian Corneliu Vîrlan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.