আমি কীভাবে খসড়া পোস্টটি সবার জন্য অ্যাক্সেসযোগ্য করব?


13

আমার ওয়ার্ডপ্রেস ওয়েবসাইটে আমার বেশ কয়েকটি অপ্রকাশিত পোস্ট রয়েছে এবং আমি সাধারণ পোস্ট স্লাগস ( site.com/post-here) ব্যবহার করে এটি সাধারণ ব্যবহারকারীদের (যারা লগ ইন নেই) এর জন্য অ্যাক্সেসযোগ্য করার চেষ্টা করছি । আমি বুঝতে পারি এটি সেরা অনুশীলন নাও হতে পারে তবে আমার বিশেষ উদ্দেশ্যে, এটি করা দরকার।

আমি আমার functions.phpফাইলটিতে নিম্নলিখিত কোড স্নিপেট যোগ করার চেষ্টা করেছি :

function enable_view_drafts() {
$role = get_role( 'subscriber' ); 
$role->add_cap( 'read_private_posts' ); 
$role->add_cap( 'edit_posts' );
}
add_action( 'after_setup_theme', 'enable_view_drafts');

আমি initপরিবর্তে হুক চেষ্টা করেছি after_setup_theme। ভাগ্য নেই.

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

তবে যখন আমি পৃষ্ঠাটি সাধারণ ব্যবহারকারী হিসাবে অ্যাক্সেস করার চেষ্টা করি তখন পোস্টের সামগ্রীটি দেখানোর পরিবর্তে আমাকে একটি 404 পৃষ্ঠা প্রদর্শিত হচ্ছে। আমি পূর্বরূপ ইউআরএল ( site.com/?p=212&preview=true) লোড করার চেষ্টাও করেছি কিন্তু এটি কার্যকর হয়নি।

এগুলি আমার অনুমানগুলি:

  • সাধারণ ব্যবহারকারীর capsখসড়া পোস্ট পড়ার মতো পর্যাপ্ত পরিমাণ নেই ।
  • ফ্রন্ট-এ ড্রাফ্ট পোস্টগুলি পরীক্ষা করা এবং দেখা কোনও ব্যবহারকারীর (প্রশাসক সহ) পক্ষে সম্ভব নয়।

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

দ্রষ্টব্য: আমি প্লাগইন ভিত্তিক সমাধানগুলি খুঁজছি না।


2
আমি মনে করি এখানে কিছুটা বিভ্রান্তি রয়েছে। কেউ সালে তিনি লগ করা না থাকলে / সে না একটি ব্যবহারকারী, তাই সে / সে না কোন ক্যাপ। গ্রাহক ব্যবহারকারী, তাই তারা রেজিস্ট্রেশন করতে হবে এবং লগইন গ্রাহক হিসাবে স্বীকৃত করা নিশ্চিত করুন। লগ ইন না করে এমন কাউকে আপনি ক্ষমতা দিতে পারবেন না you আপনি যদি কেউ লগইন না করে আপনার পোস্ট দেখতে চান তবে প্রকাশিত পোস্টগুলি থেকে একেবারেই আলাদা নয়। তাহলে, কেন এটি প্রকাশ্য নয়? বা আপনি গ্রাহকদের কাছে খসড়াটি প্রদর্শন করতে চান (গ্রাহক হিসাবে লগ ইন করেছেন)?
গাজাজ্যাপ

@ জিএম: আমি অপ্রকাশিত পোস্টগুলিকে সবার কাছে অ্যাক্সেসযোগ্য করার চেষ্টা করছি যারা এই পোস্টে প্রত্যক্ষভাবে প্রকাশিত তথ্য জানে। এটি একটি অদ্ভুত প্রয়োজনীয়তার মতো মনে হতে পারে তবে একটি প্রকল্পের জন্য আমার এটি দরকার। যেমনটি আমি আমার প্রশ্নে উল্লেখ করেছি, যদি এটি সম্ভব না হয় - আপনি কি অন্য কাজের ক্ষেত্রগুলির প্রস্তাব দিতে পারেন (যদি আপনি অবশ্যই জানেন তবে)?
অমল মুরালি

@ জিএম: আপনি কি এমন কোনও প্লাগইন জানেন যা এটি করে?
অমল মুরালি

আপনি ঠিক নীচে উত্তর 3 টি upvotes দিয়ে পড়েছেন? এটি কীভাবে করবেন তা ব্যাখ্যা করে এবং উত্তরের শেষে আপনি গিথুব থেকে একটি সম্পূর্ণ কার্যকারী প্লাগইন ডাউনলোড করার জন্য একটি লিঙ্ক খুঁজে পান।
গাজাজ্যাপ

উত্তর:


