বাহ্যিক শ্রেণি থেকে কোনও ক্রিয়া সরান


8

আমি এখানে এই প্রশ্নের অনুরূপ কিছু করার চেষ্টা করছি: বহিরাগত ক্লাসগুলির সাথে সরানো_অ্যাকশন বা সরানো_ ফিল্টার?

আমি অপসারণ করার চেষ্টা করছি

<!-- This site is optimized with the Yoast WordPress SEO plugin v1.0.3 - http;//yoast.com/wordpress/seo/ -->

প্লাগইন থেকে বার্তা।

এবং আগে আপনি কিভাবে এই হতে পারে অনৈতিক লেখক বলেছেন তা এখানে করতে ঠিক আছে আমার চিত্কার: http://wordpress.org/support/topic/plugin-wordpress-seo-by-yoast-how-to-remove-dangerous -inserted-Yoast বার্তা-ইন-পৃষ্ঠা-হেডার? জবাব দেওয়া = 29 # পোস্ট 2503475

আমি এখানে ক্লাসটি পেয়েছি যা এখানে মন্তব্যটি যুক্ত করেছে: http://plugins.svn.wordpress.org/wordpress-seo/tags/1.2.8.7/frontend/class-frontend.php

মূলত WPSEO_Frontendবর্গ একটি ফাংশন নাম দিয়েছে debug_markerযা পরে নামে একজন ফাংশন দ্বারা বলা হয় headযা পরে যোগ করা হয় wp_head__Construct

আমি ক্লাসে নতুন তবে আমি সম্পূর্ণরূপে মাথা মুছে ফেলার একটি উপায় খুঁজে পেয়েছি

global $wpseo_front;    
remove_action( 'wp_head', array($wpseo_front,'head'), 1, 1 );

তবে আমি কেবল debug_markerএটি থেকে অংশটি সরাতে চাই । আমি এটি চেষ্টা করেছিলাম কিন্তু এটি কাজ করে না remove_action( 'wp_head', array($wpseo_front,'head','debug_marker'), 1, 1 );

যেমন আমি বলেছি আমি ক্লাসে নতুন তাই কোনও সহায়তা দুর্দান্ত হবে।

উত্তর:


5

এটি অর্জনের একটি সহজ উপায় (তবে শ্রেণি পদ্ধতির ছাড়াই) আউটপুট বাফারিংwp_head ব্যবহার করে অ্যাকশন হুকের আউটপুট ফিল্টার করা ।

আপনার থিমের মধ্যে header.php, wp_head()কলটি মোড়ানো ob_start($cb)এবং এর ob_end_flush();মতো ক্রিয়াকলাপগুলি:

ob_start('ad_filter_wp_head_output');
wp_head();
ob_end_flush();

এখন থিম functions.phpফাইলে আপনার আউটপুট কলব্যাক ফাংশনটি ঘোষণা করুন ( ad_filter_wp_head_outputএই ক্ষেত্রে):

function ad_filter_wp_head_output($output) {
    if (defined('WPSEO_VERSION')) {
        $output = str_ireplace('<!-- This site is optimized with the Yoast WordPress SEO plugin v' . WPSEO_VERSION . ' - http://yoast.com/wordpress/seo/ -->', '', $output);
        $output = str_ireplace('<!-- / Yoast WordPress SEO plugin. -->', '', $output);
    }
    return $output;
}

আপনি যদি ফাইলটি functions.phpসম্পাদনা না করেই এগুলি করতে চান তবে আউটপুট বাফারিং সেশনটি সংজ্ঞায়িত header.phpকরতে আপনি হুক get_headerএবং wp_headঅ্যাকশন হুক করতে পারেন :

add_action('get_header', 'ad_ob_start');
add_action('wp_head', 'ad_ob_end_flush', 100);
function ad_ob_start() {
    ob_start('ad_filter_wp_head_output');
}
function ad_ob_end_flush() {
    ob_end_flush();
}
function ad_filter_wp_head_output($output) {
    if (defined('WPSEO_VERSION')) {
        $output = str_ireplace('<!-- This site is optimized with the Yoast WordPress SEO plugin v' . WPSEO_VERSION . ' - http://yoast.com/wordpress/seo/ -->', '', $output);
        $output = str_ireplace('<!-- / Yoast WordPress SEO plugin. -->', '', $output);
    }
    return $output;
}

