Ben add_action ile benim işlevine argüman geçebilir?

7 Cevap php

Ben böyle bir şey yapabilir? benim işlevi argüman geçmek? Zaten okudu add_action doc, ancak bunu yapmak için nasıl anlamaya vermedi. Iki argüman geçmek için tam sözdizimi nasıl olacağını. Geçmek nasıl, özellikle text & integer arguments.

function recent_post_by_author($author,$number_of_posts) {
  some commands;
}
add_action('thesis_hook_before_post','recent_post_by_author',10,'author,2')

UPDATE

o do_action ile ama nasıl bir şekilde yapılır gibi geliyor bana? :-)

7 Cevap

Yerine:

add_action('thesis_hook_before_post','recent_post_by_author',10,'author,2')

bu olmalıdır:

add_action('thesis_hook_before_post','recent_post_by_author',10,2)

... 2 argüman sayısı ve 10 işlevi idam edileceği öncelikli olduğu. Siz add_action sizin argümanlar listesi yok. Bu başlangıçta beni takıldı. Sizin işlevi sonra bu gibi görünüyor:

function function_name ( $arg1, $arg2 ) { /* do stuff here */ }

Add_action işlevi de functions.php gitmek ve bunu gibi do_action ile şablon dosyası (örneğin page.php) sizin argümanlar belirtin:

do_action( 'name-of-action', $arg1, $arg2 );

Umarım bu yardımcı olur.

Global değişkenler için gerek yok, burada çözüm değil ->

Build görenek WP functions with classes

Eğer yapıcı ile nesne değişkenlerini ayarlamak ve herhangi bir sınıf yöntemi kullanmak gibi bu sınıflar ile kolaydır. Yani bir örnek için, burada meta kutuları ekleyerek derslerinde işe yarayabilir nasıl ...

// Array to pass to class
$data = array(
    "meta_id" => "görenek_wp_meta",
    "a" => true,
    "b" => true,
    // etc...
);

// Init class
$var = new yourWpClass ($data);

// Class
class yourWpClass {

    // Pass $data var to class
    function __construct($init) {
        $this->box = $init; // Get data in var
        $this->meta_id = $init["meta_id"];
        add_action( 'add_meta_boxes', array(&$this, '_reg_meta') );
    }
    public function _reg_meta() {
        add_meta_box(
            $this->meta_id,
            // etc ....
        );
    }
}

Eğer function functionname($arg) daha sonra global değişkenler önlemek ve sınıf nesnesi herhangi işlevlerine yoluyla size ihtiyacınız olan tüm bilgileri geçmek mümkün olması gerektiği gibi __construct($arg) aynı düşünün.

Bu sayfalar wordpress meta / eklentileri oluştururken referans noktaları iyi gibi görünüyor ->

Ben aynı sorunu koştum ve global değişkenleri kullanarak çözdük. Şöyle:

global $myvar;
$myvar = value;
add_action('hook', 'myfunction');

function myfunction() {
    global $myvar;
}

Biraz özensiz ama çalışır.

Temelde do_action eylem idam nereye yerleştirilir, ve bir isim artı özel parametreleri gerekiyor.

Eğer add_action kullanarak işlevini çağırmak için geldiğimde, ikinci olarak ilk argüman olarak do_action adını (), ve işlev adı geçmektedir. Yani bir şey gibi:

function recent_post_by_author($author,$number_of_posts) { some commands; } add_action('get_the_data','recent_post_by_author',10,'author,2');

// this is where it's executed do_action('get_the_data',$author,$number_of_posts);

Umarım çalışması gerekir.

Evet, yapabilirsiniz (ama bunun için dokümantasyon korkunç).

Buraya bakın: http://frumph.net/wordpress/understanding-do_action-and-add_action/

Ben uzun zaman önce eklentisi wordpress yazdı ettik, ama Wordpress Kodeksine gitti ve bunun mümkün olduğunu düşünüyorum: http://codex.wordpress.org/Function_Reference/add_action

<?php add_action( $tag, $function_to_add, $priority, $accepted_args ); ?> 

Ben bir dizi olarak onları geçmek gerektiğini düşünüyorum. Örnekler "almak argüman" altına bakın.

Bye

Ben aynı sorun var. Ben bir küresel değişkeni ile çözüldü ... Ama bu sadece korkunç kokuyor!