12

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

URL- এর জন্য আমি একটি শেষ পয়েন্ট ব্যবহার করব :

add_rewrite_endpoint( 'post-preview', EP_ROOT );

এখন আপনি এই জাতীয় URL তৈরি করতে পারেন ...

http://example.com/post-preview/123

123পোস্ট আইডি কোথায় ।

তারপরে পোস্ট আইডি পরিদর্শন করতে একটি কলব্যাক হ্যান্ডলার ব্যবহার করুন, এটি বৈধ কিনা তা পরীক্ষা করুন এবং মূল ক্যোয়ারীটি ওভাররাইট করুন। এটি সম্ভবত একমাত্র গ্রহণযোগ্য ব্যবহারের ক্ষেত্রে query_posts()। :)

আসুন ধরা যাক শেষ পয়েন্টটি একটি শ্রেণি T5_Endpoint(একটি মডেল), এবং আউটপুট হ্যান্ডলারটি একটি শ্রেণি T5_Render_Endpoint(একটি দর্শন) যা মডেলটি আগে পাস করেছিল passed তারপরে সম্ভবত একটি পদ্ধতি render()বলা আছে template_redirect:

public function render()
{
    $post_id = $this->endpoint->get_value();

    if ( ! $post_id )
        return;

    if ( 1 !== $this->meta->get_value( $post_id )
        or 'publish' === get_post_status( $post_id )
        )
    {
        wp_redirect( get_permalink( $post_id ) );
        exit;
    }

    $query = array (
        'suppress_filters' => TRUE,
        'p'                => $post_id,
        'post_type'        => 'any'
    );

    query_posts( $query );

    add_action( 'wp_head', 'wp_no_robots' );
}

$this->metaT5_Post_Metaপোস্ট মেটা মানের জন্য অন্য একটি মডেল (শ্রেণি ) যা পূর্বরূপের অনুমতি দেওয়া থাকলে তা নিয়ন্ত্রণ করে। নিয়ন্ত্রণ মধ্যে সেট করা হয় প্রকাশ করুন বক্স ( কর্মpost_submitbox_misc_actions ), আরেকটি দৃশ্য যে একই মেটা বর্গ পায় দ্বারা রেন্ডার।

স্ক্রিন শট

সুতরাং T5_Post_Metaকোথায় এবং কখন মেটা মান সংরক্ষণ করবেন তা জানে, দর্শনগুলি এটি দিয়ে কিছু করে।
এছাড়াও, পোস্ট প্রকাশিত হলে পোস্ট মেটা ক্ষেত্রটি মুছতে হুক করুনtransition_post_status । আমরা সংস্থান নষ্ট করতে চাই না, তাই না?

এটি কেবল একটি রূপরেখা। কভার করার জন্য অনেকগুলি বিবরণ রয়েছে ... আমি একটি ছোট প্লাগইন লিখেছি যাতে এটি কীভাবে প্রয়োগ করা যায় তা দেখায়: টি 5 পাবলিক পূর্বরূপ


তোমাকে অনেক ধন্যবাদ. অবশেষে কিছু টুইটের মাধ্যমে আমি আমার লক্ষ্য অর্জন করেছি। অসাধারণ. : ডি
অমল মুরালি

6

আমি উপরের @ টসচো জবাবের চেয়ে সহজ উপায় বলে যা মনে করেছি তাতে এই সমস্যার সমাধান করেছি।

আমার ব্যবহারের ক্ষেত্রটি হ'ল আমি কোনও অভ্যন্তরীণ ইন্ট্রানেট স্টেজিং সাইট এবং জনসাধারণের মুখোমুখি সাইটের জন্য একই ডেটাবেসটি ব্যবহার করছি, এবং কর্মপ্রবাহটি হ'ল লেখকরা খসড়া লেখেন এবং প্রকাশের আগে ইন্ট্রনেট সাইটে যারা খসড়াগুলি দেখেন তাদের সাথে ভাগ করে নেন। আমি খসড়া দেখতে লগইন করার জন্য পর্যালোচকদের বিশেষত চাইনি, তাই আমি কেবল একটি ধ্রুবকের উপর নির্ভর করে ENV_PRODUCTIONযা হোস্ট-নেম-এর ভিত্তিতে ডাব্লুপি-কনফিগারেশন ফাইলে সেট করা আছে $_SERVER['SERVER_NAME']ENV_PRODUCTIONএখানে চেকগুলি যা করছে তা ঠিক; প্রযোজনার সাইটটি যদি দেখা হচ্ছে তবে কেবলমাত্র এই সমস্ত ফিল্টারই সংক্ষিপ্ত করে রেখেছি।

