Bir WordPress Eklentisi wp_rewrite ile yardıma ihtiyacı

1 Cevap php

Tamam, ben benim bir uygulamaya haber tükürmek için kullanıyorum bu kodu var. Bugüne kadar çalışıyordu. Ben simpiler yapmak için aşağıdaki kod tüm mantığı şekilli kesik ettik. Ama "İŞ" Birisi bana nerede çalıştığını bu kodu düzeltmek yardımcı olabilir gerektiğini ve doğru yapılır? Ben birlikte saldırdığını biliyorum, ancak bugüne kadar herhangi bir sorun görünmüyordu. Ben olayın ne olduğunu bilmiyorum, hiçbir şey güncel değil.



 Plugin Name:   MyPlugin Example
 Version:       1.0.1


if ( ! class_exists("MyPlugin") )
{
    class MyPlugin
    {
        var $db_version = "1.0"; //not used yet

        function init()
        {
   //Nothing as of now.
        }
        function activate()
        {
            global $wp_rewrite;
            $this->flush_rewrite_rules();
        }

        function pushoutput( $id )
        {
            $output->out =' The output worked!';
            $this->output( $output );

        }
        function output( $output )
        {
            ob_start();
            ob_end_clean();
            header( 'Cache-Control: no-cache, must-revalidate' );
            header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
            header( 'Content-type: application/json' );

            echo json_encode( $output );
            //Must encode this...
        }

        function flush_rewrite_rules()
        {
            global $wp_rewrite;
            $wp_rewrite->flush_rules();
        }

        function createRewriteRules( $rewrite )
        {
            global $wp_rewrite;
            $new_rules = array( 'MyPlugin/(.+)' => 'index.php?MyPlugin=' . $wp_rewrite->preg_index(1) );
            if ( ! is_array($wp_rewrite->rules) )
            {
                $wp_rewrite->rules = array();
            }
            $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
            return $wp_rewrite;
        }


        function add_query_vars( $qvars )
        {
            $qvars[] = 'MyPlugin';
            return $qvars;
        }
        function template_redirect_intercept()
        {
            global $wp_query;
            if ( $wp_query->get('MyPlugin') )
            {
                $id = $wp_query->query_vars['MyPlugin'];
                $this->pushoutput( $id );


                exit;
            }
        }
    }
}
if ( class_exists("MyPlugin") )
{
    $MyPluginCode = new MyPlugin();
}
if ( isset($MyPluginCode) )
{
    register_activation_hook( __file__, array($MyPluginCode, 'activate') );
    add_action( 'admin-init', array(&$MyPluginCode, 'flush_rewrite_rules') );
    //add_action( 'init', array(&$MyPluginCode, 'init') );
    add_action( 'generate_rewrite_rules', array(&$MyPluginCode, 'createRewriteRules') );

    add_action( 'template_redirect', array(&$MyPluginCode, 'template_redirect_intercept') );
    // add_filter( 'query_vars', array(&$MyPluginCode, 'add_query_vars') );
}

1 Cevap

Ben süreçte kod biraz değişti, ama bu benim için çalıştı:

<?php

/**
* Plugin Name:   MyPlugin Example
* Version:       1.0.1
**/
class MyPlugin {

    function activate() {
        global $wp_rewrite;
        $this->flush_rewrite_rules();
    }

    // Took out the $wp_rewrite->rules replacement so the rewrite rules filter could handle this.
    function create_rewrite_rules($rules) {
        global $wp_rewrite;
        $newRule = array('MyPlugin/(.+)' => 'index.php?MyPlugin='.$wp_rewrite->preg_index(1));
        $newRules = $newRule + $rules;
        return $newRules;
    }

    function add_query_vars($qvars) {
        $qvars[] = 'MyPlugin';
        return $qvars;
    }

    function flush_rewrite_rules() {
        global $wp_rewrite;
        $wp_rewrite->flush_rules();
    }

    function template_redirect_intercept() {
        global $wp_query;
        if ($wp_query->get('MyPlugin')) {
            $this->pushoutput($wp_query->get('MyPlugin'));
            exit;
        }
    }

    function pushoutput($message) {
        $this->output($message);
    }

    function output( $output ) {
        header( 'Cache-Control: no-cache, must-revalidate' );
        header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );

        // Commented to display in browser.
        // header( 'Content-type: application/json' );

        echo json_encode( $output );
    }
}

$MyPluginCode = new MyPlugin();
register_activation_hook( __file__, array($MyPluginCode, 'activate') );

// Using a filter instead of an action to create the rewrite rules.
// Write rules -> Add query vars -> Recalculate rewrite rules
add_filter('rewrite_rules_array', array($MyPluginCode, 'create_rewrite_rules'));
add_filter('query_vars',array($MyPluginCode, 'add_query_vars'));

// Recalculates rewrite rules during admin init to save resourcees.
// Could probably run it once as long as it isn't going to change or check the
// $wp_rewrite rules to see if it's active.
add_filter('admin_init', array($MyPluginCode, 'flush_rewrite_rules'));
add_action( 'template_redirect', array($MyPluginCode, 'template_redirect_intercept') );

Ben önemli parçaları yorumladı, ama ne yaptım use_filter yerine add_action için kanca üzerine taşımak için temelde ettik. Ben de aslında Wordpress kullanılan bu düzene filtreleri taşındı. Anda yapmak için bir şey gibi görünüyordu.

Son olarak, Kalıcı oldukça URL'leri kullanmaya ayarlanmış olduğundan emin olun. Ben Wordpress aksi takdirde ayrıştırmak gerekir herhangi bir yeniden yazma koşullarını görmezden yapar mayın varsayılan olarak ayarlanmış olan bir sorunu vardı. Bazı güzel URL'ler üzerinden değiştirin ve koşullar yenilenir.

Senin için çalıştığını varsa bana bildirin. Umut olur.

Teşekkürler, Joe