Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 608 Vote(s) - 3.52 Average
  • 1
  • 2
  • 3
  • 4
  • 5
wp_rewrite in a WordPress Plugin

#1
Ok, I've got this code that I've been using to spit out news to an application of mine. It was working until today. I've cutout all the logic in the following code to make it simpiler. But it should "WORK" Can someone help me fix this code to where it works, and is done right? I know it's hacked together , but it didn't seem to have any problems until today. I have not updated anything, don't know what the deal is.

<pre><code>

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') );
}

</code></pre>
Reply

#2
I changed a little bit of your code in the process, but this worked for me:

<?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') );

I've commented the important parts, but what I did was basically to move your hooks over to `use_filter` rather than `add_action`. I also moved the filters into the order that they are actually used in Wordpress. Seemed the thing to do at the time.

Finally, make sure that your permalinks are set to use pretty URLs. I had an issue where mine were set to default, which makes Wordpress ignore any rewrite conditions that it would otherwise need to parse. Change over to some pretty URLs and your conditions will refresh.

Let me know if that works for you. Hope that helps.

Thanks, Joe
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through