এটি কিছুটা অদ্ভুত, কারণ আপনাকে ডাব্লুপিউকিউয়ারি $ wp_query-> পোস্ট অ্যারে থেকে সমস্ত পোস্ট সরিয়ে দেওয়ার পরে আপনাকে অবশ্যই প্রবেশ করতে হবে তবে এটি আমার কাছে স্থিতিশীল এবং সুরক্ষিত বলে মনে হয়।

/*
 * On staging site home and archives, drafts should be visible.
 */
function show_drafts_in_staging_archives( $query ) {
    if ( ENV_PRODUCTION )
        return;

    if ( is_admin() || is_feed() )
        return;

    $query->set( 'post_status', array( 'publish', 'draft' ) );
}

add_action( 'pre_get_posts', 'show_drafts_in_staging_archives' );


/*
 * Make drafts visible on staging site single views.
 *
 * (Because on single views, WP_Query goes through logic to make sure the 
 * current user can edit the post before displaying a draft.)
 */
function show_single_drafts_on_staging( $posts, $wp_query ) {
    if ( ENV_PRODUCTION )
        return $posts;

    //making sure the post is a preview to avoid showing published private posts
    if ( ! is_preview() )        
        return $posts;

    if ( count( $posts ) )
        return $posts;

    if ( !empty( $wp_query->query['p'] ) ) {
        return array ( get_post( $wp_query->query['p'] ) );
    }
}

add_filter( 'the_posts', 'show_single_drafts_on_staging', 10, 2 );

ফিল্টারগুলির দুটি পৃথক অংশ রয়েছে।

  • "Pre_get_posts" হুকের একটি ফিল্টার মঞ্চ সাইটে ডিফল্ট পোস্ট_স্ট্যাটাসকে 'প্রকাশ, খসড়া' হিসাবে সেট করে। এটি সংরক্ষণাগার তালিকায় খসড়া পোস্টগুলি ফিরিয়ে দেবে।
  • একক দর্শনগুলির জন্য একটি পৃথক ফিল্টার প্রয়োজন, কারণ ডাব্লুপিউকিউয়ারি ক্লাসে কোয়েরির ফলাফলগুলি থেকে খসড়া পোস্টগুলি সরাতে কিছু বাজে যুক্তি রয়েছে যদি না বর্তমান ব্যবহারকারীর এগুলি সম্পাদনা করতে পারে। 'The_posts' ফিল্টার করে এবং ফলাফলটি ঠিক ফিরে পেতে চেয়েছিলাম এমন পোস্ট যুক্ত করে আমি এটি পেয়েছিলাম।

2
এটি অবিশ্বাস্য , এ ভাগ করে নেওয়ার জন্য আপনাকে অনেক ধন্যবাদ। একেবারে নিখুঁত এবং ঠিক আমার যা প্রয়োজন ছিল
খ্রিস্টান ভার্গা

আমি এই কোডটি কোথায় রাখব? (কোন ফাইল (গুলি)?
জোয়েলিও

@ জোয়েলিও আপনি যে সমস্যার সমাধান করছেন সে সম্পর্কে আপনি কি নির্দিষ্ট থাকতে পারেন? একটি সহজ পদ্ধতির হিসাবে, আমি এই কোডটি আমার ফাংশন.এফপি-তে কেবল যুক্ত করেছি এবং আমার ডাব্লুপি-কনফিগারেশন.এফপি-তে একটি সাধারণ সংজ্ঞা যুক্ত করেছি যা অনুরোধ ডোমেনের উপর নির্ভর করে ENV_PRODUCTION ধ্রুবকে সত্য বা মিথ্যাতে সেট করে।
সুবর্ণপলস

@ গোল্ডেন্যাপলস আমি এই ফাংশন কোডটি আমার ফাংশন.পিপি-তে যুক্ত করেছি, ডাব্লুপি-কনফিগারেশনে আমার কী যুক্ত করা উচিত? আপনার সহায়তার জন্য ধন্যবাদ
গ্রাহাম স্লিক

@ মাথিয়াসগ্রাহাম্লিক - আপনার প্রযোজনায় থাকলে এমন কিছু প্রয়োজন যা ENV_PRODUCTIONধ্রুবক স্থির করে দেয়। আমি প্রোডাকশনের জন্য ডোমেন.কম এবং স্টেজিং.ডোমেন.কমকে মঞ্চের জন্য ব্যবহার করছিলাম, সুতরাং আমার লাইনটি define( 'ENV_PRODUCTION', false === stripos( $_SERVER['HTTP_HOST'], 'staging' ) );কি সেই সাহায্য করে?
সোনার অ্যাপলস

0

আমি মনে করি WordPress.org এর ওয়েবসাইটে উপলব্ধ "ব্যবহারকারী ভূমিকা সম্পাদক" প্লাগইনটি আপনি যা খুঁজছেন তা হতে পারে। যাইহোক, আপনি কেন আপনার খসড়াগুলিতে প্রত্যেককে অ্যাক্সেস দিতে চান? আমি ব্যক্তিগতভাবে এমন উদাহরণের কথা ভাবতে পারি না যেখানে এটির প্রয়োজন হবে।


না, প্রশ্নটিতে উল্লিখিত হিসাবে, আমি প্লাগইন ভিত্তিক সমাধানগুলি খুঁজছি না। ব্যবহারের হাতটি কিছুটা জটিল তবে আমি নিশ্চিত যে এই নির্দিষ্ট কাজটি করার জন্য আমি চেষ্টা করছি এটির জন্য এটিই সেরা সমাধান । :-)
অমল মুরালি

