পোস্ট প্রকাশের আগে কোনও কাস্টম ফিল্ডকে বৈধতা দেওয়ার জন্য কি কোনও অ্যাকশন ফিল্টার / হুক রয়েছে?


11

আমার কাছে কাস্টম দায়ের করা আছে xxxx_urlxxxx_urlঅনন্য হতে হবে।

সুতরাং, পোস্টটি প্রকাশের আগে, আমি নিশ্চিত করতে চাই যে xxxx_urlএটি অনন্য কিনা ? এটি অনন্য না হলে, পোস্ট প্রকাশ করা প্রত্যাখ্যান করা উচিত।

চেষ্টা করেছি publish_post। তবে এটি সঠিক নয়, কারণ পোস্টটি প্রকাশ করার সময় এটি ট্রিগার করে। আমি প্রকাশের ঠিক আগে আমার কোডটি চালাতে চাই।


1
কেন বর্তমান পোস্ট আইডিটিকে অনন্য মান হিসাবে সেট করা হচ্ছে না। লাইক: পোস্ট আইডি 132_urlকোথায় 132। আপনার এখানে সর্বদা একটি অনন্য মান রয়েছে। তা ছাড়াও: কাস্টম ক্ষেত্রগুলি save_postক্রিয়াকলাপে সংরক্ষণ করা উচিত । এই ক্রিয়ায় আপনি কাস্টম ক্ষেত্রটি পরীক্ষা করতে পারেন (যদি এটি খালি না থাকে এবং উদাহরণের জন্য এটির একটি অনন্য মূল্য থাকে), এবং এর ভিত্তিতে এবং update_post_metaনা or আমার ধারণা আপনি কাস্টম ক্ষেত্রটিও পরীক্ষা করে দেখতে পারেন এবং এর যদি কোনও অনন্য মূল্য না থাকে তবে প্রকাশনা অক্ষম করার post-statusজন্য এটি draftবা অন্য কিছু সেট করুন । অন্যথায় আমার মনে হয় এটি করার জন্য আপনার jQuery দরকার।
এলডাব্লুএস-মো

উত্তর:


5

শুরুতে wp_insert_post, যে ফাংশন কোনও পোস্ট সংরক্ষণ করে / আপডেট করে, সেখানে একটি ফিল্টার বলা হয় wp_insert_post_empty_content। ডিফল্টরূপে এই ফিল্টারটি শিরোনাম, সম্পাদক এবং সংক্ষিপ্ত ক্ষেত্রগুলি সমস্ত খালি কিনা তা পরীক্ষা করে থাকে, সেক্ষেত্রে সংরক্ষণের প্রক্রিয়াটি বন্ধ হয়ে যাবে।

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

add_filter ('wp_insert_post_empty_content','wpse312975_check_unique_url',10,2);
function wpse312975_check_unique_url ($maybe_empty, $postarr) {

  // extract custom field from $postarr, check uniqueness

  if ($unique) return false else return true;
  }

দ্রষ্টব্য: সঞ্চয়ের প্রক্রিয়াটি থামাতে ফাংশনটিতে অবশ্যই 'সত্য' ফিরে আসতে হবে।

কাস্টম ক্ষেত্রটি অনন্য না হলে আপনি একটি সতর্কতা প্রতিধ্বনিত করতে চাইতে পারেন।


2
এটি সম্ভবত কাজ করবে তবে সমাধান হওয়ার চেয়ে হ্যাকের মতো দেখতে আরও কিছুটা লাগবে। আমি এটিও বিবেচনা করেছি, তবে পরে শূন্য সামগ্রীরwp_insert_post_empty_content জন্য শব্দার্থগতভাবে পোস্ট না করার সিদ্ধান্ত নিয়েছি । এটি বলার পরে, আমি কোনও হুক পাইনি যা এর জন্য শব্দার্থগতভাবে সঠিক।
স্কট

ঠিক আছে, যদি এটি কেবল খালি শিরোনাম এবং সামগ্রীর জন্য হয় তবে ডেভেলপারদের জন্য কোনও ফিল্টার থাকতে পারে না।
সিজেবিজে

1
আপনি যদি কেবল 'খালি' শব্দের দিকে কম মনোযোগ দেন তবে আমি বলব যে এই ফিল্টারটি সংরক্ষণের জন্য ন্যূনতম প্রয়োজনীয়তাগুলি পূরণ করে কিনা তা পরীক্ষা করে বোঝানো হচ্ছে। ওপি ন্যূনতম প্রয়োজনীয়তা আরও বিস্তৃত করতে চায়। সম্ভবত ফিল্টারটির নাম wp_insert_post_valid_contentপ্রকাশ করা উচিত যা প্রকাশ করতে পারে, তবে বাকীগুলির জন্য এটি ঠিক সঠিক জায়গায়।
সিজেবিজে

@cjbj আপনার এই প্রশ্নটি থাকলে আপনি সঠিক ফিল্টারটি কীভাবে খুঁজে পাবেন? মানে আপনি কীভাবে wp_insert_post_empty_contentফিল্টার পেলেন ?
আমি সবচেয়ে বোকা ব্যক্তি

1
ঠিক আছে, আপনি যখন কিছু সময়ের জন্য ডাব্লুপি সঙ্গে কাজ করছেন, আপনি ধরনের জানেন যে কোডটির কোন অংশটি প্রশাসকের কোন অংশটি উত্পন্ন করে। সুতরাং আপনি ফাইলটি সন্ধান করুন এবং উপলব্ধ ফিল্টারগুলির জন্য উত্স কোডটি পরীক্ষা করুন।
সিজেবিজে