আমি হুক পদ্ধতিটি দিয়েছিলাম তাই আমাকে হেডার.এফপি সম্পাদনা করতে হবে না। ধন্যবাদ।
ব্রুক

4

আপনার সমস্ত সহায়তার জন্য ধন্যবাদ, আমি অবশেষে এটি সমাধান করেছি। আমি আমার শিশু থিমের জন্য একটি ফাংশন.এফপি তৈরি করেছি, তারপরে যুক্ত করুন

// we get the instance of the class
$instance = WPSEO_Frontend::get_instance();
/* then we remove the function
    You can remove also others functions, BUT remember that when you remove an action or a filter, arguments MUST MATCH with the add_action
    In our case, we had :
    add_action( 'wpseo_head', array( $this, 'debug_marker' ), 2 );

    so we do : 
    remove_action( 'wpseo_head', array( $this, 'debug_marker' ), 2 );
    */
    remove_action( 'wpseo_head', array( $instance, 'debug_marker' ), 2 );

এটি সেরা উত্তর
sMyles

আপনি যদি শ্রেণি অবজেক্টে অ্যাক্সেস পেতে না পারেন তবে আপনি আমার remove_class_action/ অ্যাকশন ফিল্টারটি ব্যবহার করতে পারবেন gist.github.com/tripflex/c6518efc1753cf2392559866b4bd1a53
sMyles

3

আমি মনে করি না আপনি এটি ব্যবহার করে সক্ষম হতে চলেছেন remove_action। ফাংশন আর্গুমেন্ট remove_actionআপনাকে সাহায্য করবে debug_marker()না কারণ ফাংশনটি add_action()কলটিতে ব্যবহৃত ফাংশন ছিল না ।

Yoast সম্ভবত add_action( "wp_head", "head" )তার কোড মত কিছু আছে । সুতরাং আপনি "মাথা" ফাংশনটি সরিয়ে ফেলতে পারেন, তবে debug_markerকোনও ক্রিয়া হিসাবে স্পষ্টভাবে যোগ করা হয়নি।

আপনি পারে

  1. Yoast এর উত্স ফাইলটি সম্পাদনা করুন এবং ডিবাগ মন্তব্য লাইনটি সরিয়ে দিন।
  2. WPSEO_Frontendক্লাস প্রসারিত করুন এবং debug_markerফাংশনটি ওভারলোড "" এ ফিরে আসুন । টিবিএইচ, আমি নিশ্চিত না যে এটি ডাব্লুপিপি প্লাগইন লোড করার ক্ষেত্রে কীভাবে কাজ করবে, তবে এটি তদন্তের পক্ষে উপযুক্ত।

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

স্টিভ, আমি আপনার পোস্টে umpুকে যাওয়ার আগে সমাধান 2 চেষ্টা করছিলাম। যদিও এটি শেষ করতে আমার সমস্যা হচ্ছে। আমি এই পৃষ্ঠায় একটি উত্তর হিসাবে আমার অগ্রগতি পোস্ট। wordpress.stackexchange.com/a/209800/84030 আপনার সাহায্যের প্রশংসা করা হবে যদি আপনার যদি ধারণা হয় আমি কীভাবে এটি সমাধান করতে পারি।
অ্যাড্রিয়েন

2

উল্লিখিতSteve Claridge হিসাবে একই সমাধানে কাজ করার পরে এই থ্রেডটি সন্ধান করা , তা হ'ল:

WPSEO_Frontendক্লাস প্রসারিত করুন এবং debug_marker"" ফিরিয়ে ফাংশনটি ওভারলোড করুন

আমি নীচের পদক্ষেপগুলি বিশদ করেছিলাম, যদিও আমি চূড়ান্ত পদক্ষেপে আটকে যাচ্ছি।


একটি কাস্টমাইজেশন প্লাগইন তৈরি করুন

ডব্লিউপি ট্যাভারের এই নিবন্ধে যেমন উল্লেখ করা হয়েছে , "এটি সম্পাদন করার সহজতম উপায় হ'ল এটির সাথে চলমান কার্যকারিতা প্লাগইন তৈরি করা"।

