ভবিষ্যতের তারিখ পোস্ট প্রকাশিত হিসাবে চিহ্নিত করা হচ্ছে


13

ব্যবহারের ক্ষেত্রে:

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

ফাংশনটি নীচে রয়েছে।

<?php
    function setup_future_hook() {
        // Replace native future_post function with replacement
        remove_action('future_post','show', '_future_post_hook');
        add_action('future_post', 'show', 'publish_future_post_now');
    }

    function publish_future_post_now($id) {
        // Set new post's post_status to "publish" rather than "future."
        wp_publish_post($id);
    }

    add_action('init', 'setup_future_hook');
?>

1
আপনার remove_actionএবং add_actionকলটিতে আপনার কোনও ত্রুটি আছে কি সম্ভব ? আপনার দ্বিতীয় প্যারামিটারটি 'show'তবে আপনি যে ফাংশনটি যোগ করছেন বা মুছে ফেলছেন তা হওয়া উচিত নয়?
জান ফ্যাব্রি

উত্তর:


7

মাইকে এবং জান এর উভয় উত্তরকে একত্রিত করার মাধ্যমে আমি দারুণভাবে উত্তর এনেছি যা কেবল পোস্টের ধরণের প্রশ্নে কাজ করে। আমাদের শোয়ের শর্তসাপেক্ষের দরকার নেই কারণ 'ভবিষ্যত_শো' হুক কেবল পোস্টের ধরণের শো এবং আপডেটগুলি ধরে bs

<?php
    function setup_future_hook() {
        // Replace native future_post function with replacement
        remove_action('future_show','_future_post_hook');
        add_action('future_show','publish_future_post_now');
    }

    function publish_future_post_now($id) {
        wp_publish_post($id);
    }

    add_action('init', 'setup_future_hook');
?>

7

আমি নিশ্চিত বলতে পারে না, যেহেতু আমি সঙ্গে পরীক্ষা আপনার সাইট আছে না কিন্তু আমি বিশ্বাস করি আপনি শুধু সরানোর প্রয়োজন 'show'থেকে remove_action()এবং add_action()কল। wp_publish_post()ফাংশন পোস্ট ধরনের সম্মান সঙ্গে অজ্ঞেয়বাদী হয়, অন্তত এটি কি কোড পড়া থেকে মনে হয়। সুতরাং এটি চেষ্টা করুন:

<?php
    function setup_future_hook() {
        // Replace native future_post function with replacement
        remove_action('future_post', '_future_post_hook');
        add_action('future_post', 'publish_future_post_now');
    }

    function publish_future_post_now($id) {
        // Set new post's post_status to "publish" rather than "future."
        wp_publish_post($id);
    }

    add_action('init', 'setup_future_hook');
?>

অবশ্যই আপনি যদি কেবলমাত্র শোগুলিতে সীমাবদ্ধ করতে চান তবে আপনি এই জাতীয় কিছু করতে চাইতে পারেন (যদিও যুক্তিটি আরও জটিল হবে যদি আপনার অন্যান্য পোস্টের ধরণের সাথেও কাজ করার প্রয়োজন হয়):

function publish_future_post_now($id) {
    $post = get_post($id);
    if ('show' == $post->post_type)
        wp_publish_post($id);
}

আশাকরি এটা সাহায্য করবে?


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

আমি আপনার প্রশ্নটি বেশ কয়েকবার পড়েছি তবে এটি প্রস্তাবিত কোড যা কাজ করে না সেটিকে অগ্রাহ্য করলে আপনি ঠিক কী অর্জন করতে চাইছেন তা এখনও আমার কাছে অস্পষ্ট। আপনি ঠিক কী সম্পাদন করতে চাইছেন তা কি আপনি পরিষ্কার করতে পারেন? আপনি কি পোস্ট_ডেটে যে তারিখ / সময় পোস্টটি প্রকাশ করতে চান, বা অন্য কিছু? নাকি এরই মধ্যে সমাধান করেছেন?
মাইকচিন্কেল

এটি ইতিমধ্যে সমাধান হয়েছে (আমি নীচে কোড সরবরাহ করেছি)। আমি কেবল ভবিষ্যতের জন্য নির্ধারিত থাকলেও কাস্টম পোস্ট টাইপ পোস্টটি প্রকাশ করতে চেয়েছিলাম।
কর্টিজমলে

