ساخت فرم کار های روزانه برای ورد پرس

ساخت فرم کار های روزانه برای ورد پرس

اگر قبل از این شما پلاگینی برای ورد پرس ننوشته باشید باید مطالب زیر را بدانید:

برای مشاهده لینک وارد شود

پلاگین های فایل های PHP درداخل پوشه  /wp-content/plugins قرار دارند.

پلاگین ها می توانند به صورت یک فایل PHP تنها با یک نام منحصر به فرد،یا یک پوشه با فایل مورد نظر در داخل آن،همراه با فایل های اضافی و سورس کد آن باشد.

پلاگین ها توسط توضیحاتی در بالای کد اصلیPHP اورده میشوند،شما از این بخش برای توضیح کلی کد استفاده می کنید.

برای شوع کار ابتدا یک نسخه از وردپرس را نصب کرده و یک فایل PHP جدید در داخل پوشه  /wp-content/plugins ایجاد کنید.

سپس کامنتهاییکه در کد زیر میبینید اضافه کرده و از طریق adminPanel  پلاگین را فعال کنید.

اگر شما فقط میخواهید از این پلاگین استفاده کنید کافی است که فایل زیپ را دانلود کرده و از adminPanel نصب کنید.  (choose Plugins->Upload).

این فایل پلاگین اصلی است:

tz-todoapp.php

define('TZ_TODO_FILE', __FILE__);
define('TZ_TODO_PATH', plugin_dir_path(__FILE__));

require TZ_TODO_PATH.'includes/tzTodo.php';

new tzTodo();

ما دو ثابت تعریف میکنیم که بعدا در فرخوانی بعضی از کلاس ها استفاده خواهیم کرد.

todo-app-wordpress

کلاس tzToDo

این کلاس تمام تابع های مورد نیاز این پلاگین را نگه میدارد.در تابع construct ما Ajax و متغییر های ثابت را مقدار دهی میکنیم.

includes/tzTodo.php

class tzTodo {

    public function __construct(){

        add_action( 'init', array($this,'init'));

        // These hooks will handle AJAX interactions. We need to handle
        // ajax requests from both logged in users and anonymous ones:

        add_action('wp_ajax_nopriv_tz_ajax', array($this,'ajax'));
        add_action('wp_ajax_tz_ajax', array($this,'ajax'));

        // Functions for presenting custom columns on
        // the custom post view for the todo items

        add_filter( "manage_tz_todo_posts_columns", array($this, 'change_columns'));

        // The two last optional arguments to this function are the
        // priority (10) and number of arguments that the function expects (2):

        add_action( "manage_posts_custom_column", array($this, "custom_columns") , 10, 2 );
    }

    public function init(){

        // When a URL like /todo is requested from the,
        // blog we will directly include the index.php
        // file of the application and exit 

        if( preg_match('/\/todo\/?$/',$_SERVER['REQUEST_URI'])){
            $base_url = plugins_url( 'app/' , TZ_TODO_FILE);
            require TZ_TODO_PATH.'/app/index.php';
            exit;
        }

        $this->add_post_type();
    }

    // This method is called when an
    // AJAX request is made to the plugin

    public function ajax(){
        $id = -1;
        $data = '';
        $verb = '';

        $response = array();

        if(isset($_POST['verb'])){
            $verb = $_POST['verb'];
        }

        if(isset($_POST['id'])){
            $id = (int)$_POST['id'];
        }

        if(isset($_POST['data'])){
            $data = wp_strip_all_tags($_POST['data']);
        }

        $post = null;

        if($id != -1){
            $post = get_post($id);

            // Make sure that the passed id actually
            // belongs to a post of the tz_todo type

            if($post && $post->post_type != 'tz_todo'){
                exit;
            }
        }

        switch($verb){
            case 'save':

                $todo_item = array(
                    'post_title' => $data,
                    'post_content' => '',
                    'post_status' => 'publish',
                    'post_type' => 'tz_todo',
                );

                if($post){

                    // Adding an id to the array will cause
                    // the post with that id to be edited
                    // instead of a new entry to be created.

                    $todo_item['ID'] = $post->ID;
                }

                $response['id'] = wp_insert_post($todo_item);
            break;

            case 'check':

                if($post){
                    update_post_meta($post->ID, 'status', 'Completed');
                }

            break;

            case 'uncheck':

                if($post){
                    delete_post_meta($post->ID, 'status');
                }

            break;

            case 'delete':
                if($post){
                    wp_delete_post($post->ID);
                }
            break;
        }

        // Print the response as json and exit

        header("Content-type: application/json");

        die(json_encode($response));

    }

    private function add_post_type(){

        // The register_post_type function
        // will make a new Todo item entry
        // in the wordpress admin menu

        register_post_type( 'tz_todo',
            array(
                'labels' => array(
                    'name' => __( 'Todo items' ),
                    'singular_name' => __( 'Todo item' )
                ),
                'public' => true,
                'supports' => array('title')	// Only a title is allowed for this type
            )
        );
    }

    public function change_columns($cols){

        // We need to customize the columns
        // shown when viewing the Todo items
        // post type to include a status field

        $cols = array(
            'cb'       => '',
            'title'      => __( 'Task' ),
            'status' => __( 'Status' ),
            'date'     => __( 'Date' ),
        );

        return $cols;
    }