1

এমনকি প্রকাশের জন্য পোস্ট জমা দেওয়ার আগে স্বতন্ত্রতা পরীক্ষা করতে এজ্যাক্স ব্যবহার সম্পর্কে কীভাবে?

$( '#post' ).on( 'submit', function( event ) {
  event.preventDefault(); // Prevent publishing

  //Now do some AJAX Checks
  $.post( ajaxurl, data, function(response) {
    if ( response === 'success' ) {
        $( this ).off( event ).submit();
    } else {
        alert( 'The custom field must be unique' );
    }
  });
});  

কোডটি পরীক্ষিত না হলেও এটি কাজ করা উচিত। আপনার পছন্দসই ফলাফলটি পেতে আপনার সাথে এটি খেলতে হবে।


0

আমি ডাব্লুপি_সিন্ট_পোস্ট_ডেটা ফিল্টারটি ঘুরে দেখব এবং যতটা সম্ভব কম হস্তক্ষেপটি পরিচালনা করব কারণ আমি বুঝতে পেরে আপনি কোনও পোস্টের সন্নিবেশকে আটকাতে চান না, আপনি কেবল নকল মেটা মান সহ একটি পোস্ট প্রকাশ করা এড়াতে চান।

আমি এই ক্ষেত্রে খুব বেশি ছাড়তে পারি না কারণ আপনি কোনও কোড ভাগ করেননি তবে এখানে কোনও ফিল্টারটির সিউডো কোড রয়েছে যা কাজ করবে:

function wp8193131_check_if_meta_value_is_unique ( $data, $postarr ) {
    // setup an uniqueness flag.
    $meta_is_unique = true;

    // check if the meta is unique and modify the `$meta_is_unique` flag accordingly.
    // {...} <- your code

    // if the meta is NOT unique keep the post status in draft.
    if ( ! $meta_is_unique ) {
        // you can force the current post to be draft until the meta value will became unique.
        $data['post_status'] = 'draft';
        // maybe, update the meta value with a hint of the fact that it's not unique.
        // or display a dashboard notice about it.
    }

    return $data;
}
add_filter( 'wp_insert_post_data', 'wp8193131_check_if_meta_value_is_unique' );

এই ফিল্টারটি সম্পর্কে আরও একটি দুর্দান্ত বিষয় হ'ল এটি সংযুক্তিগুলির থেকে পৃথক wp_insert_attachment_data

আমি আশা করি এটি সাহায্য করে এবং আপনি যা কিছু করেন তা দুর্দান্ত লাগে!


2
এটি একটি ভাল ধারণা নাও হতে পারে। ব্যবহারকারী যদি এটি আপডেট করে থাকে $data['post_status']তবে কী publishহবে? পোস্টটি কি সেই পোস্টের draftজন্য কোনও 404সমস্যা তৈরি হিসাবে তৈরি করবে না ?
স্কট

@ স্কট অন্য কথায়, যদি কোনও প্রকাশিত পোস্ট তার মেটা মানটি অনন্য নয় সংরক্ষণ করে সনাক্ত করে তবে পোস্ট প্রকাশনা প্রত্যাখ্যান করা উচিত, এবং পোস্টটি খসড়া করা উচিত। আবার, আমি জানি না যে মেটা মানটি কতটা গুরুত্বপূর্ণ, তবে এটি যদি বাছাই করা ডেটা টাইপ বা প্রয়োজনীয় কিছু হয় তবে পোস্টের স্থিতি খসড়া হওয়া উচিত (যার অর্থ একটি 404 ইস্যু নয়, এটি কেবল বলে যে পোস্টটি হয়েছে সর্বজনীন দৃষ্টিভঙ্গি থেকে অবসর নেওয়া)
আন্দ্রেই

-1

চেক যেতে হবে wp_insert_post। যখনই পোস্ট প্রকাশিত বা সম্পাদিত হয় তখন এই হুকটি বরখাস্ত করা হয়।

সেখানে, আপনি যদি কোনও পোস্টের ইতিমধ্যে একই xxxx_urlমান আছে কিনা তা যাচাই করতে একটি কাস্টম ক্যোয়ারী করতে পারেন ।

add_action('wp_insert_post', function($post_id) {
    $meta_key = 'xxxx_url';
    $meta_value = get_post_meta($post_id, $meta_key, true);
    $query = new WP_Query([
        'post_type' => get_post_type($post_id),     // This might be unnecessary, if you check `post` post type only. Or use `any`.
        'meta_query' => [
            [
                'meta_key' => $meta_key,
                'meta_value' => $meta_value,
            ]
        ]
    ]);
    if ($query->have_posts()) {
        // invalid key, post with the same value already exists
    } else {
        // valid, key was not found anywhere
    }
});

3
আমি জানি, আপনার ভিতরে যাই লিখুন তবে / অন্য বিবৃতি পোস্ট প্রকাশিত হবে, যেহেতু wp_insert_postকোনও পোস্ট সংরক্ষণের পরে একবার অ্যাকশন চালিত হয়ে যায় , এটি পোস্ট প্রকাশ বা সন্নিবেশ আটকাতে পারে না।
আমি সবচেয়ে বোকা ব্যক্তি

সুতরাং আপনি কি প্রকাশনা ব্লক করতে চান, পোস্ট যদি বৈধতা ব্যর্থ হয়? আপনি নিজের প্রশ্নে লিখেছেন?
পেট্র সিবুলকা

আমি If it isn't unique it should reject publishing post.আমার প্রশ্নে তা স্পষ্টভাবে উল্লেখ করেছি।
আমি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.