4

আমি মনে করি এই ক্রিয়াটি ডাকবে wp_transition_post_status। কোডটি হ'ল:

function wp_transition_post_status($new_status, $old_status, $post) {
    do_action('transition_post_status', $new_status, $old_status, $post);
    do_action("${old_status}_to_$new_status", $post);
    do_action("${new_status}_$post->post_type", $post->ID, $post);
}

সুতরাং ভবিষ্যতের সাধারণ পোস্টগুলির জন্য সর্বশেষ হুক হবে future_postতবে আপনার টাইপের জন্য এটি future_showআপনার টাইপ স্লাগ যা হবে তা হবে ।


1

যদি আপনি যা করতে চান তার সবগুলিই 'শো টাইম' এর জন্য অতিরিক্ত তারিখ যুক্ত করা হয়, তবে মেটা বাক্স যুক্ত করা আরও সহজ হতে পারে যা ঠিক এটি করে - প্রকাশের তারিখটি ফাঁকি দেওয়ার জন্য এটি সম্ভাব্য সমস্যাযুক্ত হতে পারে, কারণ ওয়ার্ডপ্রেস এটি সেট করবে "ভবিষ্যত" স্থিতি যখনই ভবিষ্যতের প্রকাশের তারিখের সাথে আপডেট হয় (আমার মনে হয়), যাতে কোনও পোস্ট আবার সেট করতে আপডেট হওয়ার সময় আপনাকে প্রতিবারই ঝুঁকতে হবে। এছাড়াও, সেই উদ্দেশ্যে আপনি কীভাবে উদ্দেশ্যে তা "প্রকাশের তারিখ" সংরক্ষণ করতে পারেন।

আমি সম্ভবত একটি meta_keyএবং একটি কাস্টম মেটা বাক্স ব্যবহার করব। যদিও এটি নির্ভর করে আপনার প্রশ্নগুলি কতটা জটিল তা পোস্টগুলি দেখায়।

আপনি যদি টাইমস্ট্যাম্প হিসাবে মেটা_ভ্যালু সেট করে থাকেন তবে আপনি শো শুরুর তারিখটি এখনও স্থির করতে পারেন বা নির্দিষ্ট তারিখের আগে / পরে নির্বাচন করতে পারেন:

$events = get_posts( 'post_type=events&meta_key=show_time&meta_value=' . strtotime( '+1 week' ) . '&meta_compare=<&orderby=meta_value' );

বর্তমান তারিখ থেকে এক সপ্তাহ পরে কোনও শোটাইম সহ সমস্ত "ইভেন্ট" পাবেন। দ্রষ্টব্য: উপরেরটি অনির্ধারিত, তবে কাজ করা উচিত :)


আমি এই 100% এর সাথে একমত - ইভেন্টের তারিখের জন্য হ্যাক হিসাবে প্রকাশের তারিখটি ব্যবহার করার চেয়ে একটি মেটা বক্স ব্যবহার করা আরও ভাল।
ট্র্যাভিস নর্থক্যাট

হ্যাঁ একটি মেটা_বক্স কাজ করবে তবে একটি সুন্দর jQuery তারিখ এবং সময় চয়নকারী যুক্ত করা আমার পক্ষে কঠিন মনে হয়েছে। স্টক ডাব্লুপি এক সাথে আমার সামনে আসতে পারে তার চেয়ে সুন্দর ছিল।
কার্টিজমলে

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

0

ডব্লিউপি দেব নাসিন একটি সাধারণ ফাংশন ওভাররাইড ব্যবহার করে:

remove_action('future_post', '_future_post_hook');
add_filter( 'wp_insert_post_data', 'nacin_do_not_set_posts_to_future' );

function nacin_do_not_set_posts_to_future( $data ) {
    if ( $data['post_status'] == 'future' && $data['post_type'] == 'post' )
        $data['post_status'] = 'publish';
    return $data;
}

এটি কীভাবে কাজ করে তার জন্য কিছু ব্যাখ্যা যুক্ত করুন।
নিকোলাই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.