it-swarm.asia

Remove_filter ne zaman çalışmıyor?

remove_filter'nin bazı durumlarda işe yaramadığı ve alternatifler vermemiz gerektiğine dair raporlar var. Bununla birlikte, makale bunun hangi durumlarda gerçekleştiğini tam olarak netleştirmemiştir.

remove_filter, WordPress ve PHP sürümünü ve sonunda sağlanan diğer ilgili bilgileri içeren, kırılacak kod örneklerini arıyorum. Aşağıdaki kod parçasının kullanılabilir bir şablon olması gerektiğini düşünüyorum:

<?php
include('wp-load.php');

function filtertest_function($value)
{
    return 'Filtered';
}

var_dump(apply_filters('filtertest', 'Original value'));
add_filter('filtertest', 'filtertest_function');
var_dump(apply_filters('filtertest', 'Original value'));
remove_filter('filtertest', 'filtertest_function');
var_dump(apply_filters('filtertest', 'Original value'));

Bu beklenen getirecektir:

string(14) "Original value"
string(8) "Filtered"
string(14) "Original value"

Hatanın, filtrenin bir sınıfın parçası olduğu veya çoklu filtrelerin kullanıldığı bazı durumlarda ortaya çıktığını düşünüyorum. Anlıyorum _wp_filter_build_unique_iddahil . Lütfen bu kodda hatanın kaynağının nerede olduğunu belirtin.

3
Jan Fabry

Bu bir şekilde Wordpress geliştirme sorununa bağlı çok özel bir konudur. Makalemi beğendiyseniz, trac biletini takip etmenizi şiddetle tavsiye ederim. Bu, problemlerin ne zaman ortaya çıktığını ve teknik olarak nasıl dolaştırılacağını öğrenmek için yapabileceğim en iyi şey (eğer beğenmiyorsanız remove_filter() kullanmayın - cevap).

Teorik bir bakış açısından ele alın: Sadece kullanılan veri tiplerinin tüm olası değerler üzerinde aynı işlevi sağlamak için kesin olarak ele alınmaması (f (n)! = F (n)). Kısacası: kırık bir tasarım.

Bu her zaman pratikte kırılacağı anlamına mı geliyor? - Yok hayır! Sadece bazen olabilir. Ve sonra remove_filter() işlevine güvenmeniz gerektiğinde kapana kısılırsınız.

Daha iyi bir öneri olabilir: Kancaları sınıf yöntemi olarak kullanan eklentiler geliştirirseniz, eklentinin PHP 5.2/5.3 olan kurulumlarda yürütülmesini sağlayın.

Lütfen teknik görüşmeyi trac biletinde tutun. Ve ciddi bir şekilde ilgileniyorsanız, lütfen mevcut tasarımdaki eksiklikleri gidermenize yardımcı olun.

3
hakre

Denis'in Hakre'nin blogunda yorum yaptığı gibi, bu konunun çok temel bir örneğidir.

function run_me_once() {
    remove_action( 'foobar', 'run_me_once' );
    echo 'test....';
}
add_action( 'foobar', 'run_me_once' );

function run_me2() {
    echo 'test2....';
}
add_action( 'foobar', 'run_me2', 11 );

echo '';
do_action( 'foobar' ); // test....
echo '';
echo '';
do_action( 'foobar' ); // test2....
echo '';

Bu kodu çalıştırmadan önce, kendinize sorun, sonucun ne olacağını beklersiniz. Sonucun ne olması gerektiğine karar verdikten sonra, çalıştırın ve ne olacağını görün.

1
t31os