তাই আমি এলিগ্যান্ট থিম থেকে এই নিবন্ধটি অনুসরণ করে আমার প্রথম প্লাগইন তৈরি করতে গিয়েছিলাম ।

প্রাসঙ্গিক শ্রেণি প্রসারিত করুন।

বিষয়গুলি তখন জটিল হয়ে ওঠে। আমি নিম্নলিখিতটি যুক্ত করেছি কিন্তু আমার ওভাররাইডিং ফাংশনটি কোনও কারণে এখনও ট্রিগার হয়নি।

//get the base class
if(!class_exists('WPSEO_Frontend')) {
    require_once $_SERVER['DOCUMENT_ROOT'] . '/wp-content/plugins/wordpress-seo/frontend/class-frontend.php';
}

/**
 * Class Definition
 */
class WPSEO_Frontend_GUP extends WPSEO_Frontend{

    /**
     * 
     * OVERRIDES function from YOAST SEO
     * 
     * Outputs or returns the debug marker, which is also used for title replacement when force rewrite is active.
     *
     * @param bool $echo Whether or not to echo the debug marker.
     *
     * @return string
     */
    public function debug_marker( $echo = true ) {
        return '';
    }

}

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

1

আমি খুঁজে পেয়েছি যে আপনি ফাংশন.এফপি-তে ডিবাগ_মার্কার ক্রিয়াটি সরিয়ে ফেলতে পারেন। Yoast প্লাগইন ডাব্লুপি_হেড ক্রিয়ায় কার্যকর করা হয়। আমি কেবল অ্যাকশন হুক নিয়েছি যা সরাসরি তার পরে আসে, যথা ডাব্লুপি_ইনকুই_স্ক্রিপ্ট এবং সেখানে আমি একটি ফাংশন হুক করেছি যা ডিবাগ_মার্কার আউটপুটটিকে সরিয়ে ফেলে। এর জন্য আপনাকে প্লাগইন অবজেক্টটিও পাস করতে হবে। এছাড়াও অগ্রাধিকার নম্বরটি প্লাগইনের মধ্যে থেকে একটি সেট হিসাবে একই হতে হবে।

function remove_debugmarker(){
global $wpseo_front;
remove_action( 'wpseo_head', array($wpseo_front, 'debug_marker') , 2 );
}
add_action('wp_enqueue_scripts','remove_debugmarker');

তবে এটি অপসারণ করে না

<!-- / Yoast WordPress SEO plugin. -->

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


1

আহমদের উত্তর যুক্ত করতে আপনি কেবলমাত্র একই পরিমাণ কোড সহ সমস্ত এইচটিএমএল মন্তব্য মুছে ফেলতে পারেন, যেহেতু ইওস্ট কেবল এটির মতো প্লাগইন নয়।

   <?php
   function remove_html_comments_buffer_callback($buffer) {
        $buffer = preg_replace('/<!--[^\[\>\<](.|\s)*?-->/', '', $buffer);
        return $buffer;
    }
    function remove_html_comments_buffer_start() {
        ob_start("remove_html_comments_buffer_callback");
    }
    function remove_html_comments_buffer_end() {
        ob_end_flush();
    }
    add_action('template_redirect', 'remove_html_comments_buffer_start', -1);
    add_action('get_header', 'remove_html_comments_buffer_start'); 
    add_action('wp_footer', 'remove_html_comments_buffer_end', 999);

1
জেনেরিক পদ্ধতির জন্য +1। অন্য প্লাগইন ইনস্টল করার পরে আরও একটি আসছে যেটি আবিষ্কার করতে কেবল Yoast SEO মন্তব্যটি সরাতে কিছুক্ষণ সময় লাগতে পারে।
অ্যাড্রিয়েন

হ্যাঁ আমি প্লাগিনগুলি যখন এটি করি তখন ঘৃণা করি। ইয়োস্ট, রেভস্লাইডার, ডব্লু 3 মোট ক্যাশে এবং বেশিরভাগ অন্যান্য ক্যাশে / মিনিফিকেশন প্লাগইনগুলি এবং আরও একটি টন অন্যরা এটি করে।
ব্রায়ান উইলিস

