একটি টেম্পলেট ভিতরে প্লাগইন ক্লাস ব্যবহার


9

আমি কোনও বন্ধুর কাছে একটি আমন্ত্রণ প্রেরণের জন্য একটি প্লাগইন লিখছি যা কোনও লিঙ্ক ক্লিক করা হলে একটি ফর্ম খুলবে। @ টোসচো দ্বারা রিপোর্ট ব্রোকন ভিডিও প্লাগইনে প্রদত্ত কোড অনুসরণ করে আমি ক্লাসে সমস্ত ক্রিয়াকলাপ সজ্জিত করেছি। সম্পর্কিত কোডটি নীচে রয়েছে:

/*
Plugin Name: Send Invitation
Plugin URI: http://w3boutique.net
Description: Emails a the link of the current page to a friend
Author: Nandakumar Chandrasekhar
Version: 0.1
Author URI: http://w3boutique.net/about-nanda.html
License: GPL2
*/

// include() or require() any necessary files here

// Settings and/or Configuration Details go here
define('SEND_INVITATION_MIN_WORDPRESS_VERSION', '3.1.1');

define('SEND_INVITATION_PLUGIN_URL', plugins_url('', __FILE__));

add_action( 'init', array( 'SendInvitation', 'nc_sendinvitation_init' ) );

class SendInvitation {

    protected $nonce_name = 'nc_sendinvitation';
    protected $post_url = '';

    public static function nc_sendinvitation_init() {
        new self;
    }

    public function __construct() {
        add_action( 'init', array(&$this, 'nc_sendinvitation_head' ));
        add_action( 'init', array(&$this,  'nc_sendinvitation_check_wordpress_version' ));
       add_action( 'init', array(&$this, 'nc_sendinvitation_form_action' ));
       //$this->post_url = $this->nc_sendinvitation_get_post_url();
   }

   public function nc_sendinvitation_head() {
       wp_enqueue_script( 'jquery' );
       wp_enqueue_script( 'send_invitation_js',
        plugins_url( 'js/send-invitation.js', __FILE__ ),
        array( 'jquery' ) );

       wp_enqueue_style( 'send_invitation_css',
        plugins_url( 'css/send-invitation.css', __FILE__ ) );
   }

   public function nc_sendinvitation_check_wordpress_version() {
       global $wp_version;

       $exit_msg = 'Send Invitation requires version '
    . SEND_INVITATION_MIN_WORDPRESS_VERSION
    . 'or newer <a href="http://codex.wordpress.org/Upgrading_WordPress">Please
update!</a>';

       if ( version_compare( $wp_version, SEND_INVITATION_MIN_WORDPRESS_VERSION, '<') )
       {
            exit( $exit_msg );
       }
   }

   public function nc_sendinvitation_form_action() {

        $action = '';
        if ( $_SERVER['REQUEST_METHOD'] != 'POST' )
        {
             $action = $this->nc_sendinvitation_get_form();
        }
        else if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
            $action = $this->nc_sendinvitation_handle_submit();
        }
        return $action;
   }

   public function nc_sendinvitation_get_form() {
       // Start the output buffer, prevents content being output directly into
       // script, instead it is stored in a buffer which can then be flushed
       // to allow the include file to be stored in a variable
       // See http://www.codingforums.com/showthread.php?t=124537
       ob_start();
       include('send-invitation-form.php');
       $send_invitation_link = ob_get_clean();

       return $send_invitation_link;
   }

   public function nc_sendinvitation_handle_submit() {
         if ( isset( $_POST['form_type'] ) && ( $_POST['form_type'] == 'nc_sendinvitation' ) ) {
            $to = 'navanitachora@gamil.com';
            $subject = 'Invitation to SwanLotus';
            $message = 'Navanitachora invites you to take a look at this link';
            wp_mail($to, $subject, $message);
            $result = 'Email was sent successfully';
    }
    else {
        $result = $this->nc_sendinvitation_get_form();
    }
    return $result;
}

public function nc_sendinvitation_get_post_url() {
    global $post;
    $blog_id = get_option('page_for_posts');
    $post_id = '';
    if (is_home($blog_id)) {
        $post_id = $blog_id;
    } else {
        $post_id = $post->ID;
    }

    return get_permalink($post_id);
}
}
/* End of File */
?>

আমার টেমপ্লেটে এই শ্রেণিটি কীভাবে ব্যবহার করতে হবে সে সম্পর্কে আমি ক্ষতিতে রয়েছি যাতে আমি ফর্মটি প্রদর্শন করতে পারি। আমি জানি যে আমার ক্লাসটি ইনস্ট্যান্ট করতে হবে তবে আমি কোডটি কোথায় রাখব এবং কীভাবে অবজেক্টটি অ্যাক্সেস করব সে বিষয়ে আমি নিশ্চিত নই যাতে আমি এটি আমার টেম্পলেটে ব্যবহার করতে পারি। আমি ওওপি সম্পর্কে জ্ঞান রাখি তবে এর আগে এ প্রসঙ্গে এটি ব্যবহার করি নি এবং ধাপে ধাপে নির্দেশের কিছুটা প্রয়োজন।

অনেক ধন্যবাদ.

উত্তর:


9