আমি কারণটি নিয়েও হতবাক হয়েছি। আপনি যদি সবাই পোস্টটি দেখতে চান তবে কেন কেবল পোস্টটি প্রকাশ করবেন না? আপনি সংজ্ঞা দিতে চান এমন কোনও বিশেষ রাজ্য ট্র্যাক করতে আপনি পোস্টে কাস্টম ক্ষেত্রগুলি ব্যবহার করতে পারেন।
কেনবি

আমি ব্যবহারকারীদের সামগ্রীটি দেখতে দিচ্ছি, তবে কিছু নির্দিষ্ট কারণে আমি পোস্টগুলি প্রকাশিত হতে চাই না।
অমল মুরালি

0

আপনি কেবল পৃষ্ঠা / পোস্টের দৃশ্যমানতাটি "ব্যক্তিগত" তে পরিবর্তন করতে পারেন যা কেবল সম্পাদক এবং প্রশাসকের কাছে দৃশ্যমান এবং সর্বজনীন দর্শক, অনুসন্ধান ইঞ্জিন, আরএসএস ফিডস ইত্যাদিতে নয় visible


0

আমি মনে করি জিএম এর মন্তব্য এখানে সেরা। আমি ধরে নিচ্ছি আপনি নিম্নলিখিতগুলি করার চেষ্টা করছেন:

  1. একটি পোস্ট লিখুন
  2. খসড়া হিসেবে সংরক্ষণ করুন
  3. কোনও বহিরাগতকে (লগ-ইন না করা) অনুমোদনের জন্য খসড়াটি দেখার অনুমতি দিন
  4. প্রকাশ করা

এটা কি ঠিক?

দুর্ভাগ্যক্রমে, আমি এটি করার কোনও সহজ উপায় সম্পর্কে ভাবতে পারি না। আপনি এটি একটি ব্যক্তিগত পোস্ট হিসাবে পোস্ট করতে পারেন যাতে এটি দেখার জন্য তাদের একটি পাসওয়ার্ড প্রবেশ করতে হবে তবে এই জন্য আপনাকে লগ ইন করতে হবে। আপনি এটি পাসওয়ার্ডও সুরক্ষিত রাখতে পারেন, তবে তারপরেও এটি আপনার ফিডে এবং সাম্প্রতিক পোস্টগুলির তালিকায় উপস্থিত হবে etc.

আরও তথ্যের জন্য এখানে পড়ুন: http://codex.wordpress.org/Content_Visibility

বিকল্পভাবে, এমন একটি প্লাগইন রয়েছে যা আপনার প্রয়োজন অনুসারে উপযুক্ত হতে পারে: http://wordpress.org/extend/plugins/shareadraft/ আমি কোডটি একবার দেখেছি এবং এটি বিকাশকারী get_post_status দ্বারা ফিরিয়ে দেওয়া মানটি পরিবর্তন করছে যাতে আপনি হতে পারেন এটির সাথে চারপাশে খেলতে সক্ষম:

http://codex.wordpress.org/Function_Reference/get_post_status

আছে HTH


0

পোস্টটি "প্রকাশিত" আছে কিনা তা আপনি যদি খেয়াল না করেন তবে কেবল নিয়মিত প্রকাশিত ইউআরএল এ যে কারও কাছে এটি অ্যাক্সেসযোগ্য এবং মূল পৃষ্ঠায় / অনুসন্ধানের ফলাফলগুলি / আরএসএস ফিডস ইত্যাদি প্রদর্শন না করা ইত্যাদি চান, এই প্লাগইনটি ডাব্লুপি 4.6 এর সাথে কাজ করেছে। 1 এবং আপনাকে সূক্ষ্ম সুর দেওয়ার সুযোগ দেয় যেখানে কোনও পোস্ট আসে:

https://wordpress.org/plugins/wp-hide-post/

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