1

আমি একটি স্নিপেট জুড়ে এসেছি যা সামনের প্রান্ত থেকে সমস্ত ইয়োস্ট ওয়ার্ডপ্রেস এসইও মন্তব্যগুলি সরিয়ে দেয়। এটি @ ব্রায়ান-উইলিস এবং @ আহমাদ-এম এর উত্তরগুলি ব্যবহার করে এমন আউটপুট বাফারিং পদ্ধতির পরিবর্তন করে।

কেবল আপনার থিমের functions.phpবা একটি কাস্টম প্লাগইন / থিম পিএইচপি ফাইলে স্নিপেট রাখুন ।

আমি এখানে এটি একটি রেফারেন্স হিসাবে রেখে দেব - ক্রেডিট স্নিপেটের লেখকের কাছে যায়

/**
 * Yoast WordPress SEO Plugin - Remove All Yoast HTML Comments
 * See at: https://gist.github.com/paulcollett/4c81c4f6eb85334ba076
**/
if (defined('WPSEO_VERSION')){
  add_action('get_header',function (){ ob_start(function ($o){
  return preg_replace('/\n?<.*?yoast.*?>/mi','',$o); }); });
  add_action('wp_head',function (){ ob_end_flush(); }, 999);
}

0

এই @ আহমাদ-মি একটি পরিবর্তিত সংস্করণ উত্তর , ফিল্টার যদি আপনি শিরোলেখে এইচটিএমএল একাধিক বিষয়বস্তু পরিবর্তন করতে পারবেন প্রয়োগের দ্বারা।

function header_str_replace_start(){
    ob_start('header_str_replace_output');
}
function header_str_replace_output($output){
    return apply_filters('header_str_replace', $output);
}
function header_str_replace_finish(){
    ob_end_flush();
}
add_action('get_header', 'header_str_replace_start',-1);
add_action('wp_head', 'header_str_replace_finish', 999);


add_filter( 'header_str_replace', 'remove_yeost_seo_comments' ) ;
add_filter( 'header_str_replace', 'remove_white_space');


function remove_yeost_seo_comments($output) {
    $output = str_ireplace('<!-- / Yoast SEO plugin. -->', '', $output);
    return $output;
}


function remove_white_space($content){
     return trim(preg_replace('/\s+/', ' ', $content));
}

0

একটি অনুরূপ সমাধান খুঁজে পেয়েছে functions.phpযার জন্য হার্ডকডযুক্ত অগ্রাধিকারটি ব্যবহার করে না 2তবে গতিশীলভাবে Yoast থেকে অগ্রাধিকারটি পড়ে এবং ব্যবহার করে add_action()

// disable 'This site is optimized with the Yoast SEO ...'
if ( class_exists( 'WPSEO_Frontend') && method_exists( 'WPSEO_Frontend', 'get_instance' ) ) {
    $wpseo_front = WPSEO_Frontend::get_instance();
    if ( $wpseo_dbg_prio = has_action( 'wpseo_head', array( $wpseo_front, 'debug_mark' ) ) ) {
        remove_action( 'wpseo_head', array( $wpseo_front, 'debug_mark'), $wpseo_dbg_prio );
    }
}

-3

ওয়ার্ডপ্রেস-সিও / ফ্রন্টএন্ড / ক্লাস-ফ্রন্টএন্ড.পিপি-তে ফ্লাশ_ক্যাচ ফাংশনটি দেখুন

কোডের এই লাইনটি সন্ধান করুন

$content = str_replace( $this->debug_marker( false ), $this->debug_marker( false ) . "\n" . '<title>' . $title . '</title>', $content );

প্রতিস্থাপন

$content = str_replace( $this->debug_marker( false ), '<title>' . $title . '</title>', $content );

এই দুর্দান্ত প্লাগইনটির স্রষ্টাকে ধন্যবাদ।


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

দুঃখিত, আমি পদোন্নতি দিচ্ছি না। আমি শুধু অন্য একটি সমাধান প্রদান। সম্ভবত সেরা না।
ওয়াকানিনা

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