বিষয়টিকে না জেনে আপনার ক্লাসটি ব্যবহার করার সর্বোত্তম উপায় হ'ল একটি ক্রিয়া । উপস্থাপনের জন্য থিম ফাইলগুলি লোড হওয়ার আগে আপনি ক্রিয়াটি নিবন্ধ করুন, ওয়ার্ডপ্রেস বাকী অংশগুলি পরিচালনা করবে।

কোডের উদাহরণ:

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: Plugin Action Demo
 */
add_action( 'init', array ( 'Plugin_Action_Demo', 'init' ) );

class Plugin_Action_Demo
{
    /**
     * Creates a new instance.
     *
     * @wp-hook init
     * @see    __construct()
     * @return void
     */
    public static function init()
    {
        new self;
    }

    /**
     * Register the action. May do more magic things.
     */
    public function __construct()
    {
        add_action( 'plugin_action_demo', array ( $this, 'print_foo' ), 10, 1 );
    }

    /**
     * Prints 'foo' multiple $times.
     *
     * Usage:
     *    <code>do_action( 'plugin_action_demo', 50 );</code>
     *
     * @wp-hook plugin_action_demo
     * @param int $times
     * @return void
     */
    public function print_foo( $times = 1 )
    {
        print str_repeat( ' foo ', (int) $times );
    }
}

এখন আপনি do_action( 'plugin_action_demo', 50 );আপনার থিম বা অন্য কোনও প্লাগইনে কোথাও কল করতে পারেন এবং আপনাকে আর ক্লাসের অভ্যন্তরীণ কাজগুলি সম্পর্কে চিন্তা করতে হবে না।

আপনি যদি প্লাগইনটি নিষ্ক্রিয় করেন তবে আপনি নিরাপদ: ওয়ার্ডপ্রেস কেবল অজানা ক্রিয়াগুলি উপেক্ষা করে এবং এতে do_action()কোনও ক্ষতি হবে না। এছাড়াও, অন্যান্য প্লাগইনগুলি ক্রিয়াটি সরাতে বা প্রতিস্থাপন করতে সক্ষম, তাই আপনি এটির সাথে একটি দুর্দান্ত মিনি এপিআই তৈরি করেছেন add_action()

আপনি একটি সিঙ্গলটনও তৈরি করতে পারেন:

<?php # -*- coding: utf-8 -*-
/**
 * Plugin Name: Plugin Singleton Demo
 */
class Plugin_Singleton_Demo
{
    protected static $instance = NULL;

    /**
     * Creates a new instance if there isn't one.
     *
     * @wp-hook init
     * @return object
     */
    public static function get_instance()
    {

        NULL === self::$instance and self::$instance = new self;
        return self::$instance;
    }

    /**
     * Not accessible from the outside.
     */
    protected function __construct() {}

    /**
     * Prints 'foo' multiple $times.
     *
     * @param int $times
     * @return void
     */
    public function print_foo( $times = 1 )
    {
        echo str_repeat( ' foo ', (int) $times );
    }
}

এখন print_foo()প্রতি প্রবেশযোগ্য:

Plugin_Singleton_Demo::get_instance()->print_foo();

আমি সিঙ্গলটন প্যাটার্নের প্রস্তাব দিই না। এর কিছু গুরুতর ত্রুটি রয়েছে


1
কৌতূহল আউট, এর উদ্দেশ্য কি plugin_action_demoমধ্যে add_action()? কীভাবে do_action( 'print_foo', 50 );জানতে পারে যে ক্রিয়াটি plugin_action_demoনাকি নামটি অপ্রাসঙ্গিক?
জেরেড

ঠিক আছে, কিছুটা বিভ্রান্ত ছিল। :) যে পরিষ্কার করার জন্য ধন্যবাদ.
জেরেড

রেকর্ডের জন্য: declare()পিএইচপি 5.3+ প্রয়োজন :)
কায়সার

ধন্যবাদ যে কাজ করে কিছু বৈধতা যুক্ত করতে হবে এবং আমার করা উচিত। ধন্যবাদ @ টোসচো আপনি আমাকে অনেক কিছু শিখিয়েছেন। :-)
নাভানিটাচোড়া

@ টস্কো আপনার উত্তরটি ওয়ার্ডপ্রেস প্লাগইনগুলির জন্য সিলেটলেট সম্পর্কিত নিবন্ধগুলি সন্ধান করে খুঁজে পেয়েছে। আপনি বোঝেন যে আপনি কি করছেন আপনার প্রস্তাবিত উত্তর একটি একক ব্যবহার করে, আপনি শুধু এটা প্রয়োগ না? কোন থিম কল কল্পনা করুন new Plugin_Action_Demo?? যে কেউ ব্যবহার করছেন do_action('plugin_action_demo')তার কাছে দুটি (২) কল কল করতে পারে Plugin_Action_Demo->print_foo(), আপনি যা চান তা নয়। সিঙ্গলটনের উপর ক্রোধটি উপেক্ষা করে উপযুক্ত ব্যবহারের ক্ষেত্রে রয়েছে। একটি এফওয়াইআই হিসাবে @ ইরিকম্যান এবং আমি এখন ব্লগিং করছি ওয়ার্ডপ্রেস প্লাগইন নেমস্পেসিংয়ের জন্য সিলেটলেটসের পক্ষে, তিনি eamann.com এ এবং আমাকে हार्डকিউপি.কম.
মাইকচিন্কেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.