    public function custom_columns( $column, $post_id ) {

        // Add content to the status column

        switch ( $column ) {

            case "status":
                // We are requesting the status meta item

                $status = get_post_meta( $post_id, 'status', true);

                if($status != 'Completed'){
                    $status = 'Not completed';
                }

                echo $status;

                break;
        }
    }

}

اکنون صفحه app/index.php برای مشاهده لیستToDo را مینویسیم.

/app/index.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Todo App Powered By WordPress | Tutorialzine Demo</title>

        <!-- This is important! It fixes the paths of the css and js files -->
        <base href="<?php echo $base_url ?>"></base>

        <!-- The stylesheets -->
        <link rel="stylesheet" href="assets/css/styles.css" />

        <script>

        	// This is the URL where we need to make our AJAX calls.
        	// We are making it available to JavaScript as a global variable.

        	var ajaxurl = '<?php echo admin_url('admin-ajax.php')?>';
        </script>
    </head>

    <body>

        <div id="todo">
            <h2>Todo List <a href="#" class="add"
                title="Add new todo item!">✚</a></h2>
            <ul>
                <?php

                    $query = new WP_Query(
                        array( 'post_type'=>'tz_todo', 'order'=>'ASC')
                    );

                    // The Loop
                    while ( $query->have_posts() ) :
                        $query->the_post();
                        $done = get_post_meta(get_the_id(), 'status', true) ==
                            'Completed';
                    ?>

                        <li data-id="<?php the_id()?>"
                            class="<?php echo ($done ? 'done' : '')?>">
                            <input type="checkbox"
                                <?php echo ($done ? 'checked="true"' : '')?> />
                            <input type="text"
                                value="<?php htmlspecialchars(the_title())?>"
                                placeholder="Write your todo here" />
                            <a href="#" class="delete" title="Delete">✖</a>
                        </li>

                    <?php endwhile; ?>
            </ul>
        </div>

        <!-- JavaScript includes.  -->
        <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
        <script src="assets/js/script.js"></script>

    </body>
</html>

و در اخر کد jQuery را مینویسیم.

/app/assets/js/script.js

$(function(){

    var saveTimer;
    var todoHolder = $('#todo');

    // Listen for the input event in the text fields:
    todoHolder.on('input','li input[type=text]', function(e){

        // This callback is run on every key press

        var todo = $(this),
            li = todo.closest('li');

        // We are clearing the save timer, so that
        // sending the AJAX request will only
        // happen once the user has stopped typing

        clearTimeout(saveTimer);

        saveTimer = setTimeout(function(){

            ajaxAction('save', li.data('id'), todo.val()).done(function(r){
                if(r.id != li.data('id')){
                    // The item has been written to the database
                    // for the first time. Update its id.
                    li.data('id', r.id);
                }
            });

        }, ۱۰۰۰);

    });

    // Listen for change events on the checkboxes
    todoHolder.on('change', 'li input[type=checkbox]',function(e){

        var checkbox = $(this),
            li = checkbox.closest('li');

        li.toggleClass('done',checkbox.is(':checked'));

        if(checkbox.is(':checked')){
            ajaxAction('check', li.data('id'));
        }
        else{
            ajaxAction('uncheck', li.data('id'));
        }

    });

    // Listen for clicks on the delete link
    todoHolder.on('click', 'li .delete',function(e){

        e.preventDefault();

        var li = $(this).closest('li');

        li.fadeOut(function(){
            li.remove();
        });

        if(li.data('id') != 0){

            // No need to delete items if they are missing an id.
            // This would mean that the item we are deleting
            // does not exist in the database, so the AJAX
            // request is unnecessary.
            ajaxAction('delete', li.data('id'));
        }

    });

    // Clicks on the add new item button)
    todoHolder.on('click','a.add', function(e){
        e.preventDefault();

        var item = $('<li data-id="0">'+
            '<input type="checkbox" /> <input type="text" val="" placeholder="Write your todo here" />'+
            '<a href="#" class="delete">✖</a>'+
            '</li>');

        todoHolder.find('ul').append(item);

        // We are not running an AJAX request when creating elements.
        // We are only writing them to the database when text is entered.
    });

    // A help function for running AJAX requests
    function ajaxAction(verb, id, data){

        // Notice that we are returning a deferred

        return $.post(ajaxurl, {
            'action': 'tz_ajax',
            'verb':verb,
            'id': id,
            'data': data
        }, 'json');

    }
});
+1
0


هرگونه انتشار مطالب اختصاصي و محصولات اين سايت بجز با درج لينک مستقيم شرعا حرام بوده و پيگرد قانوني دارد.
طبق ماده 12 فصل سوم قانون جرائم رايانه هرگونه کپي برداري ممنوع بوده و پيگرد قانوني دارد. براي اطلاعات بيشتر کليک کنيد.

درباره‌ی مدیر سایت

در اردیبهشت سالی از سال های خدا بدنیا آمدم.درس خواندم و مهندس شدم.ازآنجایی که علاقه شدیدی به برنامه نویسی و ترجمه وآموزش داشتم در راستای اهدافم این وبسایت رو راه اندازی کردم تا دین خود را به جامعه برنامه نویسی ادا کرده باشم.

دیدگاه خود را بنویسید

آدرس پست الکترونیک شما منتشر نخواهد شد.خانه های ضروری نشانه گذاری شده اند. *

*


× 